Я работаю над движком игры, используя DirectX 11, и у меня возникают проблемы с правильной кодировкой шейдеров. Я предварительно компилирую шейдеры в файлы .csh и создаю шейдеры с байтовыми кодами.D3D11 Create Shader: Encoded Vertex Shader size не соответствует указанному размеру
Я получаю эту ошибку, когда пытаюсь создать какой-либо шейдер, но для этого примера я буду использовать свой шейдер Vertex для PassThrough.
D3D11 ERROR: ID3D11Device::CreateVertexShader: Encoded Vertex Shader size doesn't match specified size. [ STATE_CREATION ERROR #166: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]
Шейдер:
#include "../VertexLayouts.hlsli"
// structs in included file
struct PASS_THROUGH_VS
{
float3 pos : POSITION;
float2 texCoord : TEXCOORD;
};
struct PASS_THROUGH_PS
{
float4 pos : SV_POSITION;
float2 texCoord : TEXCOORD;
};
PASS_THROUGH_PS main(PASS_THROUGH_VS input)
{
PASS_THROUGH_PS output = (PASS_THROUGH_PS)(0);
output.pos = float4(input.pos, 1);
output.texCoord = input.texCoord;
return output;
}
с этими настройками: PassThrough_PS properties
В Renderer.h
#include "Vertex Shaders\PassThrough_VS.csh"
В Renderer.cpp
HRESULT hrReturn;
hrReturn = CreateVertexShader(&PassThrough_VS, sizeof(PassThrough_VS), Pass_Through_VS);
if (FAILED(hrReturn)) {}
//return hrReturn;
HRESULT CRenderer::CreateVertexShader(const void* ptrByteCode, SIZE_T szByteCodeLength, eVertexShaderType type)
{
HRESULT hrReturn;
tVertShader newShader = {};
hrReturn = D3Device->CreateVertexShader(&ptrByteCode, szByteCodeLength, nullptr, &(newShader.m_id3dShader)); // WHERE ERROR OCCURS
if (FAILED(hrReturn))
return hrReturn;
newShader.m_ptrByteCode = ptrByteCode;
newShader.m_szByteCodeLength = szByteCodeLength;
D3VertexShaders[type] = newShader;
return hrReturn;
}
Я пробовал его с каждой моделью шейдера, обновлял свои драйверы и возвращался назад и пробовал тривиальный шейдер вершин, который работал раньше, но не сейчас. – eatapotart
Другой вопрос: в чем причина .cso или .csh? Меня научили использовать метод .csh, но не могли для меня помнить, какие причины дал учитель. Также кажется, что это очень редкая техника, поскольку в этом типе файлов ничего не найдено в google или bing. – eatapotart