非常简单的问题...我有一些代码示例:
technique Draw
{
pass
{
vertex_shader = VertexShaerName(vec_in);
pixel_shader = PixelShaderName(vec_in);
}
}
我在哪里可以找到有关technique
关键字用法的文档? Here没有提供与该陈述有关的描述的链接...
(现已弃用的)效果系统使用了这些技术。
它包装了许多低级api(最初DirectX9与技术配合使用,因此创建它是为了促进从Direct3d9到Direct3d10 / 11的过渡)。
它提供了帮助程序来管理常量缓冲区,并使用反射/变量api将数据分配给着色器。
因此,在使用低级流水线时,您将独立编译顶点和像素着色器,创建常量缓冲区,并且它所伴随的结构允许在单个块中构建所有内容,将常量缓冲区分解为可变系统,并具有一种允许一次性执行绑定的pass api。
两者都有各自的优缺点,fx非常适合编写和制作原型(例如,使用它们的变量系统来创建自动gui确实很容易),但是由于它可以为您管理很多样板,但是它有点在进行有效的资源重用或复杂的着色器置换时,显得有些尴尬。
我特别想从效果中遗忘的一件事是可变语义和注释,您可以设置类似:
float2 tex : TARGETSIZE;
并且通过使用变量系统来检测tex具有TARGETSIZE语义,例如从ui隐藏并自动附加渲染标记的大小。
注释的旧常用用法是为诸如:]的值提供一些metatada。
float4 color <bool color=true;> = 1.0f;
通过注解反射可以看到我们将此变量视为一种颜色(并在编辑器中显示颜色选择器,而不是4个通道)
虽然d3dcompiler_47中不推荐使用fx_5_0配置文件,但仍然可以使用它,并且包装器是开源的:https://github.com/microsoft/FX11