OpenGL立方体贴图占用大量内存

时间:2014-09-06 14:46:25

标签: opengl memory textures

我有一个由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通道,立方体贴图没有。

0 个答案:

没有答案