Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL内存不足错误,大型FBO_Opengl_Fbo_Pyopengl_Video Memory - Fatal编程技术网

OpenGL内存不足错误,大型FBO

OpenGL内存不足错误,大型FBO,opengl,fbo,pyopengl,video-memory,Opengl,Fbo,Pyopengl,Video Memory,在PyOpenGL/PyQt中创建大型(2^13)帧缓冲区对象时出现内存不足错误: width = 8192 height = 8192 self.textureFbo = QtOpenGL.QGLFramebufferObject(width,height) self.textureFbo.bind() texture = self.bindTexture(QtGui.QPixmap(self.textureFilePath)) # 2^13

在PyOpenGL/PyQt中创建大型(2^13)帧缓冲区对象时出现内存不足错误:

    width = 8192
    height = 8192

    self.textureFbo = QtOpenGL.QGLFramebufferObject(width,height)
    self.textureFbo.bind()

    texture = self.bindTexture(QtGui.QPixmap(self.textureFilePath)) # 2^13
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glClear (GL_COLOR_BUFFER_BIT);

    glLoadIdentity()
    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity()
    glOrtho(0, +1, +1, 0, -0.1, 2.0);

    glBegin(GL_POLYGON);
    glTexCoord2d(1.0, 0.0)      
    glVertex3f (0.0, 0.0, 0.0)
    glTexCoord2d(1.0, 1.0)
    glVertex3f (1.0, 0.0, 0.0)
    glTexCoord2d(0.0, 1.0)
    glVertex3f (1.0, 1.0, 0.0)
    glTexCoord2d(0.0, 0.0)
    glVertex3f (0.0, 1.0, 0.0)
    glEnd();

    self.deleteTexture(texture)
    self.textureFbo.release()
    self.textureFboLoaded = True
给出:

OpenGL.error.GLError: GLError(
        err = 1285,
        description = 'out of memory',
        baseOperation = glClear,
        cArguments = (GL_COLOR_BUFFER_BIT,)
)
QGLFramebufferObject: Framebuffer incomplete attachment.
Traceback (most recent call last):
  File "main.py", line 286, in paintGL
    self.loadTextureFBO()
  File "main.py", line 357, in loadTextureFBO
    glEnable(GL_TEXTURE_2D)
  File "C:\Python27\lib\site-packages\OpenGL\error.py", line 208, in glCheckErro
r
    baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
        err = 1285,
        description = 'out of memory',
        baseOperation = glEnable,
        cArguments = (GL_TEXTURE_2D,)
)
QImage: out of memory, returning null image
但是,如果我选择2^12纹理或FBO,则效果很好


在我看来,两个图像(FBO+texure),每个大约132mb 268mb(4字节*8192^2),应该填满我1gb的视频内存,这似乎是不合理的。我错过了什么

首先,请注意4 x 8192^2是268M,而不是132,所以对于这两个对象,我们讨论的是超过半GB的容量。想必还有其他对记忆的需求。我同意听起来你不应该有问题,但我不知道还有什么问题。

首先,请注意4x8192^2是268M,而不是132,所以我们讨论的是这两个对象的半GB。想必还有其他对记忆的需求。我同意听起来你不应该有问题,但我不知道还有什么问题。

谢谢你的回答,我刚刚找到一个名为GPU-Z的视频卡分析器,它不显示我的第二个GPU的内存使用情况,只显示我的第一个GPU。所以我假设我的SLI设置混乱,我只有1GB的vram。无论如何,在我运行脚本之前,视频内存的基线使用量是26mb。我以我能达到的最大帧缓冲区大小运行我的脚本,经过反复试验后我发现它正好是7287^2,vram的使用量峰值为589mb,然后我将图像大小增加到7288^2,并得到内存不足错误。奇怪的是,除了内存限制之外,帧缓冲区大小可能还有一个上限?在SLI中,纹理需要加载到两张卡上(否则两张卡上的纹理单元如何才能有效运行),因此不能将VRAM大小加在一起。这仍然很有意义;vram的最高使用量为589mb,因此对于稍大一点的帧缓冲区来说,它的内存不足似乎很奇怪。@Leo:请记住,您的程序并不是唯一使用vram的程序——可能是您的操作系统/窗口系统和任何其他可能正在运行的程序也在影响它。视频内存可能只是碎片化,以便有足够的可用内存,但不是在一个连续的块中;就是这样,非连续内存,我将纹理分割成四个独立的帧缓冲区,问题就解决了。谢谢你的回答,我刚刚找到一个名为GPU-Z的视频卡分析器,它没有显示我的第二个GPU的内存使用情况,只显示了我的第一个GPU。所以我假设我的SLI设置混乱,我只有1GB的vram。无论如何,在我运行脚本之前,视频内存的基线使用量是26mb。我以我能达到的最大帧缓冲区大小运行我的脚本,经过反复试验后我发现它正好是7287^2,vram的使用量峰值为589mb,然后我将图像大小增加到7288^2,并得到内存不足错误。奇怪的是,除了内存限制之外,帧缓冲区大小可能还有一个上限?在SLI中,纹理需要加载到两张卡上(否则两张卡上的纹理单元如何才能有效运行),因此不能将VRAM大小加在一起。这仍然很有意义;vram的最高使用量为589mb,因此对于稍大一点的帧缓冲区来说,它的内存不足似乎很奇怪。@Leo:请记住,您的程序并不是唯一使用vram的程序——可能是您的操作系统/窗口系统和任何其他可能正在运行的程序也在影响它。视频内存可能只是碎片化,以便有足够的可用内存,但不是在一个连续的块中;就是这样,非连续内存,我把纹理分成四个独立的帧缓冲区,问题就解决了。