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 にステップダウンすると、これはうまく機能します。
それぞれ約132 MB 268 MB (4 バイト * 8192^2)の 2 つのイメージ (FBO + texure) で1 GB のビデオ メモリがいっぱいになるのは、私には不合理に思えます。私は何が欠けていますか?