我刚刚通过this answer及其评论阅读,并有一些相关的问题:我可以上传VEC3值vec4制服?
- 这是否规则应用到统一的变数呢?
- 我可以打电话glUniform3fv为vec4统一,并期望成分W为1.0,等等?
- 哪里了OpenGL规范提起这个话题?
我刚刚通过this answer及其评论阅读,并有一些相关的问题:我可以上传VEC3值vec4制服?
不,这些规则不适用于制服。因此,你不能叫glUniform3fv
上vec4
。
的Spec states in Section 7.6.1:
对于所有[...]均匀类型的具有可装载均匀*命令,用作在着色器声明的,必须将均匀的尺寸和类型相匹配的命令 ,和 没有类型转换完成。
在(7.6 UNIFORMVARIABLES)的规格说,Uniform*
将导致INVALID_OPERATION
错误,如果:
中使用的均匀的尺寸不匹配
Uniform*
命令的名称所指示的大小在着色器声明,
或
组件使用的
Uniform*
命令的名称中指示的类型和计数与着色器中声明的统一类型不匹配,其中布尔均匀组件类型被认为匹配Uniform*i{v}
,Uniform*ui{v}
或Uniform*f{v}
命令中的任何一个。
和测试来调用glUniform3f
的vec4
统一确实会导致INVALID_OPERATION
错误。