【发布时间】:2011-02-26 15:45:05
【问题描述】:
我没有掌握 OpenGL 的所有精妙之处,如果我的问题不够精确,请见谅
在 iPhone 上,我像这样加载纹理(png 图像)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, iTextureSize.width, iTextureSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_FILTER, GL_NEAREST);
效果很好,但我注意到它分配的大小正好是纹理数据的两倍。 我在论坛上读到这可能是由 mipmaping 引起的,所以我尝试通过以下方式将其关闭 评论 glTexParameteri 行但我的纹理是空白的。
这是一个问题,是我的显示代码中的纹理加载参数吗? 我的显示代码是这样的
glTexCoordPointer(2, GL_FLOAT, 0, texture);
glVertexPointer(DIMENSION, GL_SHORT, 0, iVertex);
glBindTexture(GL_TEXTURE_2D, (GLuint)textureID);
glDrawArrays(GL_TRIANGLE_FAN, 0, iVertexCount);
【问题讨论】:
-
你所说的“分配正好是纹理数据大小的两倍”是什么意思?您也可以在上传纹理后释放纹理数据指向的内存。 glTexImage 创建一个完整的副本。
-
我已经释放了 textureData 但是 glTexImage2D 分配了两倍于 textureData 的大小
标签: iphone memory-management opengl-es textures mipmaps