public unsafe void SetShaderConstantBuffers() { ConstantBuffer <Vector4> cb0 = BufferFactory.NewConstantBuffer <Vector4>().WithUsage(ResourceUsage.DiscardWrite); ConstantBuffer <Matrix> cb1 = BufferFactory.NewConstantBuffer <Matrix>().WithUsage(ResourceUsage.DiscardWrite); Shader shader = new FragmentShader( @"Tests\SimpleFS.cso", new ConstantBufferBinding(0U, "CB0", cb0), new ConstantBufferBinding(1U, "CB1", cb1) ); RenderCommand testCommand = RenderCommand.SetShaderConstantBuffers(shader); Assert.AreEqual(RenderCommandInstruction.FSSetCBuffers, testCommand.Instruction); ResourceHandle *resHandleArray = (ResourceHandle *)new IntPtr(UnsafeUtils.Reinterpret <RenderCommandArgument, long>(testCommand.Arg1, sizeof(long))); Assert.AreEqual(cb0.ResourceHandle, resHandleArray[0]); Assert.AreEqual(cb1.ResourceHandle, resHandleArray[1]); Assert.AreEqual((RenderCommandArgument)shader.NumConstantBufferSlots, testCommand.Arg2); shader.Dispose(); cb1.Dispose(); cb0.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderConstantBuffers(null); Assert.Fail(); } catch (AssuranceFailedException) { } try { RenderCommand.SetShaderConstantBuffers(shader); Assert.Fail(); } catch (AssuranceFailedException) { } #endif }
// Draw the name of a resource file. private static unsafe void Text(ResourceHandle *resource) => Text(resource->FileName(), resource->FileNameLength);
public unsafe void TestSetShaderVertexBuffers() { VertexBufferBuilder <Vector3> vbBuilder = BufferFactory.NewVertexBuffer <Vector3>() .WithLength(100U) .WithUsage(ResourceUsage.DiscardWrite); VertexBuffer <Vector3> vb0 = vbBuilder.Create(); VertexBuffer <Vector2> vb2 = vbBuilder.WithVertexType <Vector2>().Create(); ConstantBuffer <Matrix> vpTransBuffer = BufferFactory.NewConstantBuffer <Matrix>().WithUsage(ResourceUsage.DiscardWrite); VertexShader shader = new VertexShader( @"Tests\SimpleVS.cso", new VertexInputBinding(8U, "Instance"), new ConstantBufferBinding(0U, "VPTB", vpTransBuffer), new VertexInputBinding(0U, "VB0"), new VertexInputBinding(1U, "VB1"), new VertexInputBinding(2U, "VB2") ); Dictionary <VertexInputBinding, IVertexBuffer> vbDict = new Dictionary <VertexInputBinding, IVertexBuffer>(); vbDict[shader.InputBindings[0]] = vb0; vbDict[shader.InputBindings[2]] = vb2; RenderCommand testCommand = RenderCommand.SetShaderVertexBuffers(shader, vbDict); Assert.AreEqual(RenderCommandInstruction.SetVertexBuffers, testCommand.Instruction); ResourceHandle *resHandleArray = (ResourceHandle *)new IntPtr(UnsafeUtils.Reinterpret <RenderCommandArgument, long>(testCommand.Arg1, sizeof(long))); Assert.AreEqual(vb0.ResourceHandle, resHandleArray[0]); Assert.AreEqual(ResourceHandle.NULL, resHandleArray[1]); Assert.AreEqual(vb2.ResourceHandle, resHandleArray[2]); uint *bufferStrideArray = (uint *)new IntPtr(UnsafeUtils.Reinterpret <RenderCommandArgument, long>(testCommand.Arg2, sizeof(long))); Assert.AreEqual((uint)sizeof(Vector3), bufferStrideArray[0]); Assert.AreEqual(0U, bufferStrideArray[1]); Assert.AreEqual((uint)sizeof(Vector2), bufferStrideArray[2]); Assert.AreEqual((RenderCommandArgument)9U, testCommand.Arg3); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderVertexBuffers(null, vbDict); Assert.Fail(); } catch (AssuranceFailedException) { } try { RenderCommand.SetShaderVertexBuffers(shader, null); Assert.Fail(); } catch (AssuranceFailedException) { } #endif vb0.Dispose(); vb2.Dispose(); vpTransBuffer.Dispose(); vpTransBuffer.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderVertexBuffers(shader, vbDict); Assert.Fail(); } catch (AssuranceFailedException) { } #endif shader.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderVertexBuffers(shader, new Dictionary <VertexInputBinding, IVertexBuffer>()); Assert.Fail(); } catch (AssuranceFailedException) { } #endif }
public unsafe void TestSetShaderTextureSamplers() { TextureSampler ts0 = new TextureSampler(TextureFilterType.Anisotropic, TextureWrapMode.Border, AnisotropicFilteringLevel.EightTimes); TextureSampler ts2 = new TextureSampler(TextureFilterType.Anisotropic, TextureWrapMode.Border, AnisotropicFilteringLevel.EightTimes); Shader shader = new FragmentShader( @"Tests\SimpleFS.cso", new TextureSamplerBinding(0U, "TS0"), new TextureSamplerBinding(1U, "TS1"), new TextureSamplerBinding(2U, "TS2") ); Dictionary <TextureSamplerBinding, TextureSampler> tsDict = new Dictionary <TextureSamplerBinding, TextureSampler>(); tsDict[shader.TextureSamplerBindings[0]] = ts0; tsDict[shader.TextureSamplerBindings[2]] = ts2; RenderCommand testCommand = RenderCommand.SetShaderTextureSamplers(shader, tsDict); Assert.AreEqual(RenderCommandInstruction.FSSetSamplers, testCommand.Instruction); ResourceHandle *resHandleArray = (ResourceHandle *)new IntPtr(UnsafeUtils.Reinterpret <RenderCommandArgument, long>(testCommand.Arg1, sizeof(long))); Assert.AreEqual(ts0.ResourceHandle, resHandleArray[0]); Assert.AreEqual(ResourceHandle.NULL, resHandleArray[1]); Assert.AreEqual(ts2.ResourceHandle, resHandleArray[2]); Assert.AreEqual((RenderCommandArgument)3U, testCommand.Arg2); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderTextureSamplers(null, tsDict); Assert.Fail(); } catch (AssuranceFailedException) { } try { RenderCommand.SetShaderTextureSamplers(shader, null); Assert.Fail(); } catch (AssuranceFailedException) { } #endif ts0.Dispose(); ts2.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderTextureSamplers(shader, tsDict); Assert.Fail(); } catch (AssuranceFailedException) { } #endif shader.Dispose(); #if !DEVELOPMENT && !RELEASE try { RenderCommand.SetShaderTextureSamplers(shader, new Dictionary <TextureSamplerBinding, TextureSampler>()); Assert.Fail(); } catch (AssuranceFailedException) { } #endif }