【发布时间】:2014-05-15 19:32:13
【问题描述】:
我正在 iOS 上开发一个 OpenGL ES 2 项目以学习 OpenGL ES 2。在网上我找到了一个用于链接和编译着色器的 Objective-C 实现,我将这个实现用作我自己的模板。不幸的是,我错误地将我的纹理数据上传为 glUniform1f 而不是 glUniform1i。看起来像这样...
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, self.texture);
glUniform1f(_texUniform, 1); // this line should be glUniform1i
我的项目有多个具有自己纹理的对象。这个错字导致只有最后一个绘制对象的纹理显示在所有对象上。我怀疑我的纹理 ID 或类似的东西有问题,因此在每次绘制调用时都注销了纹理 ID 等,并且找不到任何问题。
这对我来说是一个很难找到的错误,我想了解这个错误发生了什么。我的问题是 glUniform1f vs glUniform1i 是什么会导致这种行为?我有点惊讶的是,着色器不仅无法链接和编译,或者根本没有绘制任何纹理。
【问题讨论】: