hi everyone,
shouldn’t it be much faster to render to a pbuffer and then bind it to a texture object, instead of rendering to the framebuffer and use glCopyTexImage2D(…)? thats why pbuffers were introduced, right?
well, in my case pbuffers are twice as slow. i suppose it’s because i cant get a hardware-accelerated pixelformat: if i add {WGL_ACCELERATION_ARB, true}, wglChoosePixelFormatARB() return 0 PFs.
can this be because of my gpu (geforeFX 5200) or did i miss sth? here are the PF attributes i need:
iattribs[n++]=WGL_ACCELERATION_ARB;
iattribs[n++]=true;
iattribs[n++]=WGL_SUPPORT_OPENGL_ARB;
iattribs[n++]=true;
iattribs[n++]=WGL_DRAW_TO_PBUFFER_ARB;
iattribs[n++]=true;
iattribs[n++]=WGL_BIND_TO_TEXTURE_RGBA_ARB;
iattribs[n++]=true;
iattribs[n++]=WGL_DOUBLE_BUFFER_ARB;
iattribs[n++]=false;
iattribs[n++]=WGL_RED_BITS_ARB;
iattribs[n++]=8;
iattribs[n++]=WGL_BLUE_BITS_ARB;
iattribs[n++]=8;
iattribs[n++]=WGL_GREEN_BITS_ARB; iattribs[n++]=8;
iattribs[n++]=WGL_ALPHA_BITS_ARB; iattribs[n++]=8;
iattribs[n++]=WGL_DEPTH_BITS_ARB; iattribs[n++]=0;
iattribs[n++]=0;
thanks for the help,
demonoid
Here are the attributes I used with great success :
const int hdcAttributes [30]={
WGL_SUPPORT_OPENGL_ARB, TRUE, // pbuffer will be used with gl
WGL_BIND_TO_TEXTURE_RGB_ARB ,TRUE,
WGL_DRAW_TO_PBUFFER_ARB ,TRUE,
WGL_COLOR_BITS_ARB , 24,
WGL_DEPTH_BITS_ARB ,24,
WGL_ACCELERATION_ARB,WGL_FULL_ACCELERATION_ARB,
0 };
Mostly noticable is that you request a double buffer for your pbuffer, whereas obviously it is not useful.
You can have a look at my webpage with my different experiments with pbuffers and copytexsubimage (source code included) :
http://www.chez.com/dedebuffer/
Hope it helps.
Pbuffers were introduced to allow offscreen rendering that’s legal and valid even when a possible window context might be obscured by other windows. A later extension adds the ability to texture out of pbuffers.
That being said, depending on the hardware and the driver versions involved, it might be faster to CopyTexSubImage() into a texture, because the hardware may use less efficient (non-swizzling) texture read modes when texturing out of a pbuffer. So implement it both ways and measure, to be sure.
{WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB}instead of {WGL_ACCELERATION_ARB, true} did it.
strange enough: things get even slower this way (?!)
thanks a lot,
demonoid
I’m actually using a geforce4 ti 4600, and I don’t see any difference with or without “WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB”. speed remains the same.
Moeover using RGBA and depthtexture from one single pbuffer does not slow the pbuffer neither