Hi Alex,

can you try this patch ?

Regards,
Raphael


> On Sun, Feb 20, 2005 at 01:43:44PM +0100, Lionel Ulmer wrote:
> > Well, if you want just to test if the application works better, just add
> > (stubbed) support for the following extensions:
> >
> > http://oss.sgi.com/projects/ogl-sample/registry/ARB/wgl_pixel_format.txt
> > http://oss.sgi.com/projects/ogl-sample/registry/ARB/wgl_pbuffer.txt
> > http://oss.sgi.com/projects/ogl-sample/registry/ARB/wgl_render_texture.tx
> >t
> >
> > This entails:
> >
> >  = adding the string for the extension in the WGL extension string (no
> > idea if it needs to be duplicated also in the 'standard' extension
> > string). = adding all functions that are described in the three preceding
> > extensions (having them returning correct values) and printing debug
> > output = run the game again and see if it actually uses now these
> > functions and if it works better (ie better in 'not crashing', not better
> > as in 'working'
> >
> >    :-) ).
>
> Well, I've given it a try, but they're either not getting called, or I
> haven't implemented them correctly (first time hacking wine).  I've
> included a patch below showing what I've done.  A few of them don't
> return nice values, but I figured it should get to the traces if they
> are getting called.
>
> > > I guess it's not just a case of passing through like the bulk of the
> > > opengl functions or they'd be done already.
> >
> > For PBuffers, the WGL and SGIX interface is a bit different so an
> > adaptation is required. For 'render to texture', one needs to use
> > 'GL_EXT_framebuffer_object' (or PBuffers) to emulate the extension.
> >
> > So this is not the 'simple' thunking that most of the rest of the OpenGL
> > implementation is...
>
> Well, if I can confirm that some of the functions are getting called, I
> may as well have a go at it ;)
>
> Thanks for your help.
>
> Index: opengl32.spec
> ===================================================================
> RCS file: /home/wine/wine/dlls/opengl32/opengl32.spec,v
> retrieving revision 1.23
> diff -u -r1.23 opengl32.spec
> --- opengl32.spec     7 Feb 2004 01:29:33 -0000       1.23
> +++ opengl32.spec     20 Feb 2005 16:09:21 -0000
> @@ -24,6 +24,17 @@
>  @  stdcall wglGetPixelFormat(long) gdi32.GetPixelFormat
>  @  stdcall wglSetPixelFormat(long long ptr) gdi32.SetPixelFormat
>  @  stdcall wglSwapBuffers(long) gdi32.SwapBuffers
> +@  stdcall wglGetPixelFormatAttribivARB(ptr long long long ptr ptr)
> +@  stdcall wglGetPixelFormatAttribfvARB(ptr long long long ptr ptr)
> +@  stdcall wglChoosePixelFormatARB(ptr ptr ptr long ptr ptr)
> +@  stdcall wglCreatePbufferARB(ptr long long long ptr)
> +@  stdcall wglGetPbufferDCARB(ptr)
> +@  stdcall wglReleasePbufferDCARB(ptr ptr)
> +@  stdcall wglDestroyPbufferARB(ptr)
> +@  stdcall wglQueryPbufferARB(ptr long long)
> +@  stdcall wglBindTexImageARB(ptr long)
> +@  stdcall wglReleaseTexImageARB(ptr long)
> +@  stdcall wglSetPbufferAttribARB(ptr ptr)
>  @  stdcall glAccum( long long ) wine_glAccum
>  @  stdcall glAlphaFunc( long long ) wine_glAlphaFunc
>  @  stdcall glAreTexturesResident( long ptr ptr )
> wine_glAreTexturesResident Index: wgl_ext.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/opengl32/wgl_ext.c,v
> retrieving revision 1.2
> diff -u -r1.2 wgl_ext.c
> --- wgl_ext.c 31 Jan 2005 11:32:13 -0000      1.2
> +++ wgl_ext.c 20 Feb 2005 16:09:43 -0000
> @@ -39,7 +39,7 @@
>
>  /* Some WGL extensions... */
>  static const char *WGL_extensions_base = "WGL_ARB_extensions_string
> WGL_EXT_extensions_string"; -static char *WGL_extensions = NULL;
> +static char *WGL_extensions = "WGL_ARB_pixel_format WGL_ARB_pbuffer
> WGL_ARB_render_texture";
>
>  /* Extensions-query functions */
>  BOOL query_function_pbuffers(const char *gl_version, const char
> *gl_extensions, const char *glx_extensions, @@ -143,11 +143,89 @@
>      }
>  }
>
> +GLboolean WINAPI wglGetPixelFormatAttribivARB(HDC hdc, int iPixelFormat,
> int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues)
> +{
> +    TRACE("(%p, %d, %d, %d, %p, %p)\n", hdc, iPixelFormat, iLayerPlane,
> nAttributes, piAttributes, piValues); +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat,
> int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT
> *pfValues) +{
> +    TRACE("(%p, %d, %d, %d, %p, %p)\n", hdc, iPixelFormat, iLayerPlane,
> nAttributes, piAttributes, pfValues); +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglChoosePixelFormatARB(HDC hdc, const int
> *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int
> *piFormats, UINT *nNumFormats) +{
> +    TRACE("(%p, %p, %p, %d, %p, %p)\n", hdc, piAttribIList, pfAttribFList,
> nMaxFormats, piFormats, nNumFormats); +    return GL_TRUE;
> +}
> +
> +#define HPBUFFERARB void *
> +HPBUFFERARB WINAPI wglCreatePbufferARB(HDC hdc, int iPixelFormat, int
> iWidth, int iHeight, const int *piAttribList) +{
> +    TRACE("(%p, %d, %d, %d, %p)\n", hdc, iPixelFormat, iWidth, iHeight,
> piAttribList); +    return 0;
> +}
> +
> +HDC WINAPI wglGetPbufferDCARB(HPBUFFERARB hPbuffer)
> +{
> +    TRACE("(%p)\n", hPbuffer);
> +    return 0;
> +}
> +
> +int WINAPI wglReleasePbufferDCARB(HPBUFFERARB hPbuffer, HDC hdc)
> +{
> +    TRACE("(%p, %p)\n", hPbuffer, hdc);
> +    return 0;
> +}
> +
> +GLboolean WINAPI wglDestroyPbufferARB(HPBUFFERARB hPbuffer)
> +{
> +    TRACE("(%p)\n", hPbuffer);
> +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAttribute,
> int *piValue) +{
> +    TRACE("(%p, %d, %p)\n", hPbuffer, iAttribute, piValue);
> +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
> +{
> +    TRACE("(%p, %d)\n", hPbuffer, iBuffer);
> +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglReleaseTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
> +{
> +    TRACE("(%p, %d)\n", hPbuffer, iBuffer);
> +    return GL_TRUE;
> +}
> +
> +GLboolean WINAPI wglSetPbufferAttribARB(HPBUFFERARB hPbuffer, const int
> *piAttribList) +{
> +    TRACE("(%p, %p)\n", hPbuffer, piAttribList);
> +    return GL_TRUE;
> +}
> +
>  /* Putting this at the end to prevent having to write the prototypes :-)
> */ WGL_extension wgl_extension_registry[] = {
>      { "wglGetExtensionsStringARB", (void *) wglGetExtensionsStringARB,
> NULL, NULL}, { "wglGetExtensionsStringEXT", (void *)
> wglGetExtensionsStringEXT, NULL, NULL}, { "wglGetSwapIntervalEXT", (void *)
> wglSwapIntervalEXT, NULL, NULL}, -    { "wglSwapIntervalEXT", (void *)
> wglSwapIntervalEXT, NULL, NULL} +    { "wglSwapIntervalEXT", (void *)
> wglSwapIntervalEXT, NULL, NULL}, +    { "wglGetPixelFormatAttribivARB",
> (void *) wglGetPixelFormatAttribivARB, NULL, NULL}, +    {
> "wglGetPixelFormatAttribfvARB", (void *) wglGetPixelFormatAttribfvARB,
> NULL, NULL}, +    { "wglChoosePixelFormatARB", (void *)
> wglChoosePixelFormatARB, NULL, NULL}, +    { "wglCreatePbufferARB", (void
> *) wglCreatePbufferARB, NULL, NULL}, +    { "wglGetPbufferDCARB", (void *)
> wglGetPbufferDCARB, NULL, NULL}, +    { "wglReleasePbufferDCARB", (void *)
> wglReleasePbufferDCARB, NULL, NULL}, +    { "wglDestroyPbufferARB", (void
> *) wglDestroyPbufferARB, NULL, NULL}, +    { "wglQueryPbufferARB", (void *)
> wglQueryPbufferARB, NULL, NULL}, +    { "wglBindTexImageARB", (void *)
> wglBindTexImageARB, NULL, NULL}, +    { "wglReleaseTexImageARB", (void *)
> wglReleaseTexImageARB, NULL, NULL}, +    { "wglSetPbufferAttribARB", (void
> *) wglSetPbufferAttribARB, NULL, NULL} };
>  int wgl_extension_registry_size = sizeof(wgl_extension_registry) /
> sizeof(wgl_extension_registry[0]);
Index: wgl_ext.c
===================================================================
RCS file: /home/wine/wine/dlls/opengl32/wgl_ext.c,v
retrieving revision 1.2
diff -u -r1.2 wgl_ext.c
--- wgl_ext.c	31 Jan 2005 11:32:13 -0000	1.2
+++ wgl_ext.c	21 Feb 2005 08:32:21 -0000
@@ -42,8 +42,26 @@
 static char *WGL_extensions = NULL;
 
 /* Extensions-query functions */
-BOOL query_function_pbuffers(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
-			     const char *server_glx_extensions, const char *client_glx_extensions)
+BOOL query_function_multisample(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
+				const char *server_glx_extensions, const char *client_glx_extensions)
+{
+  return NULL != strstr("GLX_ARB_multisample", glx_extensions);
+}
+
+BOOL query_function_pbuffer(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
+			    const char *server_glx_extensions, const char *client_glx_extensions)
+{
+  return 0 <= strcmp("1.3", gl_version) || NULL != strstr("GLX_SGIX_pbuffer", glx_extensions);
+}
+
+BOOL query_function_pixel_format(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
+				 const char *server_glx_extensions, const char *client_glx_extensions)
+{
+    return FALSE;
+}
+
+BOOL query_function_render_texture(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
+				   const char *server_glx_extensions, const char *client_glx_extensions)
 {
     return FALSE;
 }
@@ -86,12 +104,90 @@
     return swap_interval;
 }
 
+typedef struct wine_glpbuffer {
+  Drawable   drawable;
+  int        pixelFormat;
+  int        width;
+  int        height;
+  int*       attribList;
+} Wine_GLPBuffer;
+
+GLboolean WINAPI wglGetPixelFormatAttribivARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues)
+{
+    TRACE("(%p, %d, %d, %d, %p, %p)\n", hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues)
+{
+    TRACE("(%p, %d, %d, %d, %p, %p)\n", hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats)
+{
+    TRACE("(%p, %p, %p, %d, %p, %p)\n", hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats);
+    return GL_TRUE;
+}
+
+#define HPBUFFERARB void *
+HPBUFFERARB WINAPI wglCreatePbufferARB(HDC hdc, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList)
+{
+    TRACE("(%p, %d, %d, %d, %p)\n", hdc, iPixelFormat, iWidth, iHeight, piAttribList);
+    return 0;
+}
+
+HDC WINAPI wglGetPbufferDCARB(HPBUFFERARB hPbuffer)
+{
+    TRACE("(%p)\n", hPbuffer);
+    return 0;
+}
+
+int WINAPI wglReleasePbufferDCARB(HPBUFFERARB hPbuffer, HDC hdc)
+{
+    TRACE("(%p, %p)\n", hPbuffer, hdc);
+    return 0;
+}
+
+GLboolean WINAPI wglDestroyPbufferARB(HPBUFFERARB hPbuffer)
+{
+    TRACE("(%p)\n", hPbuffer);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAttribute, int *piValue)
+{
+    TRACE("(%p, %d, %p)\n", hPbuffer, iAttribute, piValue);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
+{
+    TRACE("(%p, %d)\n", hPbuffer, iBuffer);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglReleaseTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
+{
+    TRACE("(%p, %d)\n", hPbuffer, iBuffer);
+    return GL_TRUE;
+}
+
+GLboolean WINAPI wglSetPbufferAttribARB(HPBUFFERARB hPbuffer, const int *piAttribList)
+{
+    TRACE("(%p, %p)\n", hPbuffer, piAttribList);
+    return GL_TRUE;
+}
+
 static const struct {
     const char *name;
     BOOL (*query_function)(const char *gl_version, const char *gl_extensions, const char *glx_extensions,
 			   const char *server_glx_extensions, const char *client_glx_extensions);
 } extension_list[] = {
-    { "WGL_ARB_pbuffer", query_function_pbuffers }
+  { "WGL_ARB_multisample", query_function_multisample },
+  { "WGL_ARB_pbuffer", query_function_pbuffer },
+  { "WGL_ARB_pixel_format" , query_function_pixel_format },
+  { "WGL_ARB_render_texture", query_function_render_texture }
 };
 
 /* Used to initialize the WGL extension string at DLL loading */
@@ -148,6 +244,17 @@
     { "wglGetExtensionsStringARB", (void *) wglGetExtensionsStringARB, NULL, NULL},
     { "wglGetExtensionsStringEXT", (void *) wglGetExtensionsStringEXT, NULL, NULL},
     { "wglGetSwapIntervalEXT", (void *) wglSwapIntervalEXT, NULL, NULL},
-    { "wglSwapIntervalEXT", (void *) wglSwapIntervalEXT, NULL, NULL}
+    { "wglSwapIntervalEXT", (void *) wglSwapIntervalEXT, NULL, NULL},
+    { "wglGetPixelFormatAttribivARB", (void *) wglGetPixelFormatAttribivARB, NULL, NULL},
+    { "wglGetPixelFormatAttribfvARB", (void *) wglGetPixelFormatAttribfvARB, NULL, NULL},
+    { "wglChoosePixelFormatARB", (void *) wglChoosePixelFormatARB, NULL, NULL},
+    { "wglCreatePbufferARB", (void *) wglCreatePbufferARB, NULL, NULL},
+    { "wglGetPbufferDCARB", (void *) wglGetPbufferDCARB, NULL, NULL},
+    { "wglReleasePbufferDCARB", (void *) wglReleasePbufferDCARB, NULL, NULL},
+    { "wglDestroyPbufferARB", (void *) wglDestroyPbufferARB, NULL, NULL},
+    { "wglQueryPbufferARB", (void *) wglQueryPbufferARB, NULL, NULL},
+    { "wglBindTexImageARB", (void *) wglBindTexImageARB, NULL, NULL},
+    { "wglReleaseTexImageARB", (void *) wglReleaseTexImageARB, NULL, NULL},
+    { "wglSetPbufferAttribARB", (void *) wglSetPbufferAttribARB, NULL, NULL}
 };
 int wgl_extension_registry_size = sizeof(wgl_extension_registry) / sizeof(wgl_extension_registry[0]);

Attachment: pgpsyDIQE8F5Y.pgp
Description: PGP signature

Reply via email to