在开始渲染之前,我正在使用以下代码在 GPU 上循环上传我的纹理,但我得到 glTexStorage2D 返回的一些“随机”内存不足错误。我的意思是有时较小的纹理会从内存中返回,但下一个较大的纹理会返回正常。我用 GPU-Z 进行了检查,只使用了 180MB 的显卡内存(1GB)。我还使用了 Gdebugger,并且没有使用太多内存(VBO、前/后缓冲区、纹理、着色器)。纹理介于 32x32 到 2048x2048 之间。
glGenTextures(1, &TextureID);
showGlError();
glBindTexture(GL_TEXTURE_2D, TextureID);
showGlError();
Nof_MipMap = 2;
glTexStorage2D(
GL_TEXTURE_2D,
Nof_MipMap,
GL_RGBA8,
Image_Width, Image_Height);
glError = showGlError();
glTexSubImage2D(
GL_TEXTURE_2D,
0,
0, 0,
Image_Width, Image_Height,
GL_RGB,
GL_UNSIGNED_SHORT_5_6_5_REV,
Image_Address);
glError = showGlError();
glGenerateMipmap(GL_TEXTURE_2D); //Generate num_mipmaps number of mipmaps here.
glError = showGlError();
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
showGlError();
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
showGlError();
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
showGlError();
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
showGlError();