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); }
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)); }
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)); }
//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; }
//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); }
public StatelessRenderCommand() { renderState = new RenderState(); pipelineState = new PipelineState(); }
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; }
public SetPipelineCommand(PipelineState ps) : base() { myPs = ps; }
public RenderQueue(PipelineState pipeline) : base(pipeline) { }
public BaseRenderQueue(PipelineState pipeline) { myPipeline = pipeline; commands = new RenderCommandList(); }