[英]OpenGL Clear multiple 3D texture
I have 4 3D textures and I am writing on them using imageStore in a single call, everything works fine. 我有4个3D纹理,并且在一次调用中使用imageStore在它们上书写,一切正常。 The only problem is how I clear them in each frame.
唯一的问题是如何在每个帧中清除它们。 This is how I create them
这就是我创造它们的方式
for (int i = 0; i < MIPLEVELS; ++i){
glGenTextures(1, &volumeTexture[i]);
glBindTexture(GL_TEXTURE_3D, volumeTexture[i]);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, volumeDimensions / (1 << i), volumeDimensions / (1 << i), volumeDimensions / (1 << i), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
glBindTexture(GL_TEXTURE_3D, 0);
glGenFramebuffers(1, &volumeFbo[i]);
glBindFramebuffer(GL_FRAMEBUFFER, volumeFbo[i]);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, volumeTexture[i], 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
for (int i = 0; i < MIPLEVELS; ++i){
glBindFramebuffer(GL_FRAMEBUFFER, volumeFbo[i]);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
}
and this is what I do to clear them each frame 这就是我要做的每一帧清除它们
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for (int i = 0; i < MIPLEVELS; ++i){
glBindFramebuffer(GL_FRAMEBUFFER, volumeFbo[i]);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
As you can see I am using 4 different FBOs which is a big waste. 如您所见,我正在使用4个不同的FBO,这是一个很大的浪费。 I tried using 4 targets but they don't get cleared.
我尝试使用4个目标,但没有清除。 I did it this way: I binded a single FBO and created 4 targets using glFrameBufferTexture3D and then each frame I called
我是这样做的:我绑定了一个FBO,并使用glFrameBufferTexture3D创建了4个目标,然后调用了每个帧
glBindFramebuffer(GL_FRAMEBUFFER, volumeFbo[0]);
GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
glDrawBuffers(4, buffers);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
But nothing happened. 但是什么也没发生。
I believe there are two ways of solving this issue. 我相信有两种方法可以解决此问题。
You either do a loop where you attach each texture as GL_COLOR_ATTACHMENT0 and clear each texture. 您可以执行循环,将每个纹理附加为GL_COLOR_ATTACHMENT0并清除每个纹理。
Otherwise, you can also use the glClearBuffer family of textures: https://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml 否则,您也可以使用glClearBuffer系列纹理: https ://www.opengl.org/sdk/docs/man3/xhtml/glClearBuffer.xml
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.