我想创建一个opengles 2.0纹理,并在CPU侧的每个绘制调用上更新它,以便在使用纹理时着色器在它们时具有正确的数据。这是创建纹理的代码:
GLubyte * oglData;
- (GLuint)setupTexture
{
oglData = (GLubyte *) calloc(256*1*4, sizeof(GLubyte));
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, oglData);
return texName;
}
我计划在gldrawarrays((之前更新Ogldata(256x1 RGBA像素数据(。我的疑问:
IOS是否支持256x1纹理?如果没有,出路是什么?
是否可以多次更新ogldata,然后每次调用glteximage2d来更新纹理?从CPU到GPU的数据重复复制真的有效还是更好的方法?
我在正确的轨道上吗?
1(我没有与iOS和OpenGL一起使用,但是,如果默认不支持这些纹理,则某些扩展可能会增加对它们的支持。
2(要更新纹理,您应该使用glTexSubImage2d
。区别在于glTexImage2D
重新关注内存,而glTexSubImage2D
则没有。根据纹理大小,上传频率等,这可能足够有效,这可能是您的,如果没有太多纹理数据,则最好将其全部上传而不是更新。