changeset 9486:66778a3336d0 draft

(svn r13445) -Codechange: make 32bpp_optimized blitter ~10-20% faster in drawing (depends on architecture and compiler)
author smatz <smatz@openttd.org>
date Tue, 10 Jun 2008 17:28:37 +0000
parents 963b653e2e61
children c148370ca217
files src/blitter/32bpp_optimized.cpp src/blitter/32bpp_optimized.hpp
diffstat 2 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/blitter/32bpp_optimized.cpp
+++ b/src/blitter/32bpp_optimized.cpp
@@ -10,7 +10,7 @@
 
 static FBlitter_32bppOptimized iFBlitter_32bppOptimized;
 
-void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+template <BlitterMode mode, ZoomLevel zoom> inline void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp)
 {
 	const SpriteLoader::CommonPixel *src, *src_line;
 	uint32 *dst, *dst_line;
@@ -66,6 +66,27 @@
 	}
 }
 
+template <BlitterMode mode> inline void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, ZoomLevel zoom)
+{
+	switch (zoom) {
+		default: NOT_REACHED();
+		case ZOOM_LVL_NORMAL: Draw<mode, ZOOM_LVL_NORMAL>(bp); return;
+		case ZOOM_LVL_OUT_2X: Draw<mode, ZOOM_LVL_OUT_2X>(bp); return;
+		case ZOOM_LVL_OUT_4X: Draw<mode, ZOOM_LVL_OUT_4X>(bp); return;
+		case ZOOM_LVL_OUT_8X: Draw<mode, ZOOM_LVL_OUT_8X>(bp); return;
+	}
+}
+
+void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+	switch (mode) {
+		default: NOT_REACHED();
+		case BM_NORMAL:       Draw<BM_NORMAL>      (bp, zoom); return;
+		case BM_COLOUR_REMAP: Draw<BM_COLOUR_REMAP>(bp, zoom); return;
+		case BM_TRANSPARENT:  Draw<BM_TRANSPARENT> (bp, zoom); return;
+	}
+}
+
 Sprite *Blitter_32bppOptimized::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
 {
 	Sprite *dest_sprite;
--- a/src/blitter/32bpp_optimized.hpp
+++ b/src/blitter/32bpp_optimized.hpp
@@ -14,6 +14,9 @@
 	/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
 
 	/* virtual */ const char *GetName() { return "32bpp-optimized"; }
+
+	template <BlitterMode mode, ZoomLevel zoom> void Draw(Blitter::BlitterParams *bp);
+	template <BlitterMode mode> void Draw(Blitter::BlitterParams *bp, ZoomLevel zoom);
 };
 
 class FBlitter_32bppOptimized: public BlitterFactory<FBlitter_32bppOptimized> {