我可以将vec3值上传到vec4制服吗?

时间:2017-07-19 16:39:44

标签: opengl glsl

我只是阅读了this answer及其评论并提出了一些相关问题:

  • 此规则是否也适用于统一变量?
  • 我可以将glUniform3fv称为vec4 uniform并期望W组件为1.0,等等吗?
  • OpenGL规范在哪里提到这个主题?

2 个答案:

答案 0 :(得分:4)

(7.6.UNIFORMVARIABLES)中的规格说如果出现Uniform*会导致INVALID_OPERATION错误:

  

使用的Uniform*命令名称中指示的大小与着色器中声明的统一大小不匹配,

  

使用的Uniform*命令名称中指示的组件类型和计数与着色器中声明的统一类型不匹配,其中布尔统一组件类型被认为与{{1}中的任何一个匹配},Uniform*i{v}Uniform*ui{v}命令。

测试调用Uniform*f{v}获取glUniform3f制服确实会导致vec4错误。

答案 1 :(得分:3)

不,这些规则不适用于制服。因此,您无法在glUniform3fv上致电vec4

Spec states in Section 7.6.1

  

对于可通过Uniform *命令加载的所有统一类型,命令   used必须与着色器中声明的制服的大小和类型相匹配,并且   没有进行类型转换。