在iOS 5.0框架中有一个关于GLKit的快速问题。
如果使用GLKTextureLoader,它是否只在当前活动的纹理单元中加载纹理?我看了一些例子,我没有看到你必须说变量x中的GLKTextureInfo绑定到GL_TEXTURE0。
我见过人们将glActiveTexture与GLKTextureLoader结合使用的示例,但看起来纹理只是自动锁定到活动纹理单元中。一旦我加载它,我只需要传入纹理坐标?
提前致谢。
答案 0 :(得分:3)
在GLKTextureLoader加载GLKTextureInfo对象之后,您就可以自己绑定纹理了。因此,当GLKLTextureLoader完成加载时,加载的纹理不会绑定到任何纹理单元。当你准备好画画时,你打电话:
glActiveTexture(GL_TEXTURE0); // to specify texture unit 0
glBindTexture(textureInfo.target, textureInfo.name);
我会高度推荐这本书Learning OpenGL ES for iOS: A Hands-On Guide to Modern 3D Graphics Programming,因为它很好地展示了GLKit课程中的内容。您还可以参考我编写的这个演示代码,该代码使用GLKTextureLoader:https://github.com/joekim/MobileMeetup/tree/master/GLKitDemo
答案 1 :(得分:2)
是的,有一些自动化正在进行中。加载第二个纹理后,该纹理将绑定到GL_TEXTURE0,但如果你想在GL_TEXTURE1中使用它:
glActiveTexture(GL_TEXTURE1);
glBindTexture(someTexture.target, someTexture.name);
glUniform1i(u_someSampler, 1); // u_someSampler retrieved from prev call to glGetUniformLocation