0xb*_*00d 3 opengl glsl hlsl2glsl
在HLSL中,我可以写:
struct vertex_in
{
float3 pos : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD;
};
Run Code Online (Sandbox Code Playgroud)
并将此结构用作顶点着色器的输入:
vertex_out VS(vertex_in v) { ... }
Run Code Online (Sandbox Code Playgroud)
GLSL中有类似的东西吗?还是我需要写一些类似的东西:
layout(location = 0) in vec4 aPosition;
layout(location = 1) in vec4 aNormal;
...
Run Code Online (Sandbox Code Playgroud)
您正在寻找的东西在GLSL 中被称为接口块。
不幸的是,它们不支持Vertex Shader阶段的输入或Fragment Shader阶段的输出。这些在程序链接时必须具有显式绑定的数据位置(否则它们将被自动分配,您以后可以查询它们)。
关于使用HLSL语义一样的: POSITION,: NORMAL,: TEXCOORD,现代 GLSL没有这样的事情。将顶点属性通过名称绑定到通用(编号)位置,方法是使用glBindAttribLocation (...)链接之前,或如您的示例所示layout (location = ...)。
对于着色器阶段之间的输入/输出,在GLSL程序链接期间,这完全基于变量/接口块名称进行匹配(除非使用相对较新的“ 单独的着色器对象”扩展名)。在任何情况下,你将有恒定的预先定义的命名语义一样POSITION,NORMAL等虽; 位置都是应用程序或链接程序定义的数字。
| 归档时间: |
|
| 查看次数: |
4996 次 |
| 最近记录: |