mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 08:54:05 +00:00
opengl32: Use the unixlib interface for WGL functions.
This commit is contained in:
parent
dceaa225cd
commit
28de0a56ae
|
@ -508,6 +508,9 @@ sub needs_wrapper($$)
|
|||
"glGetString" => 1,
|
||||
"glGetStringi" => 1,
|
||||
"wglGetCurrentReadDCARB" => 1,
|
||||
"wglGetPixelFormat" => 1,
|
||||
"wglGetProcAddress" => 1,
|
||||
"wglSwapBuffers" => 1,
|
||||
);
|
||||
my ($name, $func) = @_;
|
||||
|
||||
|
@ -799,6 +802,11 @@ print OUT "#include \"wingdi.h\"\n\n";
|
|||
print OUT "#include \"wine/wgl.h\"\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)
|
||||
{
|
||||
next if defined $manual_win_functions{$_};
|
||||
|
@ -812,6 +820,11 @@ foreach (sort keys %ext_functions)
|
|||
|
||||
print OUT "enum unix_funcs\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)
|
||||
{
|
||||
next if defined $manual_win_functions{$_};
|
||||
|
@ -851,6 +864,12 @@ print OUT "#include \"opengl_ext.h\"\n\n";
|
|||
print OUT "#include \"wine/debug.h\"\n\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)
|
||||
{
|
||||
next if defined $manual_win_functions{$_};
|
||||
|
@ -905,6 +924,11 @@ print OUT "#include \"wingdi.h\"\n\n";
|
|||
print OUT "#include \"unixlib.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)
|
||||
{
|
||||
next if defined $manual_win_functions{$_};
|
||||
|
@ -918,6 +942,11 @@ foreach (sort keys %ext_functions)
|
|||
|
||||
print OUT "const unixlib_function_t __wine_unix_call_funcs[] =\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)
|
||||
{
|
||||
next if defined $manual_win_functions{$_};
|
||||
|
|
|
@ -43,4 +43,6 @@ static inline struct opengl_funcs *get_dc_funcs( HDC hdc )
|
|||
return funcs;
|
||||
}
|
||||
|
||||
extern int WINAPI wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFORMATDESCRIPTOR *ppfd );
|
||||
|
||||
#endif /* __DLLS_OPENGL32_OPENGL_EXT_H */
|
||||
|
|
|
@ -17,6 +17,24 @@
|
|||
|
||||
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 )
|
||||
{
|
||||
struct glAccum_params args = { .op = op, .value = value, };
|
||||
|
|
|
@ -13,6 +13,92 @@
|
|||
|
||||
#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 )
|
||||
{
|
||||
struct glAccum_params *params = args;
|
||||
|
@ -24216,6 +24302,16 @@ static NTSTATUS ext_wglSwapIntervalEXT( void *args )
|
|||
|
||||
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_glAlphaFunc,
|
||||
&gl_glAreTexturesResident,
|
||||
|
|
|
@ -16,6 +16,75 @@
|
|||
#include "wine/wgl.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
|
||||
{
|
||||
GLenum op;
|
||||
|
@ -22224,6 +22293,16 @@ struct wglSwapIntervalEXT_params
|
|||
|
||||
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_glAlphaFunc,
|
||||
unix_glAreTexturesResident,
|
||||
|
|
|
@ -441,16 +441,6 @@ HGLRC WINAPI wglGetCurrentContext(void)
|
|||
return NtCurrentTeb()->glCurrentRC;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* 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.@)
|
||||
*/
|
||||
|
@ -626,23 +616,18 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd)
|
|||
*/
|
||||
INT WINAPI wglGetPixelFormat(HDC hdc)
|
||||
{
|
||||
struct opengl_funcs *funcs = get_dc_funcs( hdc );
|
||||
if (!funcs)
|
||||
{
|
||||
SetLastError( ERROR_INVALID_PIXEL_FORMAT );
|
||||
return 0;
|
||||
}
|
||||
return funcs->wgl.p_wglGetPixelFormat( hdc );
|
||||
}
|
||||
struct wglGetPixelFormat_params args = { .hdc = hdc, };
|
||||
NTSTATUS status;
|
||||
|
||||
/***********************************************************************
|
||||
* 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 );
|
||||
TRACE( "hdc %p\n", hdc );
|
||||
|
||||
if ((status = UNIX_CALL( wglGetPixelFormat, &args )))
|
||||
{
|
||||
WARN( "wglGetPixelFormat returned %#x\n", status );
|
||||
SetLastError( ERROR_INVALID_PIXEL_FORMAT );
|
||||
}
|
||||
|
||||
return args.ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -650,12 +635,11 @@ BOOL WINAPI wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR
|
|||
*/
|
||||
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 unsigned long frames, frames_total;
|
||||
|
@ -673,7 +657,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc )
|
|||
if (start_time == 0) start_time = time;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
return args.ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
Loading…
Reference in a new issue