Roderick Colenbrander : wined3d: Use draw_textured_quad in BltOverride.

Alexandre Julliard julliard at winehq.org
Fri Mar 19 11:16:39 CDT 2010


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

Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date:   Thu Mar 18 22:03:27 2010 +0100

wined3d: Use draw_textured_quad in BltOverride.

---

 dlls/wined3d/surface.c         |   46 +------------------------------------
 dlls/wined3d/utils.c           |   50 ----------------------------------------
 dlls/wined3d/wined3d_private.h |    2 -
 3 files changed, 1 insertions(+), 97 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index c24a5e4..acc24e5 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -3964,7 +3964,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
         return WINED3D_OK;
     } else if(Src) {
         /* Blit from offscreen surface to render target */
-        float glTexCoord[4];
         DWORD oldCKeyFlags = Src->CKeyFlags;
         WINEDDCOLORKEY oldBltCKey = Src->SrcBltCKey;
         struct wined3d_context *context;
@@ -4014,14 +4013,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
             return WINED3D_OK;
         }
 
-        if(!CalculateTexRect(Src, &SourceRectangle, glTexCoord)) {
-            /* Fall back to software */
-            WARN("(%p) Source texture area (%d,%d)-(%d,%d) is too big\n", Src,
-                    SourceRectangle.left, SourceRectangle.top,
-                    SourceRectangle.right, SourceRectangle.bottom);
-            return WINED3DERR_INVALIDCALL;
-        }
-
         /* Color keying: Check if we have to do a color keyed blt,
          * and if not check if a color key is activated.
          *
@@ -4083,22 +4074,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
 
         ENTER_GL();
 
-        /* Bind the texture */
-        glBindTexture(Src->texture_target, Src->texture_name);
-        checkGLcall("glBindTexture");
-
-        /* Filtering for StretchRect */
-        glTexParameteri(Src->texture_target, GL_TEXTURE_MAG_FILTER,
-                wined3d_gl_mag_filter(magLookup, Filter));
-        checkGLcall("glTexParameteri");
-        glTexParameteri(Src->texture_target, GL_TEXTURE_MIN_FILTER,
-                wined3d_gl_min_mip_filter(minMipLookup, Filter, WINED3DTEXF_NONE));
-        checkGLcall("glTexParameteri");
-        glTexParameteri(Src->texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP);
-        glTexParameteri(Src->texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP);
-        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-        checkGLcall("glTexEnvi");
-
         /* This is for color keying */
         if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
             glEnable(GL_ALPHA_TEST);
@@ -4119,32 +4094,13 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
 
         /* Draw a textured quad
          */
-        glBegin(GL_QUADS);
-
-        glColor3f(1.0f, 1.0f, 1.0f);
-        glTexCoord2f(glTexCoord[0], glTexCoord[2]);
-        glVertex3f(rect.x1, rect.y1, 0.0f);
-
-        glTexCoord2f(glTexCoord[0], glTexCoord[3]);
-        glVertex3f(rect.x1, rect.y2, 0.0f);
-
-        glTexCoord2f(glTexCoord[1], glTexCoord[3]);
-        glVertex3f(rect.x2, rect.y2, 0.0f);
-
-        glTexCoord2f(glTexCoord[1], glTexCoord[2]);
-        glVertex3f(rect.x2, rect.y1, 0.0f);
-
-        glEnd();
-        checkGLcall("glEnd");
+        draw_textured_quad(Src, &SourceRectangle, (RECT*)&rect, Filter);
 
         if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
             glDisable(GL_ALPHA_TEST);
             checkGLcall("glDisable(GL_ALPHA_TEST)");
         }
 
-        glBindTexture(Src->texture_target, 0);
-        checkGLcall("glBindTexture(Src->texture_target, 0)");
-
         /* Restore the color key parameters */
         Src->CKeyFlags = oldCKeyFlags;
         Src->SrcBltCKey = oldBltCKey;
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 73091ff..19d5949 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -2258,56 +2258,6 @@ DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) {
     return size;
 }
 
-/***********************************************************************
- * CalculateTexRect
- *
- * Calculates the dimensions of the opengl texture used for blits.
- * Handled oversized opengl textures and updates the source rectangle
- * accordingly
- *
- * Params:
- *  This: Surface to operate on
- *  Rect: Requested rectangle
- *
- * Returns:
- *  TRUE if the texture part can be loaded,
- *  FALSE otherwise
- *
- *********************************************************************/
-BOOL CalculateTexRect(IWineD3DSurfaceImpl *This, RECT *Rect, float glTexCoord[4])
-{
-    int x1 = Rect->left, x2 = Rect->right;
-    int y1 = Rect->top, y2 = Rect->bottom;
-
-    TRACE("(%p)->(%d,%d)-(%d,%d)\n", This,
-          Rect->left, Rect->top, Rect->right, Rect->bottom);
-
-    /* The sizes might be reversed */
-    if(Rect->left > Rect->right) {
-        x1 = Rect->right;
-        x2 = Rect->left;
-    }
-    if(Rect->top > Rect->bottom) {
-        y1 = Rect->bottom;
-        y2 = Rect->top;
-    }
-
-    /* Which rect from the texture do I need? */
-    if (This->texture_target == GL_TEXTURE_RECTANGLE_ARB)
-    {
-        glTexCoord[0] = (float) Rect->left;
-        glTexCoord[2] = (float) Rect->top;
-        glTexCoord[1] = (float) Rect->right;
-        glTexCoord[3] = (float) Rect->bottom;
-    } else {
-        glTexCoord[0] = (float) Rect->left / (float) This->pow2Width;
-        glTexCoord[2] = (float) Rect->top / (float) This->pow2Height;
-        glTexCoord[1] = (float) Rect->right / (float) This->pow2Width;
-        glTexCoord[3] = (float) Rect->bottom / (float) This->pow2Height;
-    }
-    return TRUE;
-}
-
 void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_settings *settings, BOOL ignore_textype) {
 #define ARG1 0x01
 #define ARG2 0x02
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 7ac0665..091e85d 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2202,8 +2202,6 @@ void flip_surface(IWineD3DSurfaceImpl *front, IWineD3DSurfaceImpl *back) DECLSPE
                              SFLAG_DS_OFFSCREEN)
 #define SFLAG_DS_DISCARDED   SFLAG_DS_LOCATIONS
 
-BOOL CalculateTexRect(IWineD3DSurfaceImpl *This, RECT *Rect, float glTexCoord[4]) DECLSPEC_HIDDEN;
-
 typedef enum {
     NO_CONVERSION,
     CONVERT_PALETTED,




More information about the wine-cvs mailing list