创建&;在iOS上更新OpenGLES纹理
我想创建一个OpenGLES 2.0纹理,并在CPU端的每个绘制调用上更新它,以便着色器在使用纹理时拥有正确的数据。以下是创建纹理的代码:创建&;在iOS上更新OpenGLES纹理,ios,opengl-es,opengl-es-2.0,texture-mapping,texture2d,Ios,Opengl Es,Opengl Es 2.0,Texture Mapping,Texture2d,我想创建一个OpenGLES 2.0纹理,并在CPU端的每个绘制调用上更新它,以便着色器在使用纹理时拥有正确的数据。以下是创建纹理的代码: GLubyte * oglData; - (GLuint)setupTexture { oglData = (GLubyte *) calloc(256*1*4, sizeof(GLubyte)); GLuint texName; glGenTextures(1, &texName); glBindTexture(
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像素数据)。我的疑问是:
2) 要更新纹理,应使用
glTexSubImage2d
。不同之处在于glTexImage2D
重新分配内存,而glTexSubImage2D
不重新分配内存。根据纹理大小、上载频率等,这可能足够有效。如果没有太多纹理数据,最好将其全部上载,而不是更新。好的,现在我的下一个问题是如何将此纹理传递给着色器?像glUniform1i(纹理,0)这样的东西足够了吗?@DeepakSharma是的,只是你需要传递纹理ID而不是0。