我有一个由6个1024x1024纹理组成的天空盒。立方体贴图正常工作,但CodeXL告诉我立方体贴图纹理需要110MB。它没有发现OpenGL错误。
这是我生成立方体贴图的代码:
static const char* names[] = { "/right.", "/left.", "/top.", "/bottom.", "/back.", "/front." };
static const GLenum types[] = {
GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_Z
};
glGenTextures(1, &_id);
glBindTexture(GL_TEXTURE_CUBE_MAP, _id);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
for (int i = 0; i < 6; ++i)
{
SDL_Surface *image = loadImage(path + names[i] + extension);
if (image == nullptr)
return false;
int format = image->format->Amask ? GL_RGBA : GL_RGB;
glTexImage2D(types[i], 0, format, image->w, image->h, 0, format, GL_UNSIGNED_BYTE, image->pixels);
SDL_FreeSurface(image);
}
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
return true;
我之前的代码基于图集纹理,只有25 MB的alpha通道,立方体贴图没有。