diff options
author | Vicent Marti | 2008-07-13 22:25:11 +0000 |
---|---|---|
committer | Vicent Marti | 2008-07-13 22:25:11 +0000 |
commit | 23101e3dee59ee6f1e8604a06985a683b81acaf6 (patch) | |
tree | fbfb5fdea069d72041a2eda0f80c6ae2d9d57145 | |
parent | e7e7ff9b344356c0a9ffed2998b597328eb1331f (diff) | |
download | scummvm-rg350-23101e3dee59ee6f1e8604a06985a683b81acaf6.tar.gz scummvm-rg350-23101e3dee59ee6f1e8604a06985a683b81acaf6.tar.bz2 scummvm-rg350-23101e3dee59ee6f1e8604a06985a683b81acaf6.zip |
Bugfix: Triangle AA at low resolutions.
svn-id: r33047
-rw-r--r-- | graphics/VectorRenderer.cpp | 42 | ||||
-rw-r--r-- | gui/ThemeDefaultXML.cpp | 4 |
2 files changed, 34 insertions, 12 deletions
diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index 19a4f75058..b5722c2f64 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -33,6 +33,8 @@ #include "gui/ThemeRenderer.h" #include "graphics/VectorRenderer.h" +#define VECTOR_RENDERER_FAST_TRIANGLES + namespace Graphics { VectorRenderer *createRenderer(int mode) { @@ -391,6 +393,12 @@ drawRoundedSquare(int x, int y, int r, int w, int h) { template<typename PixelType, typename PixelFormat> void VectorRendererSpec<PixelType, PixelFormat>:: drawTriangle(int x, int y, int w, int h, TriangleOrientation orient) { + // Awesome hack: the AA messes up the last pixel triangles if their width is even + // ...fix the width instead of fixing the AA :p + if (w % 2 == 0) { + w++; h++; + } + if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h) return; @@ -643,7 +651,8 @@ template<typename PixelType, typename PixelFormat> void VectorRendererSpec<PixelType,PixelFormat>:: drawTriangleFast(int x1, int y1, int size, bool inverted, PixelType color, VectorRenderer::FillMode fill_m) { int pitch = Base::surfacePitch(); - int hstep = 0; + int hstep = 0, dy = size; + bool grad = (fill_m == kFillGradient); PixelType *ptr_right = 0, *ptr_left = 0; @@ -656,15 +665,28 @@ drawTriangleFast(int x1, int y1, int size, bool inverted, PixelType color, Vecto pitch = -pitch; } - while (ptr_left != ptr_right) { - colorFill(ptr_left, ptr_right, color); - ptr_left += pitch; - ptr_right += pitch; - if (hstep++ % 3) { - ptr_left++; - ptr_right--; - } - } + if (fill_m == kFillDisabled) { + while (ptr_left < ptr_right) { + *ptr_left = color; + *ptr_right = color; + ptr_left += pitch; + ptr_right += pitch; + if (hstep++ % 2) { + ptr_left++; + ptr_right--; + } + } + } else { + while (ptr_left < ptr_right) { + colorFill(ptr_left, ptr_right, grad ? calcGradient(dy--, size) : color); + ptr_left += pitch; + ptr_right += pitch; + if (hstep++ % 2) { + ptr_left++; + ptr_right--; + } + } + } } /** ROUNDED SQUARE ALGORITHM **/ diff --git a/gui/ThemeDefaultXML.cpp b/gui/ThemeDefaultXML.cpp index be2a9df8b6..dc26920b48 100644 --- a/gui/ThemeDefaultXML.cpp +++ b/gui/ThemeDefaultXML.cpp @@ -70,12 +70,12 @@ bool ThemeRenderer::loadDefaultXML() { "</drawdata>" "<drawdata id = 'checkbox_disabled' cache = false>" - "<text vertical_align = 'top' horizontal_align = 'left' color = '255, 255, 255' />" + "<text vertical_align = 'top' horizontal_align = 'left' color = '0,0,0' />" "<drawstep func = 'square' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' shadow = 0 />" "</drawdata>" "<drawdata id = 'checkbox_enabled' cache = false>" - "<text vertical_align = 'top' horizontal_align = 'left' color = '255, 255, 255' />" + "<text vertical_align = 'top' horizontal_align = 'left' color = '0,0,0' />" "<drawstep func = 'square' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' shadow = 0 />" "<drawstep func = 'circle' radius = 'auto' fill = 'foreground' />" "</drawdata>" |