opengl - 为什么加零会改变顶点着色器的结果
问题描述
这两个顶点着色器应该编译成完全相同的 GPU 程序集,但只有一个显示结果。
第一个顶点着色器按预期显示所有内容:
#version 120
attribute vec3 aPos;
uniform float i;
void main() {
gl_FrontColor=gl_Color;
gl_Position = mat4x4(cos(radians(i)),0.,0.,0., 0.,1.+i*0.,0.,0., 0.,0.,1.,0., 0.,0.,0.,1.)*vec4(aPos.x,aPos.y,aPos.z,1.);
}
第二个顶点着色器什么也不显示:
#version 120
attribute vec3 aPos;
uniform float i;
void main() {
gl_FrontColor=gl_Color;
gl_Position = mat4x4(cos(radians(i)),0.,0.,0., 0.,1.,0.,0., 0.,0.,1.,0., 0.,0.,0.,1.)*vec4(aPos.x,aPos.y,aPos.z,1.);
}
两个着色器状态的日志信息
Vertex shader was successfully compiled to run on hardware.
Vertex shader(s) linked, no fragment shader(s) defined.
两个着色器之间的唯一区别是第一个着色器具有1.+i*0.
而第二个着色器具有更简单的1.
.
那么为什么要添加i*0.
修复着色器并使其按预期工作呢?
这种行为是由 GLSL 规范定义的吗?
注意:我希望这无关紧要。我正在使用 Cygwin,所以链接的 DLL 是cygGL-1.dll
,并且链接到这个 DLL 不足以让程序运行,我不得不求助于使用SDL_GL_GetProcAddress()
来让函数正常运行,所以这可能是 Cygwin DLL 的另一个问题如果这种可能不合规行为的趋势确实如此。
解决方案
推荐阅读
- python-3.x - 如何解决问题:“预期
" 保存时 - reactjs - 如何用单元测试覆盖 Promise.all(...) 语句
- r - 提取R中给定缓冲区附近的像素值和坐标
- python - 如何将虚拟值填充为数据框中的模式?
- gams-math - 是否可以直接在 GAMS 中求解双目标模型?
- javascript - 将 span 标签动态添加到内容可编辑 div 中的某些单词
- sqlalchemy - SQLAlchemy - 查找小于指定值的最大值
- python - 如何将不同脚本中的列导出到单个 csv 中?
- php - 如何使用钩子(在 Typo3 中)防止在自定义扩展 TCA 中保存 Irre 记录?
- javascript - 使用 Javascript 通过过渡更改悬停图像