public void injectRenderCmds(Pass pass) { if (myEditor.active == true) { if (myMultiSelect == true) { foreach (NodeLocation n in mySelectedNodes) { StatelessRenderCommand cmd = new RenderWireframeCubeCommand(n.min(), n.min() + new Vector3(n.size() + 0.001f), Color4.Blue); cmd.pipelineState.culling.enabled = false; cmd.pipelineState.depthTest.enabled = true; cmd.pipelineState.depthTest.depthFunc = DepthFunction.Lequal; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); } } if (myCurrentHit != null) { switch (myEditor.activeMode) { case "Block Mode": { StatelessRenderCommand cmd = new RenderWireframeCubeCommand(myClampedLocation.worldLocation(), myClampedLocation.worldLocation() + new Vector3(WorldParameters.sizeAtDepth(myEditor.cursorDepth) + 0.001f), Color4.OrangeRed); cmd.pipelineState.culling.enabled = false; cmd.pipelineState.depthTest.enabled = true; cmd.pipelineState.depthTest.depthFunc = DepthFunction.Lequal; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); if (myCurrentHit.face != Face.NONE) { Vector3[] verts = getFaceVerts(myClampedLocation, myCurrentHit.face); cmd = new RenderTexturedQuadCommand(verts, mySelectTexture); cmd.pipelineState.culling.enabled = false; cmd.pipelineState.depthTest.enabled = false; cmd.renderState.polygonOffset.enableType = PolygonOffset.EnableType.FILL; cmd.renderState.polygonOffset.factor = 1.0f; cmd.renderState.polygonOffset.units = 1.0f; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); } break; } case "Edge Mode": { if (myCurrentHit.face != Face.NONE && myCurrentHit.edge == -1) { Vector3[] verts = getFaceVerts(myClampedLocation, myCurrentHit.face); StatelessRenderCommand cmd = new RenderTexturedQuadCommand(verts, mySelectTexture); cmd.pipelineState.culling.enabled = false; cmd.pipelineState.depthTest.enabled = false; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); } if (myCurrentHit.edge != -1) { Vector3[] verts = getEdgeVerts(myClampedLocation, myCurrentHit.edge); StatelessRenderCommand cmd = new RenderLineCommand(verts[0], verts[1], Color4.Aquamarine); cmd.pipelineState.depthTest.enabled = false; cmd.pipelineState.depthWrite.enabled = false; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); } if (myCurrentHit.vert != -1) { Vector3 vert = getVert(myClampedLocation, myCurrentHit.vert); RenderCommand cmd = new RenderSphereCommand(vert, myClampedLocation.node.size() / 12, Color4.Red); pass.postCommands.Add(cmd); } break; } case "Face Mode": { if (myCurrentHit.face != Face.NONE) { foreach (NodeLocation n in mySelectedNodes) { Vector3[] verts = getFaceVerts(n, myCurrentHit.face); StatelessRenderCommand cmd = new RenderQuadCommand(verts, Color4.Blue); cmd.pipelineState.culling.enabled = false; cmd.pipelineState.depthTest.enabled = false; cmd.pipelineState.generateId(); cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); cmd.renderState.wireframe.enabled = true; cmd.renderState.polygonOffset.enableType = PolygonOffset.EnableType.FILL; cmd.renderState.polygonOffset.factor = -1.0f; cmd.renderState.polygonOffset.units = 1.0f; cmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(cmd); } Vector3[] mverts = getFaceVerts(myClampedLocation, myCurrentHit.face); StatelessRenderCommand mcmd = new RenderQuadCommand(mverts, Color4.LightBlue); mcmd.pipelineState.culling.enabled = false; mcmd.pipelineState.depthTest.enabled = false; mcmd.pipelineState.generateId(); mcmd.renderState.wireframe.enabled = true; mcmd.renderState.polygonOffset.enableType = PolygonOffset.EnableType.FILL; mcmd.renderState.polygonOffset.factor = -1.0f; mcmd.renderState.polygonOffset.units = 1.0f; mcmd.renderState.setUniformBuffer(myEditor.camera.uniformBufferId(), 0); pass.postCommands.Add(mcmd); } break; } } } } }