gpt4 book ai didi

opengl - OpenGL 4.0++ 核心配置文件中固定功能管道的属性位置是什么?

转载 作者:行者123 更新时间:2023-12-04 18:37:55 26 4
gpt4 key购买 nike

我想知道 的固定管道(未附加着色器)内的属性位置英伟达 OpenGL 驱动程序:

glVertex = 0
glColor = 3
glNormal = ?
glTexCoord = ?
glMultiTexCoord 0..7 = ?
glSecondaryColor = ?
glFog = ?

根据经验,我找到了顶点和原色位置,但仍然会很高兴了解它们。

如果您想知道原因,那么出于兼容性原因,甚至出于 的原因。 GLSL 调试(只是为了看看当着色器还没有工作时我是否将正确的数据传递到正确的位置)等等......

最佳答案

在 NVIDIA 驱动程序之外,这不起作用(可靠)。兼容的驱动程序只会将 glVertexPointer (...) 别名为属性插槽 0 。许多年前,NV 在他们无限的智慧中设计了一个标准的非标准方案,他们将所有固定函数指针别名到某些属性位置,但我不知道新的 NV 驱动程序是否支持这一点(老实说,我从来没有足够在意尝试,这是一种不好的做法)。您可能仍然可以找到 NV 的别名映射文档,但利用他们的非标准行为并没有使任何人受益。

虽然其他驱动程序也可能将固定函数指针别名为通用顶点属性位置,但没有关于它们的映射的文档。与 NV 不同,我不相信映射不会在驱动程序版本、硬件或平台之间发生变化。事实上,即使使用 NV 驱动程序,您也不应该利用这一点 - 它旨在促进旧版支持,而不是作为用于新软件的功能。

底线是,改用通用顶点属性或使用兼容性配置文件和仍然支持预先声明的变量的 GLSL 版本,这些变量是专门为获取固定功能顶点数据而设计的(例如 gl_Colorgl_Normalgl_MultiTexCoord0...7 ,... )。但不要混合搭配您所描述的两种方式。

还需要一些时间来查看 glGetPointerv (...) 。如果您想在 GLSL 之外获取有关固定函数指针的信息,这是正确的方法。不要依赖顶点属性别名,因为属性位置的概念本质上是一个可编程的管线特征。它甚至在 2.0 之前的未扩展 OpenGL 中都不存在(它是随 ARB Vertex Program assembly language 引入的,并通过 GLSL 提升为核心)。

更新:

虽然我仍然强烈建议不要使用此信息,但我能够准确找到您想要的信息:

Release Notes for NVIDIA OpenGL Shading Language Support - 2006 年 11 月 9 日 - 第 7-8 页

Vertex Attribute Aliasing

GLSL attempts to eliminate aliasing of vertex attributes but this is integral to NVIDIA’s hardware approach and necessary for maintaining compatibility with existing OpenGL applications that NVIDIA customers rely on.

NVIDIA’s GLSL implementation therefore does not allow built-in vertex attributes to collide with a generic vertex attributes that is assigned to a particular vertex attribute index with glBindAttribLocation. For example, you should not use gl_Normal (a built-in vertex attribute) and also use glBindAttribLocation to bind a generic vertex attribute named “whatever” to vertex attribute index 2 because gl_Normal aliases to index 2.



Table excerpt

如果您想知道,这也在 ARB Vertex Program extension specification 的表 X.1 中进行了概述。我特别提到 NV 的唯一原因是因为他们选择在 GLSL 中重用别名,而其他供应商的兼容实现将只尊重 GLSL 中的第一个别名( glVertexPointer (...) 0 )。

关于opengl - OpenGL 4.0++ 核心配置文件中固定功能管道的属性位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573235/

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