HLSL'technique'关键字文档

问题描述 投票:1回答:1

非常简单的问题...我有一些代码示例:

technique Draw
{
    pass
    {
        vertex_shader = VertexShaerName(vec_in);
        pixel_shader  = PixelShaderName(vec_in);
    }
}

我在哪里可以找到有关technique关键字用法的文档? Here没有提供与该陈述有关的描述的链接...

documentation hlsl
1个回答
0
投票

(现已弃用的)效果系统使用了这些技术。

它包装了许多低级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

© www.soinside.com 2019 - 2024. All rights reserved.