Added Buffers to Shaders

This commit is contained in:
Simon Lübeß
2020-12-30 14:47:29 +01:00
parent f3c5ac3d60
commit 9a010f7c4a
8 changed files with 183 additions and 13 deletions
@@ -127,9 +127,4 @@ namespace GlitchyEngine.Renderer
return .Ok;
}
}
public extension VertexBuffer<T>
{
}
}
@@ -0,0 +1,19 @@
using DirectX.D3D11;
using internal GlitchyEngine.Renderer;
namespace GlitchyEngine.Renderer
{
extension BufferCollection
{
internal ID3D11Buffer*[DirectX.D3D11.D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT] nativeBuffers;
internal void PlatformFetchNativeBuffers()
{
for(let buffer in _buffers)
{
nativeBuffers[buffer.Index] = buffer.Buffer.nativeBuffer;
}
}
}
}
@@ -177,7 +177,8 @@ namespace GlitchyEngine.Renderer
public override void SetPixelShader(PixelShader pixelShader)
{
//Todo: nativeContext.PixelShader.SetSamplers();
//Todo: nativeContext.PixelShader.SetConstantBuffers();
pixelShader.Buffers.PlatformFetchNativeBuffers();
nativeContext.PixelShader.SetConstantBuffers(0, pixelShader.Buffers.nativeBuffers.Count, &pixelShader.Buffers.nativeBuffers);
//Todo: nativeContext.PixelShader.SetShaderResources();
nativeContext.PixelShader.SetShader(pixelShader.nativeShader);
}
@@ -3,6 +3,7 @@ using DirectX.D3D11;
using DirectX.D3DCompiler;
using DirectX.D3D11Shader;
using DirectX.Common;
using System.Diagnostics;
using internal GlitchyEngine.Renderer;
@@ -30,7 +31,7 @@ namespace GlitchyEngine.Renderer
Log.EngineLogger.Error($"Failed to create pixel shader: Message ({(int)result}): {result}");
}
//Reflect(shaderBlob);
Reflect(shaderBlob);
shaderBlob?.Release();
}
@@ -49,8 +50,19 @@ namespace GlitchyEngine.Renderer
for(uint32 i < cBufferCount)
{
reflection.GetResourceBindingDescription(i, let bindDesc);
var bufferReflection = reflection.GetConstantBufferByIndex(i);
bufferReflection.GetDescription(let bufferDesc);
// ConstantBuffer
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
{
GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write);
_buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), new Buffer(_context, cBufferDesc), true);
}
}
reflection.Release();
}