def resizeEvent(self, event): width, height = self.size().width(), self.size().height() # Update underlying pixmap self.__dirtyPixmap = True self.__pixmap = np.empty((height, width, 4), dtype=np.uint8) errCode = mesa.OSMesaMakeCurrent(self.__context, self.__pixmap, gl.GL_UNSIGNED_BYTE, width, height) assert errCode == gl.GL_TRUE mesa.OSMesaPixelStore(mesa.OSMESA_Y_UP, 0) self.makeCurrent() gl.testGL() self.initializeGL() self.resizeGL(width, height) QLabel.resizeEvent(self, event)
def __createOSMesaContext(self): """Creates an OSMesa context, assigning it to an attribute called ``__context``. """ import OpenGL.GL as gl import OpenGL.raw.osmesa.mesa as osmesa import OpenGL.arrays as glarrays log.debug('Creating gl.OSMesaContext') # We have to create a dummy buffer # for the off-screen context. buffer = glarrays.GLubyteArray.zeros((640, 480, 4)) context = osmesa.OSMesaCreateContextExt(gl.GL_RGBA, 8, 4, 0, None) osmesa.OSMesaMakeCurrent(context, buffer, gl.GL_UNSIGNED_BYTE, 640, 480) self.__buffer = buffer self.__context = context
def paintEvent(self, event): # Only refresh content when paint comes from backend if self.__dirtyPixmap: self.__dirtyPixmap = False height, width = self.__pixmap.shape[0:2] assert width == self.size().width() assert height == self.size().height() errCode = mesa.OSMesaMakeCurrent(self.__context, self.__pixmap, gl.GL_UNSIGNED_BYTE, width, height) assert errCode == gl.GL_TRUE self.makeCurrent() self.paintGL() gl.glFinish() image = QImage(self.__pixmap.data, width, height, QImage.Format_ARGB32) self.setPixmap(QPixmap.fromImage(image)) QLabel.paintEvent(self, event)