Module: wine
Branch: master
Commit: f71fdecdc79177c4add5b2f02e90413ba10593da
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f71fdecdc79177c4add5b2f02…
Author: H. Verbeet <hverbeet(a)gmail.com>
Date: Tue Aug 19 17:49:07 2008 +0200
wined3d: Move creating a texture id from PreLoad to BindTexture.
This is consistent with BindTexture in basetexture/texture/etc. and has the
added benefit that it makes LoadLocation work properly.
---
dlls/wined3d/surface.c | 41 ++++++++++++++++++++++-------------------
1 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 3c56d4c..5e5303d 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -8,7 +8,7 @@
* Copyright 2004 Christian Costa
* Copyright 2005 Oliver Stieber
* Copyright 2006-2008 Stefan D�singer for CodeWeavers
- * Copyright 2007 Henri Verbeet
+ * Copyright 2007-2008 Henri Verbeet
* Copyright 2006-2008 Roderick Colenbrander
*
* This library is free software; you can redistribute it and/or
@@ -514,24 +514,9 @@ void WINAPI IWineD3DSurfaceImpl_PreLoad(IWineD3DSurface *iface) {
IWineD3DSurface_ModifyLocation(iface, SFLAG_INTEXTURE, FALSE);
}
}
- ENTER_GL();
- glEnable(This->glDescription.target);/* make sure texture support is enabled in this context */
- if (!This->glDescription.level) {
- if (!This->glDescription.textureName) {
- glGenTextures(1, &This->glDescription.textureName);
- checkGLcall("glGenTextures");
- TRACE("Surface %p given name %d\n", This, This->glDescription.textureName);
- }
- glBindTexture(This->glDescription.target, This->glDescription.textureName);
- checkGLcall("glBindTexture");
- LEAVE_GL();
- IWineD3DSurface_LoadTexture(iface, FALSE);
- /* This is where we should be reducing the amount of GLMemoryUsed */
- } else if (This->glDescription.textureName) { /* NOTE: the level 0 surface of a mpmapped texture must be loaded first! */
- /* assume this is a coding error not a real error for now */
- FIXME("Mipmap surface has a glTexture bound to it!\n");
- LEAVE_GL();
- }
+
+ IWineD3DSurface_LoadTexture(iface, FALSE);
+
if (This->resource.pool == WINED3DPOOL_DEFAULT) {
/* Tell opengl to try and keep this texture in video ram (well mostly) */
GLclampf tmp;
@@ -2361,8 +2346,26 @@ static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface) {
if(!device->isInDraw) {
ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
}
+
ENTER_GL();
+
+ glEnable(This->glDescription.target);
+
+ if (!This->glDescription.level) {
+ if (!This->glDescription.textureName) {
+ glGenTextures(1, &This->glDescription.textureName);
+ checkGLcall("glGenTextures");
+ TRACE("Surface %p given name %d\n", This, This->glDescription.textureName);
+ }
+ /* This is where we should be reducing the amount of GLMemoryUsed */
+ } else if (This->glDescription.textureName) {
+ /* Mipmap surfaces should have a base texture container */
+ ERR("Mipmap surface has a glTexture bound to it!\n");
+ }
+
glBindTexture(This->glDescription.target, This->glDescription.textureName);
+ checkGLcall("glBindTexture");
+
LEAVE_GL();
}
return;