嗨,我有 35 张图像要在显示器中绘制。我在 7X5 网格中绘制它。图片是从网上下载的。每次下载图像时,我都会尝试绘制全部 35 张图像。但其中一些尚未下载。所以我为他们画了一些默认的瓷砖。问题是每次下载图像时,我都会再次绘制以前绘制的图像。我想减少它。所以我在考虑做一些像Texture Atlas这样的东西。我正在尝试手动完成。我是通过制作一个大图像glTexImage2D
并使用glTexSubImage2D
.
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, (*tex));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, textureImageInfo->format, textureImageInfo->texWidth, textureImageInfo->texHeight, 0, textureImageInfo->format, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, textureImageInfo->imageWidth, textureImageInfo->imageHeight, textureImageInfo->format, GL_UNSIGNED_BYTE, textureImageInfo->image);
我调用 35glTexSubImage2D
将所有 35 个图像添加到一个大的glTexImage2D
. 这里我只写了一个以便于解释。最后我做了
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, this->tileCoordList);
glTexCoordPointer(3, GL_FLOAT, 0, this->tileTextureCoordList);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
现在我感到困惑的是,我是否也需要为 35 次调用生成和绑定纹理 35 次glTexSubImage2D
?或者只做一次就足够了。我不明白绑定纹理的实际问题与它有什么关系。谢谢。