bool OPENGL_PBUFFER:: Create(int width, int height) { if (pbuffer) { LOG::cerr << "Destroying old pbuffer before creating new one" << std::endl; Destroy(); } GLint attributes[] = {AGL_RGBA,AGL_DOUBLEBUFFER,AGL_NONE}; AGLPixelFormat format = aglChoosePixelFormat(NULL, 0, attributes); if(format==NULL){ LOG::cout<<"Could not set up the pixel format"<<std::endl;return false;} AGLContext context = aglCreateContext(format, NULL); if(context==NULL){ LOG::cout<<"Could not set up the pbuffer context"<<std::endl;return false;} aglSetCurrentContext(context); if(!aglCreatePBuffer(width, height, GL_TEXTURE_2D, GL_RGBA, 0, &pbuffer)){ LOG::cout<<"Error: couldn't create pbuffer"<<std::endl; LOG::cout<<aglErrorString(aglGetError()); return false; } if(!aglSetPBuffer(context, pbuffer, 0, 0, aglGetVirtualScreen(context))){ LOG::cout<<"Error: couldn't set pbuffer"<<std::endl; LOG::cout<<aglErrorString(aglGetError()); return false; } return true; /* Success!! */ }
bool Window::configInitAGLPBuffer() { AGLContext context = getAGLContext(); if( !context ) { setError( ERROR_AGLWINDOW_NO_CONTEXT ); return false; } // PBuffer const PixelViewport& pvp = getWindow()->getPixelViewport(); AGLPbuffer pbuffer; if( !aglCreatePBuffer( pvp.w, pvp.h, GL_TEXTURE_RECTANGLE_EXT, GL_RGBA, 0, &pbuffer )) { setError( ERROR_AGLWINDOW_CREATEPBUFFER_FAILED ); LBWARN << getError() << ": " << AGLERROR << std::endl; return false; } // attach to context if( !aglSetPBuffer( context, pbuffer, 0, 0, aglGetVirtualScreen( context ))) { setError( ERROR_AGLWINDOW_SETPBUFFER_FAILED ); LBWARN << getError() << ": " << AGLERROR << std::endl; return false; } setAGLPBuffer( pbuffer ); return true; }
void OSXPBuffer::createPBuffer() { LogManager::getSingleton().logMessage( "OSXPBuffer::createPBuffer()" ); GLint attrib[] = { AGL_NO_RECOVERY, GL_TRUE, AGL_ACCELERATED, GL_TRUE, AGL_RGBA, AGL_NONE }; AGLPixelFormat pixelFormat = aglChoosePixelFormat(NULL, 0, attrib); mAGLContext = aglCreateContext(pixelFormat, NULL); //mAGLContext = aglGetCurrentContext(); aglCreatePBuffer( mWidth, mHeight, GL_TEXTURE_2D, GL_RGBA, 0, &mPBuffer ); GLint vs = aglGetVirtualScreen( mAGLContext ); aglSetPBuffer( mAGLContext, mPBuffer, 0, 0, vs ); mContext = OGRE_NEW OSXCarbonContext(mAGLContext, pixelFormat); }
static void _glitz_agl_context_make_current (glitz_agl_drawable_t *drawable, glitz_bool_t finish) { if (finish) glFinish (); if (drawable->thread_info->cctx) { glitz_context_t *ctx = drawable->thread_info->cctx; if (ctx->lose_current) ctx->lose_current (ctx->closure); drawable->thread_info->cctx = NULL; } if (drawable->pbuffer) { aglSetPBuffer (drawable->context->context, drawable->pbuffer, 0, 0, aglGetVirtualScreen (drawable->context->context)); drawable->context->pbuffer = 1; } else { if (drawable->context->pbuffer) { aglSetDrawable (drawable->context->context, NULL); drawable->context->pbuffer = 0; } aglSetDrawable (drawable->context->context, drawable->drawable); } aglSetCurrentContext (drawable->context->context); drawable->base.update_all = 1; if (!drawable->context->initialized) _glitz_agl_context_initialize (drawable->thread_info, drawable->context); }
static void _glitz_agl_make_current (void *abstract_drawable, void *abstract_context) { glitz_agl_context_t *context = (glitz_agl_context_t *) abstract_context; glitz_agl_drawable_t *drawable = (glitz_agl_drawable_t *) abstract_drawable; int update = 0; if (drawable->base.width != drawable->width || drawable->base.height != drawable->height) glitz_agl_drawable_update_size (drawable, drawable->base.width, drawable->base.height); if (aglGetCurrentContext () != context->context) { update = 1; } else { if (drawable->pbuffer) { AGLPbuffer pbuffer; GLint unused; aglGetPBuffer (context->context, &pbuffer, &unused, &unused, &unused); if (pbuffer != drawable->pbuffer) update = 1; } else if (drawable->drawable) { if (aglGetDrawable (context->context) != drawable->drawable) update = 1; } } if (update) { if (drawable->thread_info->cctx) { glitz_context_t *ctx = drawable->thread_info->cctx; if (ctx->lose_current) ctx->lose_current (ctx->closure); } if (drawable->pbuffer) { aglSetPBuffer (context->context, drawable->pbuffer, 0, 0, aglGetVirtualScreen (context->context)); context->pbuffer = 1; } else { if (context->pbuffer) { aglSetDrawable (context->context, NULL); context->pbuffer = 0; } aglSetDrawable (context->context, drawable->drawable); } aglSetCurrentContext (context->context); } drawable->thread_info->cctx = &context->base; }