我在https://www.rastertek.com/tutdx11.html上学习Rasterteks的DirectX11教程,并将它们结合起来创建和学习。
我刚刚实现了我的3D模型的镶嵌,并注意到我的2D渲染文本的着色器停止工作。我有不同的着色器为2D和3D,这是很好的工作,直到我实现了船体着色器和域着色器为我的三维渲染。下面是我设置着色器时的一些代码。
带有镶嵌结构的灯罩:
void LightShader::RenderShader(ID3D11DeviceContext * immediateContext, int indexBufSize)
{
immediateContext->IASetInputLayout(layout);
immediateContext->VSSetShader(vertexShader, NULL, 0);
immediateContext->PSSetShader(pixelShader, NULL, 0);
// using these two causes the 2D rendering to stop working
immediateContext->HSSetShader(hullShader, NULL, 0);
immediateContext->DSSetShader(domainShader, NULL, 0);
immediateContext->PSSetSamplers(0, 1, &sampleState);
immediateContext->DrawIndexed(indexBufSize, 0, 0);
}用于渲染2D文本的Fontshader:
void FontShader::RenderShader(ID3D11DeviceContext * immediateContext, int indexBufSize)
{
immediateContext->IASetInputLayout(layout);
immediateContext->VSSetShader(vertexShader, NULL, 0);
immediateContext->PSSetShader(pixelShader, NULL, 0);
immediateContext->PSSetSamplers(0, 1, &sampleState);
immediateContext->DrawIndexed(indexBufSize, 0, 0);
}如果问题在那里,我也可以根据要求发布代码。
发布于 2022-08-04 07:50:29
这可能是因为你忘记了不绑定HS和DS的电话。比如
immediateContext->HSSetShader(NULL, NULL, 0);
immediateContext->DSSetShader(NULL, NULL, 0);您应该启用调试层,它对于调试非常有用。
https://stackoverflow.com/questions/73232067
复制相似问题