aboutsummaryrefslogtreecommitdiff
path: root/graphics/VectorRenderer.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-05-04 13:53:22 +0000
committerVicent Marti2008-05-04 13:53:22 +0000
commit6666b93dd7bec4fcb8b1494b310fa27066c9434e (patch)
tree19b162bd250e5066410ec037d2cf5796aba9aa12 /graphics/VectorRenderer.cpp
parentd33890f110f40318542c382640f95601a44bdb54 (diff)
downloadscummvm-rg350-6666b93dd7bec4fcb8b1494b310fa27066c9434e.tar.gz
scummvm-rg350-6666b93dd7bec4fcb8b1494b310fa27066c9434e.tar.bz2
scummvm-rg350-6666b93dd7bec4fcb8b1494b310fa27066c9434e.zip
Performance tweaks.
svn-id: r31863
Diffstat (limited to 'graphics/VectorRenderer.cpp')
-rw-r--r--graphics/VectorRenderer.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp
index f62ff92092..5c58d777c1 100644
--- a/graphics/VectorRenderer.cpp
+++ b/graphics/VectorRenderer.cpp
@@ -34,7 +34,7 @@ namespace Graphics {
inline uint32 fp_sqroot(uint32 x);
VectorRenderer *createRenderer() {
- return new VectorRendererSpec<uint16, ColorMasks<565> >;
+ return new VectorRendererAA<uint16, ColorMasks<565> >;
}
@@ -58,13 +58,12 @@ void vector_renderer_test(OSystem *_system) {
_system->showOverlay();
while (true) { // draw!!
-
vr->setColor(255, 255, 255);
vr->fillSurface();
vr->setColor(255, 0, 0 );
vr->drawLine(25, 25, 125, 300);
vr->drawCircle(250, 250, 100);
- vr->drawSquare(150, 150, 100, 100, false);
+ vr->drawSquare(150, 25, 100, 100, true);
_system->copyRectToOverlay((OverlayColor*)_screen.getBasePtr(0, 0), _screen.w, 0, 0, _screen.w, _screen.w);
_system->updateScreen();
_system->delayMillis(100);
@@ -167,6 +166,7 @@ drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy) {
int pitch = Base::surfacePitch();
int xdir = (x2 > x1) ? 1 : -1;
uint16 error_tmp, error_acc, gradient;
+ uint8 alpha;
*ptr = (PixelType)Base::_color;
@@ -182,9 +182,10 @@ drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy) {
ptr += pitch;
ptr += xdir;
+ alpha = (error_acc >> 8);
- blendPixelPtr(ptr, (error_acc >> 8) ^ 0xFF);
- blendPixelPtr(ptr + pitch, (error_acc >> 8) & 0xFF);
+ blendPixelPtr(ptr, ~alpha);
+ blendPixelPtr(ptr + pitch, alpha);
}
} else {
gradient = (uint32)(dx << 16) / (uint32)dy;
@@ -198,9 +199,10 @@ drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy) {
ptr += xdir;
ptr += pitch;
+ alpha = (error_acc >> 8);
- blendPixelPtr(ptr, (error_acc >> 8) ^ 0xFF);
- blendPixelPtr(ptr + xdir, (error_acc >> 8) & 0xFF);
+ blendPixelPtr(ptr, ~alpha);
+ blendPixelPtr(ptr + xdir, alpha);
}
}
@@ -264,7 +266,7 @@ inline uint32 fp_sqroot(uint32 x) {
remHI = (remHI << 2) | (remLO >> 30);
remLO <<= 2;
root <<= 1;
- testDIV = (root <<1 ) + 1;
+ testDIV = (root << 1 ) + 1;
if (remHI >= testDIV) {
remHI -= testDIV;
@@ -330,6 +332,7 @@ drawCircleAlg(int x1, int y1, int r) {
int y = 0;
uint32 rsq = (r * r) << 16;
uint32 T = 0, oldT;
+ uint8 a1, a2;
__WU_CIRCLE_SIM(x, y, 255);
@@ -341,8 +344,11 @@ drawCircleAlg(int x1, int y1, int r) {
if (T < oldT)
x--;
- __WU_CIRCLE_SIM(x, y, (T >> 8) ^ 0xFF);
- __WU_CIRCLE_SIM(x-1, y, (T >> 8) & 0xFF);
+ a2 = (T >> 8);
+ a1 = ~a2;
+
+ __WU_CIRCLE_SIM(x, y, a1);
+ __WU_CIRCLE_SIM(x-1, y, a2);
}
}