internal virtual void RCQSwitchToShader(RenderCommandQueue commandQueue) { // Set shader & constant buffers commandQueue.QueueCommand(RenderCommand.SetShader(this)); if (NumConstantBufferSlots > 0U) { commandQueue.QueueCommand(RenderCommand.SetShaderConstantBuffers(this)); } }
public void TestSetShader() { ConstantBuffer <Matrix> vpMat = BufferFactory.NewConstantBuffer <Matrix>().WithUsage(ResourceUsage.DiscardWrite); VertexShader vs = VertexShader.NewDefaultShader(vpMat); ConstantBuffer <Vector4> colorVec = BufferFactory.NewConstantBuffer <Vector4>().WithUsage(ResourceUsage.DiscardWrite); FragmentShader fs = new FragmentShader(@"Tests\SimpleFS.cso", new ConstantBufferBinding(0U, "MaterialProperties", colorVec)); RenderCommand testCommand = RenderCommand.SetShader(vs); Assert.AreEqual(RenderCommandInstruction.VSSetShader, testCommand.Instruction); Assert.AreEqual((RenderCommandArgument)(IntPtr)vs.Handle, testCommand.Arg1); testCommand = RenderCommand.SetShader(fs); Assert.AreEqual(RenderCommandInstruction.FSSetShader, testCommand.Instruction); Assert.AreEqual((RenderCommandArgument)(IntPtr)fs.Handle, testCommand.Arg1); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShader(null); Assert.Fail(); } catch (AssuranceFailedException) { } #endif vs.Dispose(); fs.Dispose(); vpMat.Dispose(); colorVec.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShader(fs); Assert.Fail(); } catch (AssuranceFailedException) { } #endif }