Henri Verbeet : wined3d: Move the "dummy_arbfp_prog" field from struct wined3d_context to struct wined3d_context_gl.

Alexandre Julliard julliard at winehq.org
Wed May 8 18:22:47 CDT 2019


Module: wine
Branch: master
Commit: 3d2b82a257493de36e922bb18f3d43dc2600f479
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3d2b82a257493de36e922bb18f3d43dc2600f479

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed May  8 18:09:35 2019 +0430

wined3d: Move the "dummy_arbfp_prog" field from struct wined3d_context to struct wined3d_context_gl.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/context.c         | 33 ++++++++++++++++++++++++++-------
 dlls/wined3d/wined3d_private.h |  3 ++-
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 1a45eca..eb64f14 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1398,11 +1398,6 @@ void wined3d_context_cleanup(struct wined3d_context *context)
 
     if (context->valid)
     {
-        if (context->dummy_arbfp_prog)
-        {
-            GL_EXTCALL(glDeleteProgramsARB(1, &context->dummy_arbfp_prog));
-        }
-
         if (gl_info->supported[WINED3D_GL_PRIMITIVE_QUERY])
         {
             for (i = 0; i < context->free_so_statistics_query_count; ++i)
@@ -1482,8 +1477,32 @@ void wined3d_context_cleanup(struct wined3d_context *context)
 
 void wined3d_context_gl_cleanup(struct wined3d_context_gl *context_gl)
 {
+    const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
+    HGLRC restore_ctx;
+    HDC restore_dc;
+
+    restore_ctx = wglGetCurrentContext();
+    restore_dc = wglGetCurrentDC();
+
+    if (restore_ctx == context_gl->c.glCtx)
+        restore_ctx = NULL;
+    else if (context_gl->c.valid)
+        context_set_gl_context(&context_gl->c);
+
+    if (context_gl->c.valid)
+    {
+        if (context_gl->dummy_arbfp_prog)
+            GL_EXTCALL(glDeleteProgramsARB(1, &context_gl->dummy_arbfp_prog));
+
+        checkGLcall("context cleanup");
+    }
+
     heap_free(context_gl->texture_type);
 
+    context_restore_pixel_format(&context_gl->c);
+    if (restore_ctx)
+        context_restore_gl_context(gl_info, restore_dc, restore_ctx);
+
     wined3d_context_cleanup(&context_gl->c);
 }
 
@@ -2232,8 +2251,8 @@ HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl, struct wi
                 "!!ARBfp1.0\n"
                 "MOV result.color, fragment.color.primary;\n"
                 "END\n";
-        GL_EXTCALL(glGenProgramsARB(1, &context->dummy_arbfp_prog));
-        GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, context->dummy_arbfp_prog));
+        GL_EXTCALL(glGenProgramsARB(1, &context_gl->dummy_arbfp_prog));
+        GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, context_gl->dummy_arbfp_prog));
         GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB,
                 GL_PROGRAM_FORMAT_ASCII_ARB, strlen(dummy_program), dummy_program));
     }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b8edf68..b649a47 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2023,7 +2023,6 @@ struct wined3d_context
     GLint                   gl_fog_source;
     GLfloat                 fog_coord_value;
     GLfloat                 color[4], fogstart, fogend, fogcolor[4];
-    GLuint                  dummy_arbfp_prog;
 
     unsigned int viewport_count;
     unsigned int scissor_rect_count;
@@ -2039,6 +2038,8 @@ struct wined3d_context_gl
     struct wined3d_context c;
 
     GLenum *texture_type;
+
+    GLuint dummy_arbfp_prog;
 };
 
 static inline struct wined3d_context_gl *wined3d_context_gl(struct wined3d_context *context)




More information about the wine-cvs mailing list