3

glTexImage2D用于将纹理附加到帧缓冲区对象 (FBO) 时,我发现RAM中的内存使用量上升。看起来纹理不仅由 OpenGL 在 GPU 上分配,而且在主内存中。为什么会这样?
它有什么用吗?
可以防止主内存中的内存分配吗?

我正在使用以下 GL 调用将纹理附加到 FBO:

auto internalformat = GL_RGBA32F;
auto format = GL_RGBA;
auto type = GL_FLOAT;
auto w = 1920;
auto h = 1080;

GLuint handle;
glGenTextures(1, &handle);
glTexImage2D(GL_TEXTURE_2D, 0, internalformat, w, h, 0, format, type, nullptr);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, handle, 0);

使用glTexStorage2D如下(而不是glTexImage2D调用)时也会发生同样的情况:

glTexStorage2D(GL_TEXTURE_2D, 1, internalformat, w, h);

为什么会这样?我不明白为什么必须在 RAM 中创建内存,而不仅仅是在 GPU 上。有更好的/其他方法吗?

4

0 回答 0