diff options
author | Fabio Battaglia | 2010-01-11 09:34:20 +0000 |
---|---|---|
committer | Fabio Battaglia | 2010-01-11 09:34:20 +0000 |
commit | 5b043140ff0fdb621cde86c173621eab1f4556c8 (patch) | |
tree | 5cdddb3627c7e5cb4455ec0383f6c9bcbc4ed87c /backends | |
parent | 009b86e8cba47fa60213a84a7456671c35c553c5 (diff) | |
download | scummvm-rg350-5b043140ff0fdb621cde86c173621eab1f4556c8.tar.gz scummvm-rg350-5b043140ff0fdb621cde86c173621eab1f4556c8.tar.bz2 scummvm-rg350-5b043140ff0fdb621cde86c173621eab1f4556c8.zip |
N64: a few optimizations in framebuffer drawing code
svn-id: r47242
Diffstat (limited to 'backends')
-rw-r--r-- | backends/platform/n64/Makefile | 8 | ||||
-rw-r--r-- | backends/platform/n64/osys_n64_base.cpp | 26 |
2 files changed, 23 insertions, 11 deletions
diff --git a/backends/platform/n64/Makefile b/backends/platform/n64/Makefile index a016e39233..ffc785ea06 100644 --- a/backends/platform/n64/Makefile +++ b/backends/platform/n64/Makefile @@ -17,11 +17,11 @@ RANLIB = $(GCCN64PREFIX)ranlib DEFINES += -D__N64__ -DLIMIT_FPS -DNONSTANDARD_PORT -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DDISABLE_FANCY_THEMES -DDISABLE_DOSBOX_OPL -DENABLE_VKEYBD -DUSE_ZLIB LIBS += -lpakfs -lframfs -ln64 -ln64utils -lromfs -DEFINES += -D_ENABLE_DEBUG_ +#DEFINES += -D_ENABLE_DEBUG_ #DEFINES += -D_NORMAL_N64_DELAY_ USE_LIBMAD=0 -USE_LIBOGG=1 +USE_LIBOGG=0 ifeq ($(USE_LIBMAD),1) DEFINES += -DUSE_MAD @@ -53,7 +53,7 @@ USE_RGB_COLOR=0 ENABLED=STATIC_PLUGIN -ENABLE_SCUMM=$(ENABLED) +#ENABLE_SCUMM=$(ENABLED) #ENABLE_SKY=$(ENABLED) #ENABLE_SCI=$(ENABLED) #ENABLE_GOB=$(ENABLED) @@ -64,6 +64,8 @@ ENABLE_SCUMM=$(ENABLED) #ENABLE_QUEEN = $(ENABLED) #ENABLE_MADE = $(ENABLED) #ENABLE_SAGA = $(ENABLED) +#ENABLE_TEENAGENT = $(ENABLED) +#ENABLE_DRACI = $(ENABLED) OBJS := nintendo64.o osys_n64_base.o osys_n64_events.o osys_n64_utilities.o pakfs_save_manager.o framfs_save_manager.o diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp index 10c943b2cf..22f2df2df3 100644 --- a/backends/platform/n64/osys_n64_base.cpp +++ b/backends/platform/n64/osys_n64_base.cpp @@ -72,7 +72,7 @@ OSystem_N64::OSystem_N64() { _frameBufferWidth = 340; // Pixels to skip - _offscrPixels = 15; + _offscrPixels = 16; // Video clock _viClockRate = VI_NTSC_CLOCK; @@ -254,7 +254,7 @@ void OSystem_N64::switchGraphicModeId(int mode) { _frameBufferWidth = 340; _screenWidth = 320; _screenHeight = 240; - _offscrPixels = 15; + _offscrPixels = 16; _graphicMode = OVERS_PAL_340X240; enableAudioPlayback(); break; @@ -280,7 +280,7 @@ void OSystem_N64::switchGraphicModeId(int mode) { _frameBufferWidth = 340; _screenWidth = 320; _screenHeight = 240; - _offscrPixels = 15; + _offscrPixels = 16; _graphicMode = OVERS_MPAL_340X240; enableAudioPlayback(); break; @@ -307,7 +307,7 @@ void OSystem_N64::switchGraphicModeId(int mode) { _frameBufferWidth = 340; _screenWidth = 320; _screenHeight = 240; - _offscrPixels = 15; + _offscrPixels = 16; _graphicMode = OVERS_NTSC_340X240; enableAudioPlayback(); break; @@ -470,6 +470,7 @@ void OSystem_N64::updateScreen() { uint8 skip_lines = (_screenHeight - _gameHeight) / 4; uint8 skip_pixels = (_screenWidth - _gameWidth) / 2; // Center horizontally the image + skip_pixels -= (skip_pixels % 8); // To keep aligned memory access if (_dirtyPalette) rebuildOffscreenGameBuffer(); @@ -479,7 +480,7 @@ void OSystem_N64::updateScreen() { uint16 *overlay_framebuffer = (uint16*)_dc->conf.framebuffer; // Current screen framebuffer uint16 *game_framebuffer = overlay_framebuffer + (_frameBufferWidth * skip_lines * 2); // Skip some lines to center the image vertically - uint16 currentHeight; + uint16 currentHeight, currentWidth; uint16 *tmpDst; uint16 *tmpSrc; @@ -488,7 +489,11 @@ void OSystem_N64::updateScreen() { tmpDst = game_framebuffer; tmpSrc = _offscreen_hic + (_shakeOffset * _screenWidth); for (currentHeight = _shakeOffset; currentHeight < _gameHeight; currentHeight++) { - memcpy((tmpDst + skip_pixels + _offscrPixels), tmpSrc, _screenWidth * 2); + uint64 *game_dest = (uint64*)(tmpDst + skip_pixels + _offscrPixels); + uint64 *game_src = (uint64*)tmpSrc; + for (currentWidth = 0; currentWidth < _gameWidth; currentWidth += 4) { + *game_dest++ = *game_src++; + } tmpDst += _frameBufferWidth; tmpSrc += _screenWidth; } @@ -502,7 +507,11 @@ void OSystem_N64::updateScreen() { tmpDst = overlay_framebuffer; tmpSrc = _overlayBuffer; for (currentHeight = 0; currentHeight < _overlayHeight; currentHeight++) { - memcpy((tmpDst + _offscrPixels), tmpSrc, _overlayWidth * 2); + uint64 *over_dest = (uint64*)(tmpDst + _offscrPixels); + uint64 *over_src = (uint64*)tmpSrc; + for (currentWidth = 0; currentWidth < _overlayWidth; currentWidth += 4) { + *over_dest++ = *over_src++; + } tmpDst += _frameBufferWidth; tmpSrc += _overlayWidth; } @@ -511,10 +520,11 @@ void OSystem_N64::updateScreen() { // Draw mouse cursor if ((_mouseVisible || _overlayVisible) && _cursorHeight > 0 && _cursorWidth > 0) { uint16 *mouse_framebuffer; - uint16 horiz_pix_skip = 0; + uint16 horiz_pix_skip; if (_overlayVisible) { mouse_framebuffer = overlay_framebuffer; + horiz_pix_skip = 0; } else { mouse_framebuffer = game_framebuffer; horiz_pix_skip = skip_pixels; |