Чтобы понять причину, я максимально упростил шейдеры, даже не использую wvp-матрицу. Если я использую такой вершинный шейдер без тесселяции, полигон отображается
если я использую hs и ds, экран пуст. Не понимаю почему, ведь они вообще ничего не делают, ведь параметры тесселяции 1.0f. Я просмотрел все примеры шейдеров, которые смог найти, и не вижу причин, по которым мои шейдеры не работают. Вот как я компилирую шейдеры:
Я больше ничего не делал в DirectX. Возможно, мне нужно проделать дополнительную работу с DirectX, чтобы мои шейдеры заработали, или мои шейдеры написаны неправильно (я обрабатываю все ошибки, я просто пропустил это для краткости кода)
Я использую DirectX12. Я хочу сделать тесселяцию для своего полигона, для этого я написал 2 простых шейдера: [code]struct Vertex{ float3 Position : POSITION; float4 Color : COLOR; };
float4 main(VS_OUTPUT input) : SV_TARGET { return input.color; } [/code] Чтобы понять причину, я максимально упростил шейдеры, даже не использую wvp-матрицу. Если я использую такой вершинный шейдер без тесселяции, полигон отображается [code]struct vertex{ float4 pos : SV_POSITION; float4 color : COLOR; };
vertex main(float3 position : POSITION, float4 color : COLOR) { vertex output; output.pos = float4(position, 1); output.color = float4(1.0f, 0.0f, 1.0f, 1.0f); return output; } [/code] если я использую hs и ds, экран пуст. Не понимаю почему, ведь они вообще ничего не делают, ведь параметры тесселяции 1.0f. Я просмотрел все примеры шейдеров, которые смог найти, и не вижу причин, по которым мои шейдеры не работают. Вот как я компилирую шейдеры: [code]D3DCompileFromFile(L"Shaders/VertexShader.hlsl", nullptr, nullptr, "main", "vs_5_0", D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, 0, &DX12.Shaders.vShader, &error) D3DCompileFromFile(L"Shaders/TeselationShader.hlsl", nullptr, nullptr, "hull", "hs_5_0", D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, 0, &DX12.Shaders.hShader, &error) D3DCompileFromFile(L"Shaders/TeselationShader.hlsl", nullptr, nullptr, "domain", "ds_5_0", D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, 0, &DX12.Shaders.dShader, &error) D3DCompileFromFile(L"Shaders/ColorShader.hlsl", nullptr, nullptr, "main", "ps_5_0", D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, 0, &DX12.Shaders.pShader, &error) [/code] вот некоторые параметры конвейера, которые я изменил, чтобы установить hs и ds: [code]pipeLineDesc.VS={DX12.Shaders.vShader->GetBufferPointer(), DX12.Shaders.vShader->GetBufferSize()}; pipeLineDesc.PS={DX12.Shaders.cShader->GetBufferPointer(), DX12.Shaders.cShader->GetBufferSize()}; pipeLineDesc.HS={DX12.Shaders.hShader->GetBufferPointer(), DX12.Shaders.hShader->GetBufferSize()}; pipeLineDesc.DS={DX12.Shaders.dShader->GetBufferPointer(), DX12.Shaders.dShader->GetBufferSize()}; pipeLineDesc.IBStripCutValue = D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED; pipeLineDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH ; [/code] Я больше ничего не делал в DirectX. Возможно, мне нужно проделать дополнительную работу с DirectX, чтобы мои шейдеры заработали, или мои шейдеры написаны неправильно (я обрабатываю все ошибки, я просто пропустил это для краткости кода)
Я пытаюсь понять синхронизацию CPU/GPU в DirectX 12, но кое-что меня смущает. Вот пример кода из примера HelloFrameBuffering от Microsoft:
// Prepare to render the next frame.
void D3D12HelloFrameBuffering::MoveToNextFrame()
{
// Schedule a Signal...
Я работаю над проектом с использованием DirectX 12, и у меня есть вопрос.
Мне удалось создать простой куб с помощью отложенного рендеринга (он разделен на 4 прохода для позиций, нормалей , альбедо и композиция).
Цель состоит в том, чтобы графический...
Вот пример кода для использования вычислительного шейдера на DirectX12, но его сбоя во время выполнения, пожалуйста, советуйте, где здесь ошибка и что нужно изменить. Шадер должен читать из одного буфера и написать в Антохер, поэтому все должно быть...
Пожалуйста, помогите понять, что не так в этом простое трубопровод DirectX12. Наконец -то прочитайте из этого и печатайте значения. Вот как это должно работать. Но все печатные значения 0 вместо 7.1F. Любая помощь ценится.
#define NOMINMAX...
Пожалуйста, помогите понять, что не так в этом простое трубопровод DirectX12. Наконец -то прочитайте из этого и печатайте значения. Вот как это должно работать. Но все печатные значения 0 вместо 7.1F. Любая помощь ценится.
#define NOMINMAX...