示例#1
0
        public override PipelineState createPipeline(Material m)
        {
            PipelineState state = new PipelineState();
            Texture       tex   = m.myTextures[(int)Material.TextureId.Diffuse].value();

            //disable culling if this texture has alpha values so it can be seen from both sides
            if (tex.hasAlpha == true || m.alpha != 1.0)
            {
                state.culling.enabled    = false;
                state.blending.enabled   = true;
                state.depthWrite.enabled = false;
            }

            state.shaderState.shaderProgram = myShader;

            state.generateId();
            return(state);
        }
示例#2
0
        public RenderLineCommand(Vector3 start, Vector3 end, Color4 c)
        {
            UInt32 col = c.toUInt();

            myVerts             = new V3T2B4[2];
            myVerts[0].Position = start; myVerts[0].TexCoord = new Vector2(0, 0); myVerts[0].Color = col;
            myVerts[1].Position = end; myVerts[1].TexCoord = new Vector2(0, 1); myVerts[1].Color = col;

            pipelineState = new PipelineState();
            pipelineState.blending.enabled          = c.A < 1.0f;
            pipelineState.shaderState.shaderProgram = theShader;
            pipelineState.vaoState.vao      = theVAO;
            pipelineState.depthTest.enabled = false;
            pipelineState.generateId();

            renderState.setIndexBuffer(theIBO.id);
            renderState.setVertexBuffer(theVBO.id, 0, 0, V3T2B4.stride);
            renderState.setUniform(new UniformData(0, Uniform.UniformType.Bool, true));
            renderState.setUniform(new UniformData(23, Uniform.UniformType.Int, -1));
        }
示例#3
0
        public RenderSphereCommand(Vector3 position, float radius, Color4 c)
        {
            UInt32 col = c.toUInt();

            myVerts = new V3T2B4[theSphereVertCount];
            for (int i = 0; i < theSphereVertCount; i++)
            {
                myVerts[i].Position = position + (theSphereVerts[i] * radius); myVerts[i].TexCoord = Vector2.Zero; myVerts[i].Color = col;
            }

            pipelineState = new PipelineState();
            pipelineState.blending.enabled          = c.A < 1.0f;
            pipelineState.shaderState.shaderProgram = theShader;
            pipelineState.vaoState.vao      = theVAO;
            pipelineState.depthTest.enabled = false;
            pipelineState.generateId();

            renderState.setIndexBuffer(theIBO.id);
            renderState.setVertexBuffer(theVBO.id, 0, 0, V3T2B4.stride);
            renderState.setUniform(new UniformData(0, Uniform.UniformType.Bool, true));
            renderState.setUniform(new UniformData(23, Uniform.UniformType.Int, -1));
        }
示例#4
0
        //public override void prepareFrameBegin() { }
        //public override void preparePerFrame(Renderable r) { }
        //public override void preparePerViewBegin(View v) { }
        //public override void preparePerView(Renderable r, View v) { }
        //public override void preparePerViewFinalize(View v) { }
        //public override void preparePerPassBegin(Pass p) { }

        public override void preparePerPass(Renderable r, Pass p)
        {
            SkydomeRenderable renderable = r as SkydomeRenderable;
            Model             model      = renderable.skydome;
            Mesh mesh = model.myMeshes[0];

            MaterialEffect effect   = getEffect(p.technique, (UInt32)Material.Feature.Skydome);
            PipelineState  pipeline = effect.createPipeline(mesh.material);

            RenderQueue <StaticModelInfo> rq = p.findRenderQueue(pipeline.id) as RenderQueue <StaticModelInfo>;

            if (rq == null)
            {
                rq      = Renderer.device.createRenderQueue <StaticModelInfo>(effect.createPipeline(mesh.material));
                rq.name = rq.myPipeline.shaderState.shaderProgram.name;
                rq.myPipeline.vaoState.vao = new VertexArrayObject();
                rq.myPipeline.vaoState.vao.bindVertexFormat(rq.myPipeline.shaderState.shaderProgram, V3.bindings());
                rq.visualizer = this;
                p.registerQueue(rq);
            }

            StaticModelInfo info = rq.nextInfo();

            effect.updateRenderState(mesh.material, info.renderState);

            info.renderState.setUniformBuffer(p.view.camera.uniformBufferId(), 0);
            info.renderState.setVertexBuffer(model.myVbos[0].id, 0, 0, V3N3T2.stride);
            info.renderState.setIndexBuffer(model.myIbo.id);
            info.renderState.setUniform(new UniformData(0, Uniform.UniformType.Vec3, renderable.sunPosition));
            Matrix4 rot = Matrix4.CreateRotationX(renderable.starRotation);

            info.renderState.setUniform(new UniformData(1, Uniform.UniformType.Mat4, rot));
            info.renderState.setUniform(new UniformData(26, Uniform.UniformType.Float, renderable.weatherIntensity));
            info.renderState.setUniform(new UniformData(27, Uniform.UniformType.Float, renderable.weatherSpeed));
            info.renderState.setUniform(new UniformData(28, Uniform.UniformType.Float, renderable.sunSize));
            info.renderState.setUniform(new UniformData(29, Uniform.UniformType.Float, renderable.moonSize));
            info.indexOffset = mesh.indexBase;
            info.indexCount  = mesh.indexCount;
        }
示例#5
0
        //public override void prepareFrameBegin() { }
        //public override void preparePerFrame(Renderable r) { }
        //public override void preparePerViewBegin(View v) { }
        //public override void preparePerView(Renderable r, View v) { }
        //public override void preparePerViewFinalize(View v) { }
        //public override void preparePerPassBegin(Pass p) { }

        public override void preparePerPass(Renderable r, Pass p)
        {
            SkyboxRenderable skyboxModel = r as SkyboxRenderable;
            MaterialEffect   effect      = getEffect(p.technique, (UInt32)Material.Feature.Skybox);
            PipelineState    pipeline    = effect.createPipeline(skyboxModel.model.mesh.material);

            RenderQueue <SkyboxRenderInfo> rq = p.findRenderQueue(pipeline.id) as RenderQueue <SkyboxRenderInfo>;

            if (rq == null)
            {
                rq      = Renderer.device.createRenderQueue <SkyboxRenderInfo>(effect.createPipeline(skyboxModel.model.mesh.material));
                rq.name = rq.myPipeline.shaderState.shaderProgram.name;
                rq.myPipeline.vaoState.vao = new VertexArrayObject();
                rq.myPipeline.vaoState.vao.bindVertexFormat(rq.myPipeline.shaderState.shaderProgram, V3.bindings());
                rq.visualizer = this;
                p.registerQueue(rq);
            }

            SkyboxRenderInfo info = rq.nextInfo();

            effect.updateRenderState(skyboxModel.model.mesh.material, info.renderState);

            info.renderState.setUniformBuffer(p.view.camera.uniformBufferId(), 0);
        }
示例#6
0
 public StatelessRenderCommand()
 {
     renderState   = new RenderState();
     pipelineState = new PipelineState();
 }
示例#7
0
 public void SetRasterizerState(PipelineState pipelineState)
 {
     //set rasterizerState
     //note: if you change the rasterizer state, you need to reset the state
     NativeDeviceContext.Rasterizer.State = pipelineState.RasterizerState;
 }
示例#8
0
 public SetPipelineCommand(PipelineState ps) : base()
 {
     myPs = ps;
 }
示例#9
0
 public RenderQueue(PipelineState pipeline) : base(pipeline)
 {
 }
示例#10
0
 public BaseRenderQueue(PipelineState pipeline)
 {
     myPipeline = pipeline;
     commands   = new RenderCommandList();
 }