wined3d: Link directly to opengl32.
This commit is contained in:
parent
e40b2a1b07
commit
449deda62f
|
@ -1,6 +1,6 @@
|
||||||
MODULE = wined3d.dll
|
MODULE = wined3d.dll
|
||||||
IMPORTLIB = wined3d
|
IMPORTLIB = wined3d
|
||||||
IMPORTS = uuid user32 gdi32 advapi32
|
IMPORTS = uuid opengl32 user32 gdi32 advapi32
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
arb_program_shader.c \
|
arb_program_shader.c \
|
||||||
|
|
|
@ -771,7 +771,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx)
|
||||||
backup = TRUE;
|
backup = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (backup || !pwglMakeCurrent(ctx->hdc, ctx->glCtx))
|
if (backup || !wglMakeCurrent(ctx->hdc, ctx->glCtx))
|
||||||
{
|
{
|
||||||
HDC dc;
|
HDC dc;
|
||||||
|
|
||||||
|
@ -805,7 +805,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pwglMakeCurrent(dc, ctx->glCtx))
|
if (!wglMakeCurrent(dc, ctx->glCtx))
|
||||||
{
|
{
|
||||||
ERR("Fallback to backup window (dc %p) failed too, last error %#x.\n",
|
ERR("Fallback to backup window (dc %p) failed too, last error %#x.\n",
|
||||||
dc, GetLastError());
|
dc, GetLastError());
|
||||||
|
@ -825,7 +825,7 @@ static void context_restore_gl_context(const struct wined3d_gl_info *gl_info, HD
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pwglMakeCurrent(dc, gl_ctx))
|
if (!wglMakeCurrent(dc, gl_ctx))
|
||||||
{
|
{
|
||||||
ERR("Failed to restore GL context %p on device context %p, last error %#x.\n",
|
ERR("Failed to restore GL context %p on device context %p, last error %#x.\n",
|
||||||
gl_ctx, dc, GetLastError());
|
gl_ctx, dc, GetLastError());
|
||||||
|
@ -897,8 +897,8 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int restore_pf;
|
int restore_pf;
|
||||||
|
|
||||||
restore_ctx = pwglGetCurrentContext();
|
restore_ctx = wglGetCurrentContext();
|
||||||
restore_dc = pwglGetCurrentDC();
|
restore_dc = wglGetCurrentDC();
|
||||||
restore_pf = GetPixelFormat(restore_dc);
|
restore_pf = GetPixelFormat(restore_dc);
|
||||||
|
|
||||||
if (context->valid && restore_ctx != context->glCtx)
|
if (context->valid && restore_ctx != context->glCtx)
|
||||||
|
@ -984,14 +984,14 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
|
||||||
{
|
{
|
||||||
context_restore_gl_context(gl_info, restore_dc, restore_ctx, restore_pf);
|
context_restore_gl_context(gl_info, restore_dc, restore_ctx, restore_pf);
|
||||||
}
|
}
|
||||||
else if (pwglGetCurrentContext() && !pwglMakeCurrent(NULL, NULL))
|
else if (wglGetCurrentContext() && !wglMakeCurrent(NULL, NULL))
|
||||||
{
|
{
|
||||||
ERR("Failed to disable GL context.\n");
|
ERR("Failed to disable GL context.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseDC(context->win_handle, context->hdc);
|
ReleaseDC(context->win_handle, context->hdc);
|
||||||
|
|
||||||
if (!pwglDeleteContext(context->glCtx))
|
if (!wglDeleteContext(context->glCtx))
|
||||||
{
|
{
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
ERR("wglDeleteContext(%p) failed, last error %#x.\n", context->glCtx, err);
|
ERR("wglDeleteContext(%p) failed, last error %#x.\n", context->glCtx, err);
|
||||||
|
@ -1052,10 +1052,10 @@ BOOL context_set_current(struct wined3d_context *ctx)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
ctx->current = 1;
|
ctx->current = 1;
|
||||||
}
|
}
|
||||||
else if(pwglGetCurrentContext())
|
else if(wglGetCurrentContext())
|
||||||
{
|
{
|
||||||
TRACE("Clearing current D3D context.\n");
|
TRACE("Clearing current D3D context.\n");
|
||||||
if (!pwglMakeCurrent(NULL, NULL))
|
if (!wglMakeCurrent(NULL, NULL))
|
||||||
{
|
{
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
ERR("Failed to clear current GL context, last error %#x.\n", err);
|
ERR("Failed to clear current GL context, last error %#x.\n", err);
|
||||||
|
@ -1095,14 +1095,14 @@ static void context_enter(struct wined3d_context *context)
|
||||||
if (!context->level++)
|
if (!context->level++)
|
||||||
{
|
{
|
||||||
const struct wined3d_context *current_context = context_get_current();
|
const struct wined3d_context *current_context = context_get_current();
|
||||||
HGLRC current_gl = pwglGetCurrentContext();
|
HGLRC current_gl = wglGetCurrentContext();
|
||||||
|
|
||||||
if (current_gl && (!current_context || current_context->glCtx != current_gl))
|
if (current_gl && (!current_context || current_context->glCtx != current_gl))
|
||||||
{
|
{
|
||||||
TRACE("Another GL context (%p on device context %p) is already current.\n",
|
TRACE("Another GL context (%p on device context %p) is already current.\n",
|
||||||
current_gl, pwglGetCurrentDC());
|
current_gl, wglGetCurrentDC());
|
||||||
context->restore_ctx = current_gl;
|
context->restore_ctx = current_gl;
|
||||||
context->restore_dc = pwglGetCurrentDC();
|
context->restore_dc = wglGetCurrentDC();
|
||||||
context->restore_pf = GetPixelFormat(context->restore_dc);
|
context->restore_pf = GetPixelFormat(context->restore_dc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1380,7 +1380,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ctx = pwglCreateContext(hdc)))
|
if (!(ctx = wglCreateContext(hdc)))
|
||||||
{
|
{
|
||||||
ERR("Failed to create a WGL context.\n");
|
ERR("Failed to create a WGL context.\n");
|
||||||
context_release(ret);
|
context_release(ret);
|
||||||
|
@ -1389,12 +1389,12 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
|
||||||
|
|
||||||
if (device->context_count)
|
if (device->context_count)
|
||||||
{
|
{
|
||||||
if (!pwglShareLists(device->contexts[0]->glCtx, ctx))
|
if (!wglShareLists(device->contexts[0]->glCtx, ctx))
|
||||||
{
|
{
|
||||||
ERR("wglShareLists(%p, %p) failed, last error %#x.\n",
|
ERR("wglShareLists(%p, %p) failed, last error %#x.\n",
|
||||||
device->contexts[0]->glCtx, ctx, GetLastError());
|
device->contexts[0]->glCtx, ctx, GetLastError());
|
||||||
context_release(ret);
|
context_release(ret);
|
||||||
if (!pwglDeleteContext(ctx))
|
if (!wglDeleteContext(ctx))
|
||||||
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1404,7 +1404,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
|
||||||
{
|
{
|
||||||
ERR("Failed to add the newly created context to the context list\n");
|
ERR("Failed to add the newly created context to the context list\n");
|
||||||
context_release(ret);
|
context_release(ret);
|
||||||
if (!pwglDeleteContext(ctx))
|
if (!wglDeleteContext(ctx))
|
||||||
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1439,7 +1439,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
|
||||||
ERR("Cannot activate context to set up defaults.\n");
|
ERR("Cannot activate context to set up defaults.\n");
|
||||||
device_context_remove(device, ret);
|
device_context_remove(device, ret);
|
||||||
context_release(ret);
|
context_release(ret);
|
||||||
if (!pwglDeleteContext(ctx))
|
if (!wglDeleteContext(ctx))
|
||||||
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -277,10 +277,10 @@ static void WineD3D_ReleaseFakeGLContext(const struct wined3d_fake_gl_ctx *ctx)
|
||||||
{
|
{
|
||||||
TRACE("Destroying fake GL context.\n");
|
TRACE("Destroying fake GL context.\n");
|
||||||
|
|
||||||
if (!pwglMakeCurrent(NULL, NULL))
|
if (!wglMakeCurrent(NULL, NULL))
|
||||||
ERR("Failed to disable fake GL context.\n");
|
ERR("Failed to disable fake GL context.\n");
|
||||||
|
|
||||||
if (!pwglDeleteContext(ctx->gl_ctx))
|
if (!wglDeleteContext(ctx->gl_ctx))
|
||||||
{
|
{
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx->gl_ctx, err);
|
ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx->gl_ctx, err);
|
||||||
|
@ -289,7 +289,7 @@ static void WineD3D_ReleaseFakeGLContext(const struct wined3d_fake_gl_ctx *ctx)
|
||||||
ReleaseDC(ctx->wnd, ctx->dc);
|
ReleaseDC(ctx->wnd, ctx->dc);
|
||||||
DestroyWindow(ctx->wnd);
|
DestroyWindow(ctx->wnd);
|
||||||
|
|
||||||
if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
|
if (ctx->restore_gl_ctx && !wglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
|
||||||
ERR("Failed to restore previous GL context.\n");
|
ERR("Failed to restore previous GL context.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,8 +301,8 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
|
||||||
|
|
||||||
TRACE("getting context...\n");
|
TRACE("getting context...\n");
|
||||||
|
|
||||||
ctx->restore_dc = pwglGetCurrentDC();
|
ctx->restore_dc = wglGetCurrentDC();
|
||||||
ctx->restore_gl_ctx = pwglGetCurrentContext();
|
ctx->restore_gl_ctx = wglGetCurrentContext();
|
||||||
|
|
||||||
/* We need a fake window as a hdc retrieved using GetDC(0) can't be used for much GL purposes. */
|
/* We need a fake window as a hdc retrieved using GetDC(0) can't be used for much GL purposes. */
|
||||||
ctx->wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window",
|
ctx->wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window",
|
||||||
|
@ -339,14 +339,14 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
|
||||||
SetPixelFormat(ctx->dc, iPixelFormat, &pfd);
|
SetPixelFormat(ctx->dc, iPixelFormat, &pfd);
|
||||||
|
|
||||||
/* Create a GL context. */
|
/* Create a GL context. */
|
||||||
if (!(ctx->gl_ctx = pwglCreateContext(ctx->dc)))
|
if (!(ctx->gl_ctx = wglCreateContext(ctx->dc)))
|
||||||
{
|
{
|
||||||
WARN("Failed to create default context for capabilities initialization.\n");
|
WARN("Failed to create default context for capabilities initialization.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make it the current GL context. */
|
/* Make it the current GL context. */
|
||||||
if (!pwglMakeCurrent(ctx->dc, ctx->gl_ctx))
|
if (!wglMakeCurrent(ctx->dc, ctx->gl_ctx))
|
||||||
{
|
{
|
||||||
ERR("Failed to make fake GL context current.\n");
|
ERR("Failed to make fake GL context current.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -355,13 +355,13 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (ctx->gl_ctx) pwglDeleteContext(ctx->gl_ctx);
|
if (ctx->gl_ctx) wglDeleteContext(ctx->gl_ctx);
|
||||||
ctx->gl_ctx = NULL;
|
ctx->gl_ctx = NULL;
|
||||||
if (ctx->dc) ReleaseDC(ctx->wnd, ctx->dc);
|
if (ctx->dc) ReleaseDC(ctx->wnd, ctx->dc);
|
||||||
ctx->dc = NULL;
|
ctx->dc = NULL;
|
||||||
if (ctx->wnd) DestroyWindow(ctx->wnd);
|
if (ctx->wnd) DestroyWindow(ctx->wnd);
|
||||||
ctx->wnd = NULL;
|
ctx->wnd = NULL;
|
||||||
if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
|
if (ctx->restore_gl_ctx && !wglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
|
||||||
ERR("Failed to restore previous GL context.\n");
|
ERR("Failed to restore previous GL context.\n");
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2363,7 +2363,7 @@ static void parse_extension_string(struct wined3d_gl_info *gl_info, const char *
|
||||||
|
|
||||||
static void load_gl_funcs(struct wined3d_gl_info *gl_info)
|
static void load_gl_funcs(struct wined3d_gl_info *gl_info)
|
||||||
{
|
{
|
||||||
#define USE_GL_FUNC(pfn) gl_info->gl_ops.ext.p_##pfn = (void *)pwglGetProcAddress(#pfn);
|
#define USE_GL_FUNC(pfn) gl_info->gl_ops.ext.p_##pfn = (void *)wglGetProcAddress(#pfn);
|
||||||
GL_EXT_FUNCS_GEN;
|
GL_EXT_FUNCS_GEN;
|
||||||
#undef USE_GL_FUNC
|
#undef USE_GL_FUNC
|
||||||
|
|
||||||
|
@ -2652,7 +2652,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
|
||||||
/* Now work out what GL support this card really has. */
|
/* Now work out what GL support this card really has. */
|
||||||
load_gl_funcs( gl_info );
|
load_gl_funcs( gl_info );
|
||||||
|
|
||||||
hdc = pwglGetCurrentDC();
|
hdc = wglGetCurrentDC();
|
||||||
/* Not all GL drivers might offer WGL extensions e.g. VirtualBox. */
|
/* Not all GL drivers might offer WGL extensions e.g. VirtualBox. */
|
||||||
if (GL_EXTCALL(wglGetExtensionsStringARB))
|
if (GL_EXTCALL(wglGetExtensionsStringARB))
|
||||||
WGL_Extensions = (const char *)GL_EXTCALL(wglGetExtensionsStringARB(hdc));
|
WGL_Extensions = (const char *)GL_EXTCALL(wglGetExtensionsStringARB(hdc));
|
||||||
|
@ -5436,7 +5436,6 @@ static BOOL InitAdapters(struct wined3d *wined3d)
|
||||||
{
|
{
|
||||||
struct wined3d_adapter *adapter = &wined3d->adapters[0];
|
struct wined3d_adapter *adapter = &wined3d->adapters[0];
|
||||||
struct wined3d_gl_info *gl_info = &adapter->gl_info;
|
struct wined3d_gl_info *gl_info = &adapter->gl_info;
|
||||||
static HMODULE mod_gl;
|
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
int ps_selected_mode, vs_selected_mode;
|
int ps_selected_mode, vs_selected_mode;
|
||||||
|
|
||||||
|
@ -5446,24 +5445,14 @@ static BOOL InitAdapters(struct wined3d *wined3d)
|
||||||
|
|
||||||
TRACE("Initializing adapters\n");
|
TRACE("Initializing adapters\n");
|
||||||
|
|
||||||
if(!mod_gl) {
|
|
||||||
mod_gl = LoadLibraryA("opengl32.dll");
|
|
||||||
if(!mod_gl) {
|
|
||||||
ERR("Can't load opengl32.dll!\n");
|
|
||||||
goto nogl_adapter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load WGL core functions from opengl32.dll */
|
|
||||||
#define USE_WGL_FUNC(pfn) p##pfn = (void*)GetProcAddress(mod_gl, #pfn);
|
|
||||||
WGL_FUNCS_GEN;
|
|
||||||
#undef USE_WGL_FUNC
|
|
||||||
|
|
||||||
/* Dynamically load all GL core functions */
|
/* Dynamically load all GL core functions */
|
||||||
#ifdef USE_WIN32_OPENGL
|
#ifdef USE_WIN32_OPENGL
|
||||||
|
{
|
||||||
|
HMODULE mod_gl = GetModuleHandleA("opengl32.dll");
|
||||||
#define USE_GL_FUNC(f) gl_info->gl_ops.gl.p_##f = (void *)GetProcAddress(mod_gl, #f);
|
#define USE_GL_FUNC(f) gl_info->gl_ops.gl.p_##f = (void *)GetProcAddress(mod_gl, #f);
|
||||||
ALL_WGL_FUNCS
|
ALL_WGL_FUNCS
|
||||||
#undef USE_GL_FUNC
|
#undef USE_GL_FUNC
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
/* To bypass the opengl32 thunks retrieve functions from the WGL driver instead of opengl32 */
|
/* To bypass the opengl32 thunks retrieve functions from the WGL driver instead of opengl32 */
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,24 +31,6 @@
|
||||||
void (WINE_GLAPI *glDisableWINE)(GLenum cap) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glDisableWINE)(GLenum cap) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glEnableWINE)(GLenum cap) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glEnableWINE)(GLenum cap) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* WGL functions */
|
|
||||||
HGLRC (WINAPI *pwglCreateContext)(HDC) DECLSPEC_HIDDEN;
|
|
||||||
BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
|
|
||||||
HGLRC (WINAPI *pwglGetCurrentContext)(void) DECLSPEC_HIDDEN;
|
|
||||||
HDC (WINAPI *pwglGetCurrentDC)(void) DECLSPEC_HIDDEN;
|
|
||||||
PROC (WINAPI *pwglGetProcAddress)(LPCSTR) DECLSPEC_HIDDEN;
|
|
||||||
BOOL (WINAPI *pwglMakeCurrent)(HDC, HGLRC) DECLSPEC_HIDDEN;
|
|
||||||
BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
#define WGL_FUNCS_GEN \
|
|
||||||
USE_WGL_FUNC(wglCreateContext) \
|
|
||||||
USE_WGL_FUNC(wglDeleteContext) \
|
|
||||||
USE_WGL_FUNC(wglGetCurrentContext) \
|
|
||||||
USE_WGL_FUNC(wglGetCurrentDC) \
|
|
||||||
USE_WGL_FUNC(wglGetProcAddress) \
|
|
||||||
USE_WGL_FUNC(wglMakeCurrent) \
|
|
||||||
USE_WGL_FUNC(wglShareLists)
|
|
||||||
|
|
||||||
/* OpenGL extensions. */
|
/* OpenGL extensions. */
|
||||||
enum wined3d_gl_extension
|
enum wined3d_gl_extension
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue