Пример #1
0
        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;
                    }
                    }
                }
            }
        }