opengl-es - OpenGL ES 2 中的常量顶点属性与统一的含义是什么

标签 opengl-es opengl-es-2.0

当为我的顶点着色器指定一个不会在每个顶点上变化的值时,我可以选择将其指定为统一或常量顶点属性(使用 glVertexAttrib1f 和 friend )。

我应该选择一个而不是另一个的原因是什么?简单地说,在任何给定的实现上都有有限数量的可用顶点属性和制服,因此我需要明智地选择,或者是否还有性能影响?

我环顾四周,发现了一些讨论,但没有什么能具体回答我的担忧:
- http://www.khronos.org/message_boards/showthread.php/7134-Difference-between-uniform-and-constant-vertex-attribute
https://gamedev.stackexchange.com/questions/44024/what-is-the-difference-between-constant-vertex-attributes-and-uniforms

我绝不是 OpenGL 大师,所以如果我只是错过了一些基本的东西,我深表歉意。

最佳答案

好吧,如果你传递一个顶点属性指针,顶点属性可以设置为每个顶点变化;只需更改将数据提供给特定通用属性位置的方式,您就可以在常量值和每个顶点之间动态切换。

Uniforms 永远不会因顶点而异,它们到目前为止更加恒定。一般来说,GLSL ES 保证您使用的顶点属性槽(8 个,每个最多 4 个组件)比统一组件(128 个向量,每个 4 个组件)要少得多 - 大多数实现都超过了这些要求,但趋势是相同的(更多统一比属性)。

此外,制服是每个程序的状态。这些是可以从 GLSL 程序的任何阶段访问的常量。在 OpenGL ES 2.0 中,这意味着 Vertex/Fragment 着色器,但在桌面 GL 中,这意味着 Vertex、Fragment、Geometry、Tessellation Control、Tessellation Evaluation。

关于opengl-es - OpenGL ES 2 中的常量顶点属性与统一的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617773/

相关文章:

android - GLSurfaceView 渲染位图的速度会比 SurfaceView 快吗?

c++ - 使用 Freetype 绘制文本轮廓

java - glClearColor 无法正常工作(android opengl)

java - 自定义着色器导致 Android 黑屏

c++ - 在 OpenGL ES 2 应用程序/进程之间共享渲染表面(FrameBuffer、Pbuffers 等)

ios - OpenGL ES 2.0 线条看起来比 Core Animation 更锯齿。在 iOS 4 中可以抗锯齿吗?

iOS GLKViewController 嵌套 GLKit View

android - 在 Android 中获取 OpenGL 窗口的大小

android - 如何使用OpenGLES 2.0在libgdx中的背景上实时渲染Android的YUV-NV21摄像机图像?

iOS/GLES2 : How to programmatically determine maximum available texture units?