mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Implemented Materials
- Shaders get Textureslots via reflection - added Textureslots to Effect
This commit is contained in:
@@ -174,19 +174,61 @@ namespace GlitchyEngine.Renderer
|
||||
|
||||
public override void SetVertexShader(VertexShader vertexShader)
|
||||
{
|
||||
//Todo: nativeContext.VertexShader.SetSamplers();
|
||||
uint32 _firstTexture = D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT;
|
||||
uint32 _textureCount = 0;
|
||||
|
||||
ID3D11ShaderResourceView*[D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] _textures = .();
|
||||
ID3D11SamplerState*[D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] _samplers = .();
|
||||
|
||||
for(let entry in vertexShader.Textures)
|
||||
{
|
||||
_textures[entry.Index] = entry.Texture?.nativeView;
|
||||
_samplers[entry.Index] = entry.Texture?.SamplerState?.nativeSamplerState;
|
||||
|
||||
if(entry.Index >= _textureCount)
|
||||
_textureCount = entry.Index + 1;
|
||||
if(entry.Index < _firstTexture)
|
||||
_firstTexture = entry.Index;
|
||||
}
|
||||
|
||||
if(_textureCount > 0)
|
||||
{
|
||||
nativeContext.VertexShader.SetShaderResources(_firstTexture, _textureCount, &_textures[_firstTexture]);
|
||||
nativeContext.VertexShader.SetSamplers(_firstTexture, _textureCount, &_samplers[_firstTexture]);
|
||||
}
|
||||
|
||||
vertexShader.Buffers.PlatformFetchNativeBuffers();
|
||||
nativeContext.VertexShader.SetConstantBuffers(0, vertexShader.Buffers.nativeBuffers.Count, &vertexShader.Buffers.nativeBuffers);
|
||||
//Todo: nativeContext.VertexShader.SetShaderResources();
|
||||
nativeContext.VertexShader.SetShader(vertexShader.nativeShader);
|
||||
}
|
||||
|
||||
public override void SetPixelShader(PixelShader pixelShader)
|
||||
{
|
||||
//Todo: nativeContext.PixelShader.SetSamplers();
|
||||
uint32 _firstTexture = D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT;
|
||||
uint32 _textureCount = 0;
|
||||
|
||||
ID3D11ShaderResourceView*[D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] _textures = .();
|
||||
ID3D11SamplerState*[D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] _samplers = .();
|
||||
|
||||
for(let entry in pixelShader.Textures)
|
||||
{
|
||||
_textures[entry.Index] = entry.Texture?.nativeView;
|
||||
_samplers[entry.Index] = entry.Texture?.SamplerState?.nativeSamplerState;
|
||||
|
||||
if(entry.Index >= _textureCount)
|
||||
_textureCount = entry.Index + 1;
|
||||
if(entry.Index < _firstTexture)
|
||||
_firstTexture = entry.Index;
|
||||
}
|
||||
|
||||
if(_textureCount > 0)
|
||||
{
|
||||
nativeContext.PixelShader.SetShaderResources(_firstTexture, _textureCount, &_textures[_firstTexture]);
|
||||
nativeContext.PixelShader.SetSamplers(_firstTexture, _textureCount, &_samplers[_firstTexture]);
|
||||
}
|
||||
|
||||
pixelShader.Buffers.PlatformFetchNativeBuffers();
|
||||
nativeContext.PixelShader.SetConstantBuffers(0, pixelShader.Buffers.nativeBuffers.Count, &pixelShader.Buffers.nativeBuffers);
|
||||
//Todo: nativeContext.PixelShader.SetShaderResources();
|
||||
nativeContext.PixelShader.SetShader(pixelShader.nativeShader);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace GlitchyEngine.Renderer
|
||||
*/
|
||||
internal ID3DBlob* nativeCode ~ _?.Release();
|
||||
|
||||
protected const ShaderCompileFlags DefaultCompileFlags =
|
||||
protected const ShaderCompileFlags DefaultCompileFlags = .EnableStrictness |
|
||||
#if DEBUG
|
||||
.Debug;
|
||||
#else
|
||||
@@ -57,56 +57,43 @@ namespace GlitchyEngine.Renderer
|
||||
}
|
||||
|
||||
reflection.GetDescription(let desc);
|
||||
uint32 cBufferCount = desc.ConstantBuffers;
|
||||
|
||||
for(uint32 i < cBufferCount)
|
||||
uint32 resourceCount = desc.BoundResources;
|
||||
for (uint32 i < resourceCount)
|
||||
{
|
||||
reflection.GetResourceBindingDescription(i, let bindDesc);
|
||||
var res = reflection.GetResourceBindingDescription(i, let bindDesc);
|
||||
|
||||
var bufferReflection = reflection.GetConstantBufferByIndex(i);
|
||||
|
||||
bufferReflection.GetDescription(let bufferDesc);
|
||||
|
||||
// ConstantBuffer
|
||||
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
|
||||
if (res.Failed)
|
||||
{
|
||||
let buffer = new ConstantBuffer(_context, bufferReflection);
|
||||
|
||||
_buffers.Add(bindDesc.BindPoint, buffer.Name, buffer);
|
||||
|
||||
buffer.ReleaseRef();
|
||||
Log.EngineLogger.Error($"Error({(int)res}) {res}: Failed to get resource binding desc for resource {i}");
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
bufferReflection.GetDescription(let bufferDesc);
|
||||
|
||||
// ConstantBuffer
|
||||
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
|
||||
switch(bindDesc.Type)
|
||||
{
|
||||
GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write);
|
||||
case .ConstantBuffer:
|
||||
var bufferReflection = reflection.GetConstantBufferByName(bindDesc.Name);
|
||||
|
||||
let buffer = new Buffer(_context, cBufferDesc);
|
||||
bufferReflection.GetDescription(let bufferDesc);
|
||||
|
||||
_buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), buffer);//, true
|
||||
buffer.ReleaseRef();
|
||||
|
||||
// Buffer for default values
|
||||
uint8* rawData = new:ScopedAlloc! uint8[bufferDesc.Size]*;
|
||||
|
||||
// Get default values
|
||||
for(uint32 variable < bufferDesc.Variables)
|
||||
// ConstantBuffer
|
||||
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
|
||||
{
|
||||
let variableReflection = bufferReflection.GetVariableByIndex(variable);
|
||||
let buffer = new ConstantBuffer(_context, bufferReflection);
|
||||
|
||||
variableReflection.GetDescription(let varDesc);
|
||||
_buffers.Add(bindDesc.BindPoint, buffer.Name, buffer);
|
||||
|
||||
if(varDesc.DefaultValue != null)
|
||||
Internal.MemCpy(rawData + varDesc.StartOffset, varDesc.DefaultValue, varDesc.Size);
|
||||
buffer.ReleaseRef();
|
||||
}
|
||||
|
||||
buffer.SetData(Span<uint8>(rawData, bufferDesc.Size));
|
||||
case .Texture:
|
||||
_textures.Add(scope String(bindDesc.Name), bindDesc.BindPoint, null);
|
||||
case .Sampler:
|
||||
// TODO: do we have to do something for samplers?
|
||||
default:
|
||||
Log.EngineLogger.Warning($"Unhandled shader resource type: \"{bindDesc.Type}\"");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
reflection.Release();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user