使用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上。有更好/其他方法吗?