mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-25 05:34:27 +00:00
Bugfix: Triangle AA at low resolutions.
svn-id: r33047
This commit is contained in:
parent
e7e7ff9b34
commit
23101e3dee
@ -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,13 +665,26 @@ 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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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>"
|
||||
|
Loading…
x
Reference in New Issue
Block a user