gpt4 book ai didi

opengl - 在 GLSL 着色器中使用输入/输出结构

转载 作者:行者123 更新时间:2023-12-01 11:39:23 24 4
gpt4 key购买 nike

在 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;
...

最佳答案

您正在寻找的是interface blocks在 GLSL 中。

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

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

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

关于opengl - 在 GLSL 着色器中使用输入/输出结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com