Я компилирую свои файлы, используя D3DCompileFromFile, и создал Мои шейдеры в отдельных файлах
Имя файла VShader.hlsl
struct VOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
VOut output;
output.position = position;
output.color = color;
return output;
}
Имя файла PShader.hlsl
# include "SimpleTri/VShader.hlsl"
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
return color;
}
Включаемый файл
# include "SimpleTri/VShader.hlsl"
Относительное расположение файла, т.е. файл VShader.hlsl находится в каталоге $ (ProjectDir) / SimpleTri /
Для загрузки включаемого файла я создал свой собственный пользовательский включаемый класс
HRESULT Include::Open
(
D3D_INCLUDE_TYPE IncludeType,
LPCSTR pFileName,
LPCVOID pParentData,
LPCVOID *ppData,
UINT *pBytes
)
{
ID3DBlob* blob;
CString D(pFileName);
D3DReadFileToBlob(D.GetBuffer(), &blob);
D.ReleaseBuffer();
memcpy(ppData,blob->GetBufferPointer(),blob->GetBufferSize());
(*pBytes) = blob->GetBufferSize();
blob->Release();
return S_OK;
}
HRESULT Include::Close(LPCVOID data)
{
return S_OK;
}
Но когда я компилирую свой пиксельный шейдер [вершинный шейдер работает нормально], я получаю ошибку
position : SV_POSITION;SimpleTri/VShader.hlsl(1,1)error X3000:syntax error: unexpected integer constant
Похоже, что мой файл загружен неправильно, но когда я проверил загруженное содержимое, код был правильным.
Стоит ли вместо этого загрузить скомпилированный код VertexShader? Я не уверен, пожалуйста, помогите