Skip to content

Commit

Permalink
fix(render): not judge lastSendGeometryData
Browse files Browse the repository at this point in the history
description
create gameObject gameObject1 with geometry geometry1;
create gameObject gameObject2 which share geometry geometry1 and set map to its material;
loopBody;

should send gameObject1 and gameObject2 attribute data, but actually not send gameObject2 attribute data!

reason
when render gameObject2, its geometry === lastSendGeometryData.

solution
not judge lastSendGeometryData
  • Loading branch information
yyc-git committed Mar 4, 2019
1 parent 5bfdd9c commit 5267e39
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 13 deletions.
22 changes: 12 additions & 10 deletions src/job/utils/render/RenderJobUtils.re
Original file line number Diff line number Diff line change
Expand Up @@ -124,16 +124,18 @@ let sendAttributeData =
(shaderIndex, geometryIndex) as indexTuple,
sendRenderDataSubState,
state,
) => {
let {lastSendGeometryData} as record = state.glslSenderRecord;
switch (lastSendGeometryData) {
| Some(lastSendGeometryData) when lastSendGeometryData === geometryIndex => state
| _ =>
record.lastSendGeometryData = Some(geometryIndex);

_directlySendAttributeData(gl, indexTuple, sendRenderDataSubState, state);
};
};
) =>
/*
TODO when use vao and sort geometry, use lastSendGeometryData optimize!!!
(because if not, should judge both last send geometry index and last send attribute data type(e.g. texCoords, ...)!!!)
let {lastSendGeometryData} as record = state.glslSenderRecord;
switch (lastSendGeometryData) {
| Some(lastSendGeometryData) when lastSendGeometryData === geometryIndex => state
| _ =>
record.lastSendGeometryData = Some(geometryIndex);
_directlySendAttributeData(gl, indexTuple, state);
}; */
_directlySendAttributeData(gl, indexTuple, sendRenderDataSubState, state);

let sendUniformRenderObjectModelData =
(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ let _ =
});
});
describe("send buffer", () => {
describe("optimize", () => {
/* describe("optimize", () => {
let _prepare = (sandbox, state) => {
let (state, _, geometry, _, _) =
FrontRenderLightJobTool.prepareGameObject(sandbox, state);
Expand Down Expand Up @@ -422,6 +422,55 @@ let _ =
vertexAttribPointer |> getCallCount |> expect == 2 * 1;
});
}); */

describe("fix bug", () => {
let _prepare = (sandbox, state) => {
let (state, _, geometry, _, _) =
FrontRenderLightJobTool.prepareGameObject(sandbox, state);
let (state, _, _, _) = CameraTool.createCameraGameObject(state);
(state, geometry);
};

test(
{|
create gameObject gameObject1 with geometry geometry1;
create gameObject gameObject2 which share geometry geometry1 and set map to its material;
loopBody;
should send gameObject1 and gameObject2 attribute data;
|},
() => {
let (state, geometry) = _prepare(sandbox, state^);
let (state, _, _, material2, _) =
FrontRenderLightJobTool.prepareGameObjectWithSharedGeometry(
sandbox,
geometry,
GameObjectAPI.addGameObjectGeometryComponent,
state,
);
let (state, (texture1, texture2)) =
LightMaterialTool.createAndSetMaps(material2, state);
let float = 1;
let vertexAttribPointer =
createEmptyStubWithJsObjSandbox(sandbox);
let state =
state
|> FakeGlTool.setFakeGl(
FakeGlTool.buildFakeGl(
~sandbox,
~float,
~vertexAttribPointer,
(),
),
);

let state = state |> RenderJobsTool.init;
let state = state |> DirectorTool.runWithDefaultTime;

vertexAttribPointer |> getCallCount |> expect == 5;
},
);
});

describe("send a_position", () =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ let _ =
});
});
describe("send buffer", () => {
describe("optimize", () => {
/* describe("optimize", () => {
let _prepare = (sandbox, state) => {
let (state, _, geometry, _, _) =
RenderBasicJobTool.prepareGameObject(sandbox, state);
Expand Down Expand Up @@ -469,7 +469,7 @@ let _ =
vertexAttribPointer |> getCallCount |> expect == 2;
});
});
}); */

describe("send a_position", () => {
test("bind array buffer", () => {
Expand Down

0 comments on commit 5267e39

Please sign in to comment.