Stefan Dösinger : wined3d: Make shader_cleanup more useful.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 12 09:23:44 CST 2007


Module: wine
Branch: master
Commit: fa97fbdcad4385d2b730bdecdaa4367337a9133f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fa97fbdcad4385d2b730bdecdaa4367337a9133f

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Thu Feb  8 22:31:01 2007 +0100

wined3d: Make shader_cleanup more useful.

---

 dlls/wined3d/arb_program_shader.c |    8 +++++---
 dlls/wined3d/baseshader.c         |    2 +-
 dlls/wined3d/glsl_shader.c        |    6 ++++--
 dlls/wined3d/wined3d_private.h    |    2 +-
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 3e4e38a..e6f9510 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -986,9 +986,11 @@ static void shader_arb_select_depth_blt(
     glEnable(GL_FRAGMENT_PROGRAM_ARB);
 }
 
-static void shader_arb_cleanup(BOOL usePS, BOOL useVS) {
-    if (useVS) glDisable(GL_VERTEX_PROGRAM_ARB);
-    if (usePS) glDisable(GL_FRAGMENT_PROGRAM_ARB);
+static void shader_arb_cleanup(IWineD3DDevice *iface) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    WineD3D_GL_Info *gl_info = &((IWineD3DImpl *)(This->wineD3D))->gl_info;
+    if (GL_SUPPORT(ARB_VERTEX_PROGRAM)) glDisable(GL_VERTEX_PROGRAM_ARB);
+    if (GL_SUPPORT(ARB_FRAGMENT_PROGRAM)) glDisable(GL_FRAGMENT_PROGRAM_ARB);
 }
 
 const shader_backend_t arb_program_shader_backend = {
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 6949be1..8428b47 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -980,7 +980,7 @@ void shader_delete_constant_list(
 static void shader_none_select(IWineD3DDevice *iface, BOOL usePS, BOOL useVS) {}
 static void shader_none_select_depth_blt(IWineD3DDevice *iface) {}
 static void shader_none_load_constants(IWineD3DDevice *iface, char usePS, char useVS) {}
-static void shader_none_cleanup(BOOL usePS, BOOL useVS) {}
+static void shader_none_cleanup(IWineD3DDevice *iface) {}
 
 const shader_backend_t none_shader_backend = {
     &shader_none_select,
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 5fd6c5a..30d0e52 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2161,8 +2161,10 @@ static void shader_glsl_select_depth_blt
     GL_EXTCALL(glUniform1iARB(loc, 0));
 }
 
-static void shader_glsl_cleanup(BOOL usePS, BOOL useVS) {
-    /* Nothing to do */
+static void shader_glsl_cleanup(IWineD3DDevice *iface) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    WineD3D_GL_Info *gl_info = &((IWineD3DImpl *)(This->wineD3D))->gl_info;
+    GL_EXTCALL(glUseProgramObjectARB(0));
 }
 
 const shader_backend_t glsl_shader_backend = {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index c1c36b0..0008834 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -177,7 +177,7 @@ typedef struct {
     void (*shader_select)(IWineD3DDevice *iface, BOOL usePS, BOOL useVS);
     void (*shader_select_depth_blt)(IWineD3DDevice *iface);
     void (*shader_load_constants)(IWineD3DDevice *iface, char usePS, char useVS);
-    void (*shader_cleanup)(BOOL usePS, BOOL useVS);
+    void (*shader_cleanup)(IWineD3DDevice *iface);
 } shader_backend_t;
 
 extern const shader_backend_t glsl_shader_backend;




More information about the wine-cvs mailing list