如何解决使用立方体贴图时的OpenGL清除缓冲区
我正在使用nvidia nsight图形来检查使用立方体贴图清除帧缓冲区时会发生什么。
我无法确定清理是否会影响所有六个面,或者在清除之前必须指定要渲染到的面。
我实际上需要知道如何正确清除立方体贴图。每脸或通过帧缓冲区。
编辑:
这是通话记录:
Issues (324) Event Description CPU ms GPU ms
563 "void glBindFramebuffer(GLenum target = GL_FRAMEBUFFER,GLuint framebuffer = '4')" 0.02 -
Issues (324) Event Description CPU ms GPU ms
565 "void glViewport(GLint x = 0,GLint y = 0,GLsizei width = 256,GLsizei height = 256)" <0.01 -
Issues (324) Event Description CPU ms GPU ms
566 "void glClearNamedFramebufferfv(GLuint framebuffer = '4',GLenum buffer = GL_DEPTH,GLint drawbuffer = 0,GLfloat* value = {1})" 0.03 <0.01
Issues (324) Event Description CPU ms GPU ms
567 "void glNamedFramebufferTextureLayer(GLuint framebuffer = '4',GLenum attachment = GL_DEPTH_ATTACHMENT,GLuint texture = '59',GLint level = 0,GLint layer = 0)" 0.01 -
Issues (324) Event Description CPU ms GPU ms
570 void glUseProgram(GLuint program = '616') <0.01 -
一些图纸(我没有报告程序和图纸日志), 我看到nvidia软件中的原始数据撞击了帧缓冲区,而没有写任何警告,所以我认为帧缓冲区是有效的。
下一张脸:
Issues (324) Event Description CPU ms GPU ms
914 "void glNamedFramebufferTextureLayer(GLuint framebuffer = '4',GLint layer = 1)" 0.02 -
... 我什么都没清除,然后重新开始以新的矩阵方向绘制,直到渲染了6个面。
EDIT2,这是创建阴影立方体贴图的方法:
glCreateTextures(
GL_TEXTURE_CUBE_MAP,1,&m_identifier
);
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
glTextureStorage2D(
m_identifier,GL_DEPTH_COMPONENT32F,256,256
);
解决方法
帧缓冲区附加有图像。帧缓冲操作会影响当前附加到它们的图像。
请注意,我说的是“图像”,而不是纹理”。纹理包含图像,但就帧缓冲区而言,相同纹理中的不同图像没有相互之间的关系。帧缓冲操作仅会影响当时附加到其上的图像。
如果将特定的立方体贴图面附加到帧缓冲区,则该面是附加到FBO中该附加位置的图像。对帧缓冲区的操作将影响该图像,但是帧缓冲区既不知道也不关心纹理中可能存在的任何其他立方体贴图。帧缓冲区仅处理当前连接的图像。
此外,如果要清除将用于渲染的帧缓冲区附加图像,则发出清除调用时,必须将要清除的图像附加到FBO。如果要清除要附加的图像,先清除再附加是没有意义的。
如果要将整个纹理清除为特定值(例如,使用立方体贴图的所有面),则可以do that with glClearTexImage
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。