有没有办法绕过Directx效果文件?

我现在想抽象我的渲染管道,我已经能够很容易地抽象OpenGL。 但是现在我已经遇到了Directx相当难看的问题。

我关于Dx9,10和11的大部分知识都使用效果文件。 OpenGL明显缺乏的东西。 我知道这个文件不必被使用。 但是,所有的DX文档都是这样写的,看起来好像是必需的,而且没有办法。

任何人都可以在这里带领我?

FXC或D3DXCompileShaderD3DCompile编译基本的HLSL顶点/像素/ …着色器(单入口点,就像GLSL一样)。

然后使用API​​函数(如CreatePixelShader (D3D9)或CreatePixelShader (D3D10 / 11))从生成的着色器blob中创建着色器。 然后将这些着色器应用于SetPixelShader (D3D9)或PSSetShader (D3D10,11) 。

为了将统一的数据传送到着色器,既然你想要处理D3D9和10/11,我建议习惯通过附加代码来手动映射统一值: register(c0) (D3D9统一值)和: register(b0) (用于D3D10 / 11统一块)。 关于着色器常量的文档页面可以帮助理解这一点。

本教程演示如何从D3D11中的文件编译非效果着色器。