在iOS上创建和更新OpenGLES纹理



我想创建一个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像素数据(。我的疑问:

  1. IOS是否支持256x1纹理?如果没有,出路是什么?

  2. 是否可以多次更新ogldata,然后每次调用glteximage2d来更新纹理?从CPU到GPU的数据重复复制真的有效还是更好的方法?

  3. 我在正确的轨道上吗?

1(我没有与iOS和OpenGL一起使用,但是,如果默认不支持这些纹理,则某些扩展可能会增加对它们的支持。

2(要更新纹理,您应该使用glTexSubImage2d。区别在于glTexImage2D重新关注内存,而glTexSubImage2D则没有。根据纹理大小,上传频率等,这可能足够有效,这可能是您的,如果没有太多纹理数据,则最好将其全部上传而不是更新。

最新更新