- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经准备好了几个关于常量顶点属性和统一的主题。已经找到了一些differences但无法理解为什么我需要它们。看来我总是可以用制服代替 CVA。它们有什么好的用例吗?
最佳答案
我不认为常量顶点属性(或 CVA)是标准术语。至少我从来没有听说过,而且您链接的游戏开发问题中的人也对此感到困惑。所以我不相信它被广泛使用。
但是根据上下文,我明白了你在问什么。您正在考虑在顶点着色器中使用属性的情况。但是,您无需从缓冲区中提取它们,而是在进行绘制调用之前使用 glVertexAttrib4f()
等调用来设置它们,这意味着该值将保持不变,直到您再次更改它。规范将这些值简称为“当前顶点属性值”。
现在,如果您应该以这种方式使用属性或制服,则没有明确的答案。通常,相对性能将非常依赖于平台/硬件。我个人的观点是:
这也与规范所说的一致。在关于制服的介绍部分,它说(强调):
Values for these uniforms are constant over a primitive, and typically they are constant across many primitives.
统一更新在某些平台上可能非常有效,并且应用程序相当频繁地更改统一值当然并不罕见。但恕我直言,这不是制服的预期用途。他们被称为制服可不是无缘无故的!
根据用例,还有一些其他差异可能会使其中一个或另一个更具吸引力:
关于opengl - 为什么我应该使用常量顶点属性而不是制服?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324845/
有什么方法可以防止着色器编译器删除它检测到未使用的统一/属性?我偶尔会注释掉我的着色器的一部分进行测试,但这会导致我程序的其余部分出现问题,因为突然某些名称不再存在(从而导致查找错误,并在尝试设置值时
在做了一些没有额外库 + GLSL 着色器的“常规”WebGL 之后,我开始使用 ThreeJS 的 WebGL 渲染器。我现在正在尝试在我的 ThreeJS 程序中编写自定义着色器,我注意到 Thr
我正在使用 创建效果 hr = D3DXCreateEffectFromFile( g_D3D_Device, shaderPath.c_str(), macros,
我不知道制服在内存中是如何表示的。 制服似乎会占用宝贵的寄存器空间,但它们最终会传入/通过/传出到全局内存中,对吗? 制服不用时情况会发生变化吗?编译器可以将它们优化掉吗?--在这种情况下,我已经将无
我正在尝试从 Blender 导出一个带有纹理的对象。导出的 JSON 如下所示: { "metadata" : { "formatVersion" : 3.1,
我通过 this book 逐步学习 WebGL .我尝试通过使用缓冲区 (gl.ARRAY_BUFFER) 而不是循环来绘制三个点(正如我之前在本书的其他示例中所做的一样)。 var u_Fra
假设我有四个浮点值想要发送到着色器,以下哪一个是发送它们的最佳方式。 将它们作为单独的 float 发送: uniform float uniformValue1; uniform float uni
如果我正在进行实例化渲染并且需要将每个实例一个 mat4 发送到顶点着色器,对于大量实例,哪种方法可能更快? 使用实例化的 mat4 属性 (glVertexAttribDivisor) 并将 mat
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!