0

I need to change a very old application to be able to work through Remote Desktop Connection (which only supports a subset of opengl 1.1). It only needs various opengl 1.x functions, so I'm trying to use the trick of placing a mesa opengl32.dll file in the application folder. The application only makes sparse use of opengl so it's ok to go with a low performance software renderer.

Anyway, I obtained a precompiled mesa opengl32.dll file from https://wiki.qt.io/Cross_compiling_Mesa_for_Windows but I can't get a pixelformat/context with stencil buffer enabled. If I disable stencil buffer use then everything else works but really it would be best if I could figure out how to get a pixelformat/context with stencil buffer enabled.

Here's the pixelformat part of context creation code:

function gl_context_create_init(adevice_context:hdc):int;
var
 pfd,pfd2:tpixelformatdescriptor;
begin
 mem_zero(pfd,sizeof(pfd));
 pfd.nSize:=sizeof(pfd);
 pfd.nVersion:=1;
 pfd.dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
 pfd.iPixelType:=PFD_TYPE_RGBA;
 pfd.cColorBits:=32;
 pfd.iLayerType:=PFD_MAIN_PLANE;
 pfd.cStencilBits:=4;

 gl_pixel_format:=choosepixelformat(adevice_context,@pfd);
 if gl_pixel_format=0 then
  gl_error('choosepixelformat');
 if not setpixelformat(adevice_context,gl_pixel_format,@pfd) then
  gl_error('setpixelformat');
 describepixelformat(adevice_context,gl_pixel_format,sizeof(pfd2),pfd2);
 if ((pfd.dwFlags and pfd2.dwFlags)<>pfd.dwFlags) or
     (pfd.iPixelType<>pfd2.iPixelType) or
     (pfd.cColorBits<>pfd2.cColorBits) or
     (pfd.iLayerType<>pfd2.iLayerType) or
     (pfd.cStencilBits>pfd2.cStencilBits) then
  gl_error('describepixelformat');

 ...
end;

The error happens at the line (pfd.cStencilBits>pfd2.cStencilBits), i can't seem to find a pixelformat that has cStencilBits not 0 through mesa, so I can't get a context that supports stencils.

Mardulu
  • 91
  • 7

1 Answers1

0

Well it turns out that choosepixelformat cannot choose a pixel format only available through mesa opengl32.dll however, wglchoosepixelformat can choose a pixel format only available through mesa, so my problem is solved, as I have now been able to get the stencil buffers to work while using Remote Desktop Connection with this old program.

The thing I don't understand but don't have time to look into (if you know the answer please post it in the comments of this answer), is that setpixelformat and describepixelformat both work perfectly fine with pixel formats only available through mesa. I expected either all 3 of choosepixelformat/setpixelformat/describepixelformat to either all work or all not work, but this is how it is.

Mardulu
  • 91
  • 7