OSDN Git Service

refs #2
authorMandhelingFreak <mandheling30-freak@yahoo.co.jp>
Fri, 7 Feb 2014 12:10:49 +0000 (21:10 +0900)
committerMandhelingFreak <mandheling30-freak@yahoo.co.jp>
Fri, 7 Feb 2014 12:14:31 +0000 (21:14 +0900)
縮小画像をキャッシュすることで描画不可を軽減。根治ではない。

GVONavish/GVONavish/GVOWorldMap.cpp
GVONavish/GVONavish/GVOWorldMap.h

index 01af5e9..fedd429 100644 (file)
@@ -118,23 +118,27 @@ bool GVOWorldMap::zoomOut()
 
 void GVOWorldMap::drawMap( HDC hdc, const GVOShip& ship )
 {
+       const SIZE mapSize = scaledMapSize();
+       GVOImage scaledMapImage;
+       GVOImage *mapImage = &m_mapImage;
+
        ::SaveDC( hdc );
        if ( m_viewScale < 1.0 ) {
-               POINT brushOrg;
-               ::GetBrushOrgEx( hdc, &brushOrg );
-               ::SetStretchBltMode( hdc, HALFTONE );
-               ::SetBrushOrgEx( hdc, brushOrg.x, brushOrg.y, NULL );
-       }
-       else {
-               ::SetStretchBltMode( hdc, COLORONCOLOR );
+               // \8fk\8f¬\89æ\91\9c\95`\89æ\83R\83X\83g\82ð\8cy\8c¸\82·\82é\88×\82É\83L\83\83\83b\83V\83\85\82ð\8dì\90¬\81B
+               // \95p\94É\82É\8fk\8f¬\94ä\97¦\82ð\95Ï\8dX\82·\82é\8e\9e\82¾\82¯\83R\83X\83g\82ª\8d\82\82­\95t\82­\82ª\81A
+               // \96w\82Ç\82Ì\8fê\8d\87\82É\82¨\82¢\82ÄCPU\95\89\89×\82ª\8cy\8c¸\82³\82ê\82é\81B
+               if ( !m_reducedMapImageCache.isCompatible(mapSize) ) {
+                       m_reducedMapImageCache.stretchCopy( m_mapImage, mapSize );
+               }
+               mapImage = &m_reducedMapImageCache;
        }
+       ::SetStretchBltMode( hdc, COLORONCOLOR );
 
        HDC hdcMem = ::CreateCompatibleDC( hdc );
        ::SaveDC( hdcMem );
 
-       ::SelectObject( hdcMem, m_mapImage.bitmapHandle() );
+       ::SelectObject( hdcMem, mapImage->bitmapHandle() );
 
-       const SIZE mapSize = scaledMapSize();
        const POINT mapTopLeft = mapOriginInView();
 
        int xDrawOrigin, yDrawOrigin;
@@ -155,7 +159,7 @@ void GVOWorldMap::drawMap( HDC hdc, const GVOShip& ship )
                        mapSize.cx, mapSize.cy,
                        hdcMem,
                        0, 0,
-                       m_mapImage.width(), m_mapImage.height(),
+                       mapImage->width(), mapImage->height(),
                        SRCCOPY );
 
                xDrawOrigin += mapSize.cx;
index 7485dc8..48307fd 100644 (file)
@@ -18,6 +18,7 @@ private:
 
 private:
        GVOImage m_mapImage;
+       GVOImage m_reducedMapImageCache;        //!<@brief \8fk\8f¬\89æ\91\9c\83L\83\83\83b\83V\83\85
        POINT m_focusPointInWorldCoord;
        SIZE m_viewSize;