World Of Warcraft
Alex Woods
wine-devel at giblets.org
Sun Feb 20 10:20:57 CST 2005
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.txt
>
> 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]);
--
Alex
More information about the wine-devel
mailing list