Commit 28de0a56 authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

opengl32: Use the unixlib interface for WGL functions.

parent dceaa225
...@@ -508,6 +508,9 @@ sub needs_wrapper($$) ...@@ -508,6 +508,9 @@ sub needs_wrapper($$)
"glGetString" => 1, "glGetString" => 1,
"glGetStringi" => 1, "glGetStringi" => 1,
"wglGetCurrentReadDCARB" => 1, "wglGetCurrentReadDCARB" => 1,
"wglGetPixelFormat" => 1,
"wglGetProcAddress" => 1,
"wglSwapBuffers" => 1,
); );
my ($name, $func) = @_; my ($name, $func) = @_;
...@@ -799,6 +802,11 @@ print OUT "#include \"wingdi.h\"\n\n"; ...@@ -799,6 +802,11 @@ print OUT "#include \"wingdi.h\"\n\n";
print OUT "#include \"wine/wgl.h\"\n"; print OUT "#include \"wine/wgl.h\"\n";
print OUT "#include \"wine/unixlib.h\"\n\n"; print OUT "#include \"wine/unixlib.h\"\n\n";
foreach (sort keys %wgl_functions)
{
next if defined $manual_win_functions{$_};
print OUT generate_func_params($_, $wgl_functions{$_});
}
foreach (sort keys %norm_functions) foreach (sort keys %norm_functions)
{ {
next if defined $manual_win_functions{$_}; next if defined $manual_win_functions{$_};
...@@ -812,6 +820,11 @@ foreach (sort keys %ext_functions) ...@@ -812,6 +820,11 @@ foreach (sort keys %ext_functions)
print OUT "enum unix_funcs\n"; print OUT "enum unix_funcs\n";
print OUT "{\n"; print OUT "{\n";
foreach (sort keys %wgl_functions)
{
next if defined $manual_win_functions{$_};
printf OUT " unix_%s,\n", $_;
}
foreach (sort keys %norm_functions) foreach (sort keys %norm_functions)
{ {
next if defined $manual_win_functions{$_}; next if defined $manual_win_functions{$_};
...@@ -851,6 +864,12 @@ print OUT "#include \"opengl_ext.h\"\n\n"; ...@@ -851,6 +864,12 @@ print OUT "#include \"opengl_ext.h\"\n\n";
print OUT "#include \"wine/debug.h\"\n\n"; print OUT "#include \"wine/debug.h\"\n\n";
print OUT "WINE_DEFAULT_DEBUG_CHANNEL(opengl);\n"; print OUT "WINE_DEFAULT_DEBUG_CHANNEL(opengl);\n";
foreach (sort keys %wgl_functions)
{
next if defined $manual_win_functions{$_};
next if needs_wrapper( $_, $wgl_functions{$_} );
print OUT "\n" . generate_win_thunk($_, $wgl_functions{$_});
}
foreach (sort keys %norm_functions) foreach (sort keys %norm_functions)
{ {
next if defined $manual_win_functions{$_}; next if defined $manual_win_functions{$_};
...@@ -905,6 +924,11 @@ print OUT "#include \"wingdi.h\"\n\n"; ...@@ -905,6 +924,11 @@ print OUT "#include \"wingdi.h\"\n\n";
print OUT "#include \"unixlib.h\"\n\n"; print OUT "#include \"unixlib.h\"\n\n";
print OUT "#include \"opengl_ext.h\"\n\n"; print OUT "#include \"opengl_ext.h\"\n\n";
foreach (sort keys %wgl_functions)
{
next if defined $manual_win_functions{$_};
print OUT generate_unix_thunk($_, $wgl_functions{$_}, "wgl");
}
foreach (sort keys %norm_functions) foreach (sort keys %norm_functions)
{ {
next if defined $manual_win_functions{$_}; next if defined $manual_win_functions{$_};
...@@ -918,6 +942,11 @@ foreach (sort keys %ext_functions) ...@@ -918,6 +942,11 @@ foreach (sort keys %ext_functions)
print OUT "const unixlib_function_t __wine_unix_call_funcs[] =\n"; print OUT "const unixlib_function_t __wine_unix_call_funcs[] =\n";
print OUT "{\n"; print OUT "{\n";
foreach (sort keys %wgl_functions)
{
next if defined $manual_win_functions{$_};
printf OUT " &wgl_%s,\n", $_;
}
foreach (sort keys %norm_functions) foreach (sort keys %norm_functions)
{ {
next if defined $manual_win_functions{$_}; next if defined $manual_win_functions{$_};
......
...@@ -43,4 +43,6 @@ static inline struct opengl_funcs *get_dc_funcs( HDC hdc ) ...@@ -43,4 +43,6 @@ static inline struct opengl_funcs *get_dc_funcs( HDC hdc )
return funcs; return funcs;
} }
extern int WINAPI wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFORMATDESCRIPTOR *ppfd );
#endif /* __DLLS_OPENGL32_OPENGL_EXT_H */ #endif /* __DLLS_OPENGL32_OPENGL_EXT_H */
...@@ -17,6 +17,24 @@ ...@@ -17,6 +17,24 @@
WINE_DEFAULT_DEBUG_CHANNEL(opengl); WINE_DEFAULT_DEBUG_CHANNEL(opengl);
int WINAPI wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFORMATDESCRIPTOR *ppfd )
{
struct wglDescribePixelFormat_params args = { .hdc = hdc, .ipfd = ipfd, .cjpfd = cjpfd, .ppfd = ppfd, };
NTSTATUS status;
TRACE( "hdc %p, ipfd %d, cjpfd %u, ppfd %p\n", hdc, ipfd, cjpfd, ppfd );
if ((status = UNIX_CALL( wglDescribePixelFormat, &args ))) WARN( "wglDescribePixelFormat returned %#x\n", status );
return args.ret;
}
BOOL WINAPI wglSetPixelFormat( HDC hdc, int ipfd, const PIXELFORMATDESCRIPTOR *ppfd )
{
struct wglSetPixelFormat_params args = { .hdc = hdc, .ipfd = ipfd, .ppfd = ppfd, };
NTSTATUS status;
TRACE( "hdc %p, ipfd %d, ppfd %p\n", hdc, ipfd, ppfd );
if ((status = UNIX_CALL( wglSetPixelFormat, &args ))) WARN( "wglSetPixelFormat returned %#x\n", status );
return args.ret;
}
void WINAPI glAccum( GLenum op, GLfloat value ) void WINAPI glAccum( GLenum op, GLfloat value )
{ {
struct glAccum_params args = { .op = op, .value = value, }; struct glAccum_params args = { .op = op, .value = value, };
...@@ -13,6 +13,92 @@ ...@@ -13,6 +13,92 @@
#include "opengl_ext.h" #include "opengl_ext.h"
static NTSTATUS wgl_wglCopyContext( void *args )
{
struct wglCopyContext_params *params = args;
const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
params->ret = funcs->wgl.p_wglCopyContext( (struct wgl_context *)params->hglrcSrc, (struct wgl_context *)params->hglrcDst, params->mask );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglCreateContext( void *args )
{
struct wglCreateContext_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hDc );
if (!funcs || !funcs->wgl.p_wglCreateContext) return STATUS_NOT_IMPLEMENTED;
params->ret = (HGLRC)funcs->wgl.p_wglCreateContext( params->hDc );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglDeleteContext( void *args )
{
struct wglDeleteContext_params *params = args;
const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
params->ret = funcs->wgl.p_wglDeleteContext( (struct wgl_context *)params->oldContext );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglDescribePixelFormat( void *args )
{
struct wglDescribePixelFormat_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hdc );
if (!funcs || !funcs->wgl.p_wglDescribePixelFormat) return STATUS_NOT_IMPLEMENTED;
params->ret = funcs->wgl.p_wglDescribePixelFormat( params->hdc, params->ipfd, params->cjpfd, params->ppfd );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglGetPixelFormat( void *args )
{
struct wglGetPixelFormat_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hdc );
if (!funcs || !funcs->wgl.p_wglGetPixelFormat) return STATUS_NOT_IMPLEMENTED;
params->ret = funcs->wgl.p_wglGetPixelFormat( params->hdc );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglGetProcAddress( void *args )
{
struct wglGetProcAddress_params *params = args;
const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
params->ret = funcs->wgl.p_wglGetProcAddress( params->lpszProc );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglMakeCurrent( void *args )
{
struct wglMakeCurrent_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hDc );
if (!funcs || !funcs->wgl.p_wglMakeCurrent) return STATUS_NOT_IMPLEMENTED;
params->ret = funcs->wgl.p_wglMakeCurrent( params->hDc, (struct wgl_context *)params->newContext );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglSetPixelFormat( void *args )
{
struct wglSetPixelFormat_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hdc );
if (!funcs || !funcs->wgl.p_wglSetPixelFormat) return STATUS_NOT_IMPLEMENTED;
params->ret = funcs->wgl.p_wglSetPixelFormat( params->hdc, params->ipfd, params->ppfd );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglShareLists( void *args )
{
struct wglShareLists_params *params = args;
const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
params->ret = funcs->wgl.p_wglShareLists( (struct wgl_context *)params->hrcSrvShare, (struct wgl_context *)params->hrcSrvSource );
return STATUS_SUCCESS;
}
static NTSTATUS wgl_wglSwapBuffers( void *args )
{
struct wglSwapBuffers_params *params = args;
const struct opengl_funcs *funcs = get_dc_funcs( params->hdc );
if (!funcs || !funcs->wgl.p_wglSwapBuffers) return STATUS_NOT_IMPLEMENTED;
params->ret = funcs->wgl.p_wglSwapBuffers( params->hdc );
return STATUS_SUCCESS;
}
static NTSTATUS gl_glAccum( void *args ) static NTSTATUS gl_glAccum( void *args )
{ {
struct glAccum_params *params = args; struct glAccum_params *params = args;
...@@ -24216,6 +24302,16 @@ static NTSTATUS ext_wglSwapIntervalEXT( void *args ) ...@@ -24216,6 +24302,16 @@ static NTSTATUS ext_wglSwapIntervalEXT( void *args )
const unixlib_function_t __wine_unix_call_funcs[] = const unixlib_function_t __wine_unix_call_funcs[] =
{ {
&wgl_wglCopyContext,
&wgl_wglCreateContext,
&wgl_wglDeleteContext,
&wgl_wglDescribePixelFormat,
&wgl_wglGetPixelFormat,
&wgl_wglGetProcAddress,
&wgl_wglMakeCurrent,
&wgl_wglSetPixelFormat,
&wgl_wglShareLists,
&wgl_wglSwapBuffers,
&gl_glAccum, &gl_glAccum,
&gl_glAlphaFunc, &gl_glAlphaFunc,
&gl_glAreTexturesResident, &gl_glAreTexturesResident,
...@@ -16,6 +16,75 @@ ...@@ -16,6 +16,75 @@
#include "wine/wgl.h" #include "wine/wgl.h"
#include "wine/unixlib.h" #include "wine/unixlib.h"
struct wglCopyContext_params
{
HGLRC hglrcSrc;
HGLRC hglrcDst;
UINT mask;
BOOL ret;
};
struct wglCreateContext_params
{
HDC hDc;
HGLRC ret;
};
struct wglDeleteContext_params
{
HGLRC oldContext;
BOOL ret;
};
struct wglDescribePixelFormat_params
{
HDC hdc;
int ipfd;
UINT cjpfd;
PIXELFORMATDESCRIPTOR *ppfd;
int ret;
};
struct wglGetPixelFormat_params
{
HDC hdc;
int ret;
};
struct wglGetProcAddress_params
{
LPCSTR lpszProc;
PROC ret;
};
struct wglMakeCurrent_params
{
HDC hDc;
HGLRC newContext;
BOOL ret;
};
struct wglSetPixelFormat_params
{
HDC hdc;
int ipfd;
const PIXELFORMATDESCRIPTOR *ppfd;
BOOL ret;
};
struct wglShareLists_params
{
HGLRC hrcSrvShare;
HGLRC hrcSrvSource;
BOOL ret;
};
struct wglSwapBuffers_params
{
HDC hdc;
BOOL ret;
};
struct glAccum_params struct glAccum_params
{ {
GLenum op; GLenum op;
...@@ -22224,6 +22293,16 @@ struct wglSwapIntervalEXT_params ...@@ -22224,6 +22293,16 @@ struct wglSwapIntervalEXT_params
enum unix_funcs enum unix_funcs
{ {
unix_wglCopyContext,
unix_wglCreateContext,
unix_wglDeleteContext,
unix_wglDescribePixelFormat,
unix_wglGetPixelFormat,
unix_wglGetProcAddress,
unix_wglMakeCurrent,
unix_wglSetPixelFormat,
unix_wglShareLists,
unix_wglSwapBuffers,
unix_glAccum, unix_glAccum,
unix_glAlphaFunc, unix_glAlphaFunc,
unix_glAreTexturesResident, unix_glAreTexturesResident,
......
...@@ -442,16 +442,6 @@ HGLRC WINAPI wglGetCurrentContext(void) ...@@ -442,16 +442,6 @@ HGLRC WINAPI wglGetCurrentContext(void)
} }
/*********************************************************************** /***********************************************************************
* wglDescribePixelFormat (OPENGL32.@)
*/
INT WINAPI wglDescribePixelFormat(HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR *descr )
{
struct opengl_funcs *funcs = get_dc_funcs( hdc );
if (!funcs) return 0;
return funcs->wgl.p_wglDescribePixelFormat( hdc, format, size, descr );
}
/***********************************************************************
* wglChoosePixelFormat (OPENGL32.@) * wglChoosePixelFormat (OPENGL32.@)
*/ */
INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd) INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd)
...@@ -626,23 +616,18 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd) ...@@ -626,23 +616,18 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd)
*/ */
INT WINAPI wglGetPixelFormat(HDC hdc) INT WINAPI wglGetPixelFormat(HDC hdc)
{ {
struct opengl_funcs *funcs = get_dc_funcs( hdc ); struct wglGetPixelFormat_params args = { .hdc = hdc, };
if (!funcs) NTSTATUS status;
TRACE( "hdc %p\n", hdc );
if ((status = UNIX_CALL( wglGetPixelFormat, &args )))
{ {
WARN( "wglGetPixelFormat returned %#x\n", status );
SetLastError( ERROR_INVALID_PIXEL_FORMAT ); SetLastError( ERROR_INVALID_PIXEL_FORMAT );
return 0;
} }
return funcs->wgl.p_wglGetPixelFormat( hdc );
}
/*********************************************************************** return args.ret;
* wglSetPixelFormat(OPENGL32.@)
*/
BOOL WINAPI wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR *descr )
{
struct opengl_funcs *funcs = get_dc_funcs( hdc );
if (!funcs) return FALSE;
return funcs->wgl.p_wglSetPixelFormat( hdc, format, descr );
} }
/*********************************************************************** /***********************************************************************
...@@ -650,12 +635,11 @@ BOOL WINAPI wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR ...@@ -650,12 +635,11 @@ BOOL WINAPI wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR
*/ */
BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc ) BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc )
{ {
const struct opengl_funcs *funcs = get_dc_funcs( hdc ); struct wglSwapBuffers_params args = { .hdc = hdc, };
NTSTATUS status;
if (!funcs || !funcs->wgl.p_wglSwapBuffers) return FALSE;
if (!funcs->wgl.p_wglSwapBuffers( hdc )) return FALSE;
if (TRACE_ON(fps)) if ((status = UNIX_CALL( wglSwapBuffers, &args ))) WARN( "wglSwapBuffers returned %#x\n", status );
else if (TRACE_ON(fps))
{ {
static long prev_time, start_time; static long prev_time, start_time;
static unsigned long frames, frames_total; static unsigned long frames, frames_total;
...@@ -673,7 +657,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc ) ...@@ -673,7 +657,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc )
if (start_time == 0) start_time = time; if (start_time == 0) start_time = time;
} }
} }
return TRUE;
return args.ret;
} }
/*********************************************************************** /***********************************************************************
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment