【问题标题】:Using input/output structs in GLSL-Shaders在 GLSL 着色器中使用输入/输出结构
【发布时间】:2019-06-23 02:20:25
【问题描述】:

在 HLSL 中我可以写:

struct vertex_in
{
    float3 pos    : POSITION;
    float3 normal : NORMAL;
    float2 tex    : TEXCOORD;
};

并将此结构用作顶点着色器的输入:

vertex_out VS(vertex_in v) { ... }

GLSL 中有类似的东西吗?还是我需要写类似的东西:

layout(location = 0) in vec4 aPosition;
layout(location = 1) in vec4 aNormal;
...

【问题讨论】:

    标签: opengl glsl hlsl2glsl


    【解决方案1】:

    您要查找的内容在 GLSL 中称为 interface blocks

    很遗憾,顶点着色器阶段的输入或片段着色器阶段的输出不支持它们。这些必须在程序链接时明确绑定数据位置(否则它们将被自动分配,您可以稍后查询它们)。

    关于: POSITION: NORMAL: TEXCOORD现代等 HLSL 语义的使用,GLSL 没有类似的东西。顶点属性在链接之前使用 glBindAttribLocation (...) 或在您的示例中按名称绑定到通用(编号)位置,layout (location = ...)

    对于着色器阶段之间的输入/输出,在GLSL程序链接期间完全根据变量/接口块名称匹配(除非您使用相对较新的Separate Shader Objects扩展名)。在任何情况下,您都不会拥有像POSITIONNORMAL 等常量预定义的命名语义;位置都是应用程序或链接器定义的数字。

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2013-07-30
      • 2016-03-16
      相关资源
      最近更新 更多