//----------------------------------------------------------------------------// OpenGLApplePBTextureTarget::~OpenGLApplePBTextureTarget() { if (d_context) CGLDestroyContext(d_context); if (d_pbuffer) CGLDestroyPBuffer(d_pbuffer); }
PBuffer::~PBuffer() { if(data->context) CGLDestroyContext( data->context ); if(data->pbuffer) CGLDestroyPBuffer( data->pbuffer ); if(data->pixfmt) CGLDestroyPixelFormat( data->pixfmt ); CGLSetCurrentContext(NULL); delete data; }
//----------------------------------------------------------------------------// void OpenGLApplePBTextureTarget::grabTexture() { if (d_pbuffer) { CGLDestroyPBuffer(d_pbuffer); d_pbuffer = 0; } OpenGLTextureTarget::grabTexture(); }
//----------------------------------------------------------------------------// void OpenGLApplePBTextureTarget::declareRenderSize(const Size& sz) { // exit if current size is enough if ((d_area.getWidth() >= sz.d_width) && (d_area.getHeight() >= sz.d_height)) return; setArea(Rect(d_area.getPosition(), d_owner.getAdjustedTextureSize(sz))); // dump any previous pbuffer if (d_pbuffer) { CGLDestroyPBuffer(d_pbuffer); d_pbuffer = 0; } CGLError err; if (err = CGLCreatePBuffer(d_area.getWidth(), d_area.getHeight(), GL_TEXTURE_2D, GL_RGBA, 0, &d_pbuffer)) { CEGUI_THROW(RendererException( "OpenGLApplePBTextureTarget::declareRenderSize " "- CGLCreatePBuffer failed: " + String(CGLErrorString(err)))); } if (err = CGLSetPBuffer(d_context, d_pbuffer, 0, 0, d_screen)) CEGUI_THROW(RendererException( "OpenGLApplePBTextureTarget::declareRenderSize " "- CGLSetPBuffer failed: " + String(CGLErrorString(err)))); clear(); // make d_texture use the pbuffer as it's data source // save old texture binding GLuint old_tex; glGetIntegerv(GL_TEXTURE_BINDING_2D, reinterpret_cast<GLint*>(&old_tex)); glBindTexture(GL_TEXTURE_2D, d_texture); err = CGLTexImagePBuffer(CGLGetCurrentContext(), d_pbuffer, GL_FRONT); // restore previous texture binding. glBindTexture(GL_TEXTURE_2D, old_tex); if (err) CEGUI_THROW(RendererException( "OpenGLApplePBTextureTarget::declareRenderSize " "- CGLTexImagePBuffer failed: " + String(CGLErrorString(err)))); // ensure CEGUI::Texture is wrapping real GL texture and has correct size d_CEGUITexture->setOpenGLTexture(d_texture, d_area.getSize()); }
static int cleanup(void) { #if USE_OSMESA OSMesaDestroyContext(context); free(pbuffer); #elif USE_CGL (void)CGLDestroyContext(context); (void)CGLDestroyPBuffer(pbuffer); #elif USE_GLX display = XOpenDisplay(NULL); glXDestroyPbuffer(display, pbuffer); XCloseDisplay(display); #else /* TODO: cleanup pbuffer and OpenGL context */ #endif return 0; }