Roderick Colenbrander : wined3d: Surface pitch fix.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 10 04:43:13 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 2628627e79d13d9f63187444b04ad90fe58fe76b
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=2628627e79d13d9f63187444b04ad90fe58fe76b

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Wed Aug  9 22:45:59 2006 +0200

wined3d: Surface pitch fix.

---

 dlls/wined3d/surface.c |   31 +++++++++++++------------------
 1 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index ababe56..f7b73b6 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -1858,6 +1858,7 @@ static HRESULT WINAPI IWineD3DSurfaceImp
         GLenum format, internal, type;
         CONVERT_TYPES convert;
         int bpp;
+        int pitch;
         BYTE *mem;
 
         if(This->CKeyFlags & DDSD_CKSRCBLT) { 
@@ -1867,45 +1868,39 @@ static HRESULT WINAPI IWineD3DSurfaceImp
         else This->Flags &= ~SFLAG_GLCKEY;
         d3dfmt_get_conv(This, TRUE /* We need color keying */, TRUE /* We will use textures */, &format, &internal, &type, &convert, &bpp);
 
+        /* The pitch is in 'length' not in bytes */
+        if (NP2_REPACK == wined3d_settings.nonpower2_mode || This->resource.usage & WINED3DUSAGE_RENDERTARGET)
+            pitch = This->currentDesc.Width;
+        else
+            pitch = This->pow2Width;
+
         if((convert != NO_CONVERSION) && This->resource.allocatedMemory) {
             int height = This->glRect.bottom - This->glRect.top;
-            int pitch;
-
-            /* Set the pitch in 'length' not in bytes */
-            if (NP2_REPACK == wined3d_settings.nonpower2_mode || This->resource.usage & WINED3DUSAGE_RENDERTARGET)
-                pitch = This->currentDesc.Width;
-            else
-                pitch = This->pow2Width;
 
             mem = HeapAlloc(GetProcessHeap(), 0, pitch * height * bpp);
             if(!mem) {
                 ERR("Out of memory %d, %d!\n", pitch, height);
                 return WINED3DERR_OUTOFVIDEOMEMORY;
             }
-
             d3dfmt_convert_surface(This->resource.allocatedMemory,
                                     mem,
                                     pitch*height,
                                     convert,
                                     This);
-            /* Make sure the correct pitch is used */
-            glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch);
 
             This->Flags |= SFLAG_CONVERTED;
         } else if(This->resource.format == WINED3DFMT_P8 && GL_SUPPORT(EXT_PALETTED_TEXTURE)) {
-                int pitch = IWineD3DSurface_GetPitch(iface);
-                d3dfmt_p8_upload_palette(iface, convert);
-
-                /* Make sure the correct pitch is used */
-                glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch);
-
-                This->Flags &= ~SFLAG_CONVERTED;
-                mem = This->resource.allocatedMemory;
+            d3dfmt_p8_upload_palette(iface, convert);
+            This->Flags &= ~SFLAG_CONVERTED;
+            mem = This->resource.allocatedMemory;
         } else {
             This->Flags &= ~SFLAG_CONVERTED;
             mem = This->resource.allocatedMemory;
         }
 
+        /* Make sure the correct pitch is used */
+        glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch);
+
        /* TODO: possibly use texture rectangle (though we are probably more compatible without it) */
         if (NP2_REPACK == wined3d_settings.nonpower2_mode && (This->Flags & SFLAG_NONPOW2) && !(This->Flags & SFLAG_OVERSIZE) ) {
 




More information about the wine-cvs mailing list