mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Only hold on to vertex input layout shader code
This commit is contained in:
@@ -192,7 +192,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
if (newInputLayout == _currentInputLayout)
|
if (newInputLayout == _currentInputLayout)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_currentInputLayout.Release();
|
_currentInputLayout?.Release();
|
||||||
_currentInputLayout = newInputLayout;
|
_currentInputLayout = newInputLayout;
|
||||||
_currentInputLayout.AddRef();
|
_currentInputLayout.AddRef();
|
||||||
|
|
||||||
|
|||||||
@@ -23,19 +23,31 @@ namespace GlitchyEngine.Renderer
|
|||||||
/**
|
/**
|
||||||
* Internal compiled code of the shader.
|
* Internal compiled code of the shader.
|
||||||
*/
|
*/
|
||||||
internal ID3DBlob* nativeCode ~ _?.Release();
|
internal uint8[] nativeCode ~ delete _;
|
||||||
|
|
||||||
protected override Result<void> InternalCreateFromBlob(Span<uint8> blob)
|
protected override Result<void> InternalCreateFromBlob(Span<uint8> blob)
|
||||||
{
|
{
|
||||||
HResult shaderCreationResult = HResult.S_FALSE;
|
HResult shaderCreationResult = HResult.S_FALSE;
|
||||||
|
|
||||||
// TODO Temporary, because we need to generate the vertex layout from it!
|
|
||||||
D3DCompiler.D3DCreateBlob((.)blob.Length, &nativeCode);
|
|
||||||
Internal.MemCpy(nativeCode.GetBufferPointer(), blob.Ptr, blob.Length);
|
|
||||||
|
|
||||||
switch (_shaderType)
|
switch (_shaderType)
|
||||||
{
|
{
|
||||||
case .Vertex:
|
case .Vertex:
|
||||||
|
// We need to hold on to the code for the vertex input layout
|
||||||
|
ID3DBlob* signatureBlob = null;
|
||||||
|
HResult getInputSignatureResult = D3DCompiler.D3DGetInputSignatureBlob(blob.Ptr, (uint)blob.Length, &signatureBlob);
|
||||||
|
|
||||||
|
if (getInputSignatureResult.Failed)
|
||||||
|
{
|
||||||
|
Log.EngineLogger.Error($"Failed to get the vertex input signature from the shader: {getInputSignatureResult} ({(int)getInputSignatureResult})");
|
||||||
|
return .Err;
|
||||||
|
}
|
||||||
|
|
||||||
|
Span<uint8> signatureBlobSpan = .((uint8*)signatureBlob.GetBufferPointer(), (int)signatureBlob.GetBufferSize());
|
||||||
|
nativeCode = new uint8[signatureBlobSpan.Length];
|
||||||
|
signatureBlobSpan.CopyTo(nativeCode);
|
||||||
|
|
||||||
|
signatureBlob.Release();
|
||||||
|
|
||||||
shaderCreationResult = NativeDevice.CreateVertexShader(blob.Ptr, (uint)blob.Length, null, (ID3D11VertexShader**)&nativeShader);
|
shaderCreationResult = NativeDevice.CreateVertexShader(blob.Ptr, (uint)blob.Length, null, (ID3D11VertexShader**)&nativeShader);
|
||||||
case .Pixel:
|
case .Pixel:
|
||||||
shaderCreationResult = NativeDevice.CreatePixelShader(blob.Ptr, (uint)blob.Length, null, (ID3D11PixelShader**)&nativeShader);
|
shaderCreationResult = NativeDevice.CreatePixelShader(blob.Ptr, (uint)blob.Length, null, (ID3D11PixelShader**)&nativeShader);
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
ToNativeLayout(_elements, nativeElements);
|
ToNativeLayout(_elements, nativeElements);
|
||||||
|
|
||||||
var result = NativeDevice.CreateInputLayout(nativeElements.CArray(), (.)nativeElements.Count,
|
var result = NativeDevice.CreateInputLayout(nativeElements.CArray(), (.)nativeElements.Count,
|
||||||
vertexShader.nativeCode.GetBufferPointer(), vertexShader.nativeCode.GetBufferSize(), &layout);
|
vertexShader.nativeCode.Ptr, (uint32)vertexShader.nativeCode.Count, &layout);
|
||||||
if(result.Failed)
|
if(result.Failed)
|
||||||
{
|
{
|
||||||
Log.EngineLogger.Error($"Failed to create D3D11 input layout: Message({(int)result}): {result}");
|
Log.EngineLogger.Error($"Failed to create D3D11 input layout: Message({(int)result}): {result}");
|
||||||
|
|||||||
Reference in New Issue
Block a user