Opengl 低分辨率帧缓冲区会自动重复

Opengl 低分辨率帧缓冲区会自动重复,opengl,framebuffer,Opengl,Framebuffer,我创建了一个具有复古风格显示的低分辨率帧缓冲区对象 帧缓冲区似乎自行显示,导致屏幕底部像素混乱 这就是我制作帧缓冲区和渲染缓冲区的方法 FBO=glGenFramebuffers(1) DBO=glGenRenderbuffers(1) glBindRenderbuffer(GL_RENDERBUFFER,DBO) GLrenderBuffer存储(GL_RENDERBUFFER,GL_DEPTH_组件,1280720) glBindFramebuffer(GLU帧缓冲区,FBO) glFr

我创建了一个具有复古风格显示的低分辨率帧缓冲区对象

帧缓冲区似乎自行显示,导致屏幕底部像素混乱

这就是我制作帧缓冲区和渲染缓冲区的方法

FBO=glGenFramebuffers(1)
DBO=glGenRenderbuffers(1)
glBindRenderbuffer(GL_RENDERBUFFER,DBO)
GLrenderBuffer存储(GL_RENDERBUFFER,GL_DEPTH_组件,1280720)
glBindFramebuffer(GLU帧缓冲区,FBO)
glFramebufferRenderbuffer(GL_帧缓冲区、GL_深度_附件、GL_RENDERBUFFER、DBO)
glBindFramebuffer(GL\U DRAW\U帧缓冲区,0)
这是mainloop中的代码

glpaurements(GL_三角形、len(索引)、GL_无符号、INT、None)#绘图工具
###
glBindFramebuffer(GLU帧缓冲区,0)
glBlitFramebuffer(
640 - 128,
360 - 72,
640 + 128,
360 + 72,
0,
0,
1280,
720,
GL_颜色_缓冲_位| GL_深度_缓冲_位,
最近的
)

我将Python3与PyOpenGL一起使用

在对这个问题的评论中,有一些关于驱动程序错误的猜测。事实并非如此。正确的OpenGL行为的一个明确来源是,当前的GL 4.6规范在第18.3节“复制像素”(emphasis mine)中规定:

几个命令在帧缓冲区的区域之间复制像素数据 (参见第18.3.1节),或纹理区域和渲染缓冲区之间 (见第18.3.2节)。 对于所有此类命令,如果源和目标相同或是同一基础纹理图像的不同视图,如果 源区域和目标区域在该帧缓冲区中重叠, renderbuffer,或纹理图像,复制产生的像素值 操作未定义

请注意,绑定目标
GL\u FRAMEBUFFER
是定义blit源的
GL\u READ\u FRAMEBUFFER
*和
GL\u DRAW\u FRAMEBUFFER
(指定目标)的快捷方式,因此您在这里有意创建反馈循环


然而,现在还完全不清楚你在做什么。从默认帧缓冲区到默认帧缓冲区的blit意味着它根本不会显示FBO的内容,而且由于FBO I没有颜色附件,因此无法对其进行任意渲染。

如果
glBlitFramebuffer
调用的源矩形和目标矩形不重叠,会发生什么?那会产生预期的结果吗?我不太明白你的意思。我是OpenGL的新手,我正在学习它。首先,为什么你要使用帧缓冲区而不是直接直接渲染到屏幕上?第二,您需要通过glViewport修改视口什么是“复制”帧缓冲区?你的意思是我将帧缓冲区分两次吗?如果是这样的话,原因是我试图用第一个光点减小立方体的大小,然后在第二个光点中再增加它。如果我只做第二个,它工作得很好(它仍然会重复本身),但在这种情况下,我需要在立方体缩放时添加额外的翻译。此外,这可能是驱动程序问题吗?这篇文章()说英特尔的驱动程序有问题。我也在使用英特尔驱动程序。此外,更改renderbuffer维度不会带来任何更改。