谢谢版主的回复,
我自己测试的时候看了这个mipmap值是1呀
for (int i = 0; i < mipmapsNum; ++i)
{
unsigned char data = mipmaps.address;
GLsizei datalen = mipmaps.len;
if (info.compressed)
{
glCompressedTexImage2D(GL_TEXTURE_2D, i, info.internalFormat, (GLsizei)width, (GLsizei)height, 0, datalen, data);
}
else
{
glTexImage2D(GL_TEXTURE_2D, i, info.internalFormat, (GLsizei)width, (GLsizei)height, 0, info.format, info.type, data);
}
if (i > 0 && (width != height || ccNextPOT(width) != width ))
{
CCLOG("cocos2d: Texture2D. WARNING. Mipmap level %u is not squared. Texture won't render correctly. width=%ld != height=%ld", i, width, height);
}
GLenum err = glGetError();
if (err != GL_NO_ERROR)
{
CCLOG("cocos2d: Texture2D: Error uploading compressed texture level: %u . glError: 0x%04X", i, err);
return false;
}
width = MAX(width >> 1, 1);
height = MAX(height >> 1, 1);
}
能确认这个循环就执行了一次, 您的意思是glTexImage2D这个函数内部执行又会生成mipmap吗?
我理解您的意思应该是上述代码总循环占用的内存,我自己实测是10241024的图, 仅有一个mipmap,也就是说不用mipmap的情况下, 一执行glTexImage2D就增长了6M, 另外自己试过用一个964*680的图RGBA8888的png,这个图加载就增长了4M。 谢谢您的解答
又看了一遍代码,应该是没有使用mipmap贴图方式,增长的内存是一次加载图片的开销,测试环境win7下 2.2和3.0alpha beta都测试过