PDA

View Full Version : How to get unclamped floating point pixels in pbuffer ?



ChaosChiao
11-27-2004, 06:26 PM
Hi!

I want to read floating point pixels in a WGL_ATI_pixel_format_float pbuffer. The extension doc tells me that if the extension is set, floating point values will not be clamped. But I can not get those unclamped value by glReadPixels.

My code:
//-----------------------------------------

const int attr[] = {
WGL_DRAW_TO_PBUFFER_ARB , GL_TRUE ,
WGL_SUPPORT_OPENGL_ARB , GL_TRUE ,
WGL_PIXEL_TYPE_ARB , WGL_TYPE_RGBA_FLOAT_ATI ,
WGL_COLOR_BITS_ARB , 128 ,
WGL_RED_BITS_ARB , 32 ,
WGL_GREEN_BITS_ARB , 32 ,
WGL_BLUE_BITS_ARB , 32 ,
WGL_ALPHA_BITS_ARB , 32 ,
WGL_DEPTH_BITS_ARB , 24 ,
WGL_AUX_BUFFERS_ARB , 3 ,
0 , 0 ,
};

int fmts[200];
UINT nfmt = 0;
BOOL res = wglChoosePixelFormatARB( dc , attr , NULL , 200 , fmts , &nfmt );
if( !res )
{
WINERROR();
exit( 0 );
}

HPBUFFERARB pbf = wglCreatePbufferARB( dc , fmts[0] , wsize , wsize , NULL );

if( !pbf )
{
WINERROR();
exit( 0 );
}
HDC pfdc = wglGetPbufferDCARB( pbf );
HGLRC pfrc = wglCreateContext( pfdc );
wglMakeCurrent( pfdc , pfrc );

// do some drawing here

glFinish();

// try to get pixels

float * f = (float*)malloc( wsize * wsize * 4 * sizeof(float) );

glReadPixels( 0 , 0 , wsize , wsize , GL_RGBA , GL_FLOAT , f );

//-----------------------------------------

Is there anyother way of reading floating point pixels?

Thank you!

roffe
12-03-2004, 09:17 AM
Do you get the pixel format you request? Check that glGetInteger(...) with GL_RED_BITS,GL_BLUE_BITS etc return what you expect(32 that is) after you created your context.