Author: sir_richard Date: Thu Mar 11 22:41:19 2010 New Revision: 46117
URL: http://svn.reactos.org/svn/reactos?rev=46117&view=rev Log: [WIN32K]: Enable the alignment code and reduce the number of hacks, leaving only one for 1bpp top-down output (Freetype?) which doesn't seem to like when the lDelta is aligned to the correct bit-boundary. This should fix the crashes and graphic cltches recently introduced.
Modified: trunk/reactos/subsystems/win32/win32k/eng/surface.c
Modified: trunk/reactos/subsystems/win32/win32k/eng/surface.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/eng/surface.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/eng/surface.c [iso-8859-1] Thu Mar 11 22:41:19 2010 @@ -475,27 +475,27 @@ switch (BitmapInfo->Format) { case BMF_1BPP: - //ScanLine = ((BitmapInfo->Width + 31) & ~31) / 8; + ScanLine = ((BitmapInfo->Width + 31) & ~31) >> 3; break;
case BMF_4BPP: - //ScanLine = ((BitmapInfo->Width + 7) & ~7) / 2; + ScanLine = ((BitmapInfo->Width + 7) & ~7) >> 1; break;
case BMF_8BPP: - //ScanLine = ((BitmapInfo->Width + 3) & ~3); + ScanLine = (BitmapInfo->Width + 3) & ~3; break;
case BMF_16BPP: - //ScanLine = ((BitmapInfo->Width + 1) & ~1) * 2; + ScanLine = ((BitmapInfo->Width + 1) & ~1) << 1; break;
case BMF_24BPP: - //ScanLine = ((BitmapInfo->Width * 3) + 3) & ~3; + ScanLine = ((BitmapInfo->Width * 3) + 3) & ~3; break;
case BMF_32BPP: - // ScanLine = BitmapInfo->Width * 4; + ScanLine = BitmapInfo->Width << 2; break;
case BMF_8RLE: @@ -509,8 +509,6 @@ DPRINT1("Invalid bitmap format\n"); return NULL; } - - ScanLine = BitmapInfo->Width;
/* Does the device manage its own surface? */ if (!Bits) @@ -604,6 +602,9 @@ /* For topdown, the base address starts with the bits */ pso->pvScan0 = pso->pvBits; pso->lDelta = ScanLine; + + /* Hack for FreeType/Font Rendering, cannot use the Aligned ScanLine */ + if (BitmapInfo->Format == BMF_1BPP) pso->lDelta = BitmapInfo->Width / 8; } else { @@ -669,7 +670,6 @@ */ if ((Bits) && (Width)) { - #if 0 switch (BitmapInfo.Format) { /* Do the conversion for each bit depth we support */ @@ -692,9 +692,6 @@ BitmapInfo.Width = Width / 4; break; } -#endif - BitmapInfo.Width = Width; - }
/* Now create the surface */