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!! */
}
Example #2
0
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;
}