This is an automated email from the git hooks/post-receive script. ecsv-guest pushed a commit to branch armhf_test in repository mupen64plus-video-rice.
commit dfd5cb1bd109be8a0d96d906c8f55e2a60160488 Author: Sven Eckelmann <[email protected]> Date: Wed May 11 21:27:42 2011 +0200 Imported Upstream version 1.99.4+20110510 --- .hgtags | 4 ++++ src/Config.cpp | 2 ++ src/OGLGraphicsContext.cpp | 30 +++++++++++++++++++++++++----- src/TextureFilters.cpp | 31 ++++++++++++++++++++++++++----- src/Video.cpp | 4 +++- src/Video.h | 2 ++ 6 files changed, 62 insertions(+), 11 deletions(-) diff --git a/.hgtags b/.hgtags new file mode 100644 index 0000000..ce6780f --- /dev/null +++ b/.hgtags @@ -0,0 +1,4 @@ +47d4f62aae9e43fbc609a0decf872bbd96fcc661 1.99.1 +8305c540efb49bbc703b78204b216ce913aafb10 1.99.2 +d678704ba2d7b9e3d34b098767bf9063596271e8 1.99.3 +985e7027bd8df7003d31f4af808f21c172afb207 1.99.4 diff --git a/src/Config.cpp b/src/Config.cpp index 248b955..40006a5 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -312,6 +312,7 @@ BOOL InitConfiguration(void) ConfigSetDefaultBool(l_ConfigVideoGeneral, "Fullscreen", 0, "Use fullscreen mode if True, or windowed mode if False "); ConfigSetDefaultInt(l_ConfigVideoGeneral, "ScreenWidth", 640, "Width of output window or fullscreen width"); ConfigSetDefaultInt(l_ConfigVideoGeneral, "ScreenHeight", 480, "Height of output window or fullscreen height"); + ConfigSetDefaultBool(l_ConfigVideoGeneral, "VerticalSync", 0, "If true, activate the SDL_GL_SWAP_CONTROL attribute"); ConfigSetDefaultInt(l_ConfigVideoRice, "FrameBufferSetting", FRM_BUF_NONE, "Frame Buffer Emulation (0=ROM default, 1=disable)"); ConfigSetDefaultInt(l_ConfigVideoRice, "FrameBufferWriteBackControl", FRM_BUF_WRITEBACK_NORMAL, "Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc)"); @@ -427,6 +428,7 @@ static void ReadConfiguration(void) windowSetting.bDisplayFullscreen = ConfigGetParamBool(l_ConfigVideoGeneral, "Fullscreen"); windowSetting.uDisplayWidth = ConfigGetParamInt(l_ConfigVideoGeneral, "ScreenWidth"); windowSetting.uDisplayHeight = ConfigGetParamInt(l_ConfigVideoGeneral, "ScreenHeight"); + windowSetting.bVerticalSync = ConfigGetParamBool(l_ConfigVideoGeneral, "VerticalSync"); defaultRomOptions.N64FrameBufferEmuType = ConfigGetParamInt(l_ConfigVideoRice, "FrameBufferSetting"); defaultRomOptions.N64FrameBufferWriteBackControl = ConfigGetParamInt(l_ConfigVideoRice, "FrameBufferWriteBackControl"); diff --git a/src/OGLGraphicsContext.cpp b/src/OGLGraphicsContext.cpp index 3dd92d0..facc1b1 100644 --- a/src/OGLGraphicsContext.cpp +++ b/src/OGLGraphicsContext.cpp @@ -78,6 +78,7 @@ bool COGLGraphicsContext::Initialize(uint32 dwWidth, uint32 dwHeight, BOOL bWind int depthBufferDepth = options.OpenglDepthBufferSetting; int colorBufferDepth = 32; + int bVerticalSync = windowSetting.bVerticalSync; if( options.colorQuality == TEXTURE_FMT_A4R4G4B4 ) colorBufferDepth = 16; // init sdl & gl @@ -85,8 +86,12 @@ bool COGLGraphicsContext::Initialize(uint32 dwWidth, uint32 dwHeight, BOOL bWind if (CoreVideo_Init() != M64ERR_SUCCESS) return false; + /* hard-coded attribute values */ + const int iDOUBLEBUFFER = 1; + /* set opengl attributes */ - CoreVideo_GL_SetAttribute(M64P_GL_DOUBLEBUFFER, 1); + CoreVideo_GL_SetAttribute(M64P_GL_DOUBLEBUFFER, iDOUBLEBUFFER); + CoreVideo_GL_SetAttribute(M64P_GL_SWAP_CONTROL, bVerticalSync); CoreVideo_GL_SetAttribute(M64P_GL_BUFFER_SIZE, colorBufferDepth); CoreVideo_GL_SetAttribute(M64P_GL_DEPTH_SIZE, depthBufferDepth); @@ -113,6 +118,21 @@ bool COGLGraphicsContext::Initialize(uint32 dwWidth, uint32 dwHeight, BOOL bWind return false; } + /* check that our opengl attributes were properly set */ + int iActual; + if (CoreVideo_GL_GetAttribute(M64P_GL_DOUBLEBUFFER, &iActual) == M64ERR_SUCCESS) + if (iActual != iDOUBLEBUFFER) + DebugMessage(M64MSG_WARNING, "Failed to set GL_DOUBLEBUFFER to %i. (it's %i)", iDOUBLEBUFFER, iActual); + if (CoreVideo_GL_GetAttribute(M64P_GL_SWAP_CONTROL, &iActual) == M64ERR_SUCCESS) + if (iActual != bVerticalSync) + DebugMessage(M64MSG_WARNING, "Failed to set GL_SWAP_CONTROL to %i. (it's %i)", bVerticalSync, iActual); + if (CoreVideo_GL_GetAttribute(M64P_GL_BUFFER_SIZE, &iActual) == M64ERR_SUCCESS) + if (iActual != colorBufferDepth) + DebugMessage(M64MSG_WARNING, "Failed to set GL_BUFFER_SIZE to %i. (it's %i)", colorBufferDepth, iActual); + if (CoreVideo_GL_GetAttribute(M64P_GL_DEPTH_SIZE, &iActual) == M64ERR_SUCCESS) + if (iActual != depthBufferDepth) + DebugMessage(M64MSG_WARNING, "Failed to set GL_DEPTH_SIZE to %i. (it's %i)", depthBufferDepth, iActual); + /* Get function pointers to OpenGL extensions (blame Microsoft Windows for this) */ OGLExtensions_Init(); @@ -230,9 +250,9 @@ void COGLGraphicsContext::InitOGLExtension(void) OPENGL_CHECK_ERRORS; // If user want more aniso than hardware can do - if(options.anisotropicFiltering > (uint32) m_maxAnisotropicFiltering) - { - DebugMessage(M64MSG_INFO, "A value of '%i' is set for AnisotropicFiltering option but the hardware has a maximum value of '%i' so this will be used", options.anisotropicFiltering, m_maxAnisotropicFiltering); + if(options.anisotropicFiltering > (uint32) m_maxAnisotropicFiltering) + { + DebugMessage(M64MSG_INFO, "A value of '%i' is set for AnisotropicFiltering option but the hardware has a maximum value of '%i' so this will be used", options.anisotropicFiltering, m_maxAnisotropicFiltering); } //check if user want less anisotropy than hardware can do @@ -435,4 +455,4 @@ bool COGLGraphicsContext::IsSupportAnisotropicFiltering() int COGLGraphicsContext::getMaxAnisotropicFiltering() { return m_maxAnisotropicFiltering; -} \ No newline at end of file +} diff --git a/src/TextureFilters.cpp b/src/TextureFilters.cpp index e6adc5e..a8ac0d4 100644 --- a/src/TextureFilters.cpp +++ b/src/TextureFilters.cpp @@ -1288,6 +1288,7 @@ void FindAllHiResTextures(void) gHiresTxtrInfos.clear(); if (!osal_is_directory(foldername)) { + DebugMessage(M64MSG_WARNING, "Couldn't open hi-res texture directory: %s", foldername); return; } else @@ -1377,7 +1378,8 @@ int FindScaleFactor(const ExtTxtrInfo &info, TxtrCacheEntry &entry) int CheckTextureInfos( CSortedList<uint64,ExtTxtrInfo> &infos, TxtrCacheEntry &entry, int &indexa, int &scaleShift, bool bForDump = false) { - if(entry.ti.WidthToCreate/entry.ti.WidthToLoad > 2 || entry.ti.HeightToCreate/entry.ti.HeightToLoad > 2 ) + if ((entry.ti.WidthToLoad != 0 && entry.ti.WidthToCreate / entry.ti.WidthToLoad > 2) || + (entry.ti.HeightToLoad != 0 && entry.ti.HeightToCreate / entry.ti.HeightToLoad > 2 )) { //DebugMessage(M64MSG_WARNING, "Hires texture does not support extreme texture replication"); return -1; @@ -1564,9 +1566,28 @@ bool LoadRGBBufferFromPNGFile(char *filename, unsigned char **pbuf, int &width, pSrc++; } } + else if (img.bits_per_pixel == 8 && (bits_per_pixel == 24 || bits_per_pixel == 32)) + { + // do palette lookup and convert 8bpp to 24/32bpp + int destBytePP = bits_per_pixel / 8; + int paletteBytePP = img.bytes_per_palette_entry; + unsigned char *pSrc = img.bits; + unsigned char *pDst = *pbuf; + // clear the destination image data (just to clear alpha if bpp=32) + memset(*pbuf, 0, img.width*img.height*destBytePP); + for (int i = 0; i < (int)(img.width*img.height); i++) + { + unsigned char clridx = *pSrc++; + unsigned char *palcolor = img.palette + clridx * paletteBytePP; + pDst[0] = palcolor[2]; // red + pDst[1] = palcolor[1]; // green + pDst[2] = palcolor[0]; // blue + pDst += destBytePP; + } + } else { - DebugMessage(M64MSG_ERROR, "PNG file is %i bpp but texture is %i bpp.", img.bits_per_pixel, bits_per_pixel); + DebugMessage(M64MSG_ERROR, "PNG file '%s' is %i bpp but texture is %i bpp.", filename, img.bits_per_pixel, bits_per_pixel); delete [] *pbuf; *pbuf = NULL; } @@ -1579,7 +1600,7 @@ bool LoadRGBBufferFromPNGFile(char *filename, unsigned char **pbuf, int &width, } else { - DebugMessage(M64MSG_ERROR, "ReadPNG() returned error in LoadRGBBufferFromPNGFile!"); + DebugMessage(M64MSG_ERROR, "ReadPNG() returned error for '%s' in LoadRGBBufferFromPNGFile!", filename); *pbuf = NULL; return false; } @@ -1849,8 +1870,8 @@ void LoadHiresTexture( TxtrCacheEntry &entry ) } // calculate the texture size magnification by comparing the N64 texture size and the hi-res texture size - int scalex = width / (int)entry.ti.WidthToCreate; - int scaley = height / (int)entry.ti.HeightToCreate; + int scalex = width / (int)entry.ti.WidthToLoad; + int scaley = height / (int)entry.ti.HeightToLoad; int mirrorx = 1; int mirrory = 1; if (entry.ti.WidthToCreate/entry.ti.WidthToLoad == 2) mirrorx = 2; diff --git a/src/Video.cpp b/src/Video.cpp index 05e9e04..ada5f50 100644 --- a/src/Video.cpp +++ b/src/Video.cpp @@ -94,6 +94,7 @@ ptr_VidExt_SetCaption CoreVideo_SetCaption = NULL; ptr_VidExt_ToggleFullScreen CoreVideo_ToggleFullScreen = NULL; ptr_VidExt_GL_GetProcAddress CoreVideo_GL_GetProcAddress = NULL; ptr_VidExt_GL_SetAttribute CoreVideo_GL_SetAttribute = NULL; +ptr_VidExt_GL_GetAttribute CoreVideo_GL_GetAttribute = NULL; ptr_VidExt_GL_SwapBuffers CoreVideo_GL_SwapBuffers = NULL; //--------------------------------------------------------------------------------------- @@ -572,11 +573,12 @@ EXPORT m64p_error CALL PluginStartup(m64p_dynlib_handle CoreLibHandle, void *Con CoreVideo_ToggleFullScreen = (ptr_VidExt_ToggleFullScreen) osal_dynlib_getproc(CoreLibHandle, "VidExt_ToggleFullScreen"); CoreVideo_GL_GetProcAddress = (ptr_VidExt_GL_GetProcAddress) osal_dynlib_getproc(CoreLibHandle, "VidExt_GL_GetProcAddress"); CoreVideo_GL_SetAttribute = (ptr_VidExt_GL_SetAttribute) osal_dynlib_getproc(CoreLibHandle, "VidExt_GL_SetAttribute"); + CoreVideo_GL_GetAttribute = (ptr_VidExt_GL_GetAttribute) osal_dynlib_getproc(CoreLibHandle, "VidExt_GL_GetAttribute"); CoreVideo_GL_SwapBuffers = (ptr_VidExt_GL_SwapBuffers) osal_dynlib_getproc(CoreLibHandle, "VidExt_GL_SwapBuffers"); if (!CoreVideo_Init || !CoreVideo_Quit || !CoreVideo_ListFullscreenModes || !CoreVideo_SetVideoMode || !CoreVideo_SetCaption || !CoreVideo_ToggleFullScreen || !CoreVideo_GL_GetProcAddress || - !CoreVideo_GL_SetAttribute || !CoreVideo_GL_SwapBuffers) + !CoreVideo_GL_SetAttribute || !CoreVideo_GL_GetAttribute || !CoreVideo_GL_SwapBuffers) { DebugMessage(M64MSG_ERROR, "Couldn't connect to Core video extension functions"); return M64ERR_INCOMPATIBLE; diff --git a/src/Video.h b/src/Video.h index 3dd3a02..baf83de 100644 --- a/src/Video.h +++ b/src/Video.h @@ -31,6 +31,7 @@ typedef struct { unsigned short uDisplayWidth, uDisplayHeight; BOOL bDisplayFullscreen; + BOOL bVerticalSync; float fMultX, fMultY; int vpLeftW, vpTopW, vpRightW, vpBottomW, vpWidthW, vpHeightW; @@ -189,6 +190,7 @@ extern ptr_VidExt_SetCaption CoreVideo_SetCaption; extern ptr_VidExt_ToggleFullScreen CoreVideo_ToggleFullScreen; extern ptr_VidExt_GL_GetProcAddress CoreVideo_GL_GetProcAddress; extern ptr_VidExt_GL_SetAttribute CoreVideo_GL_SetAttribute; +extern ptr_VidExt_GL_GetAttribute CoreVideo_GL_GetAttribute; extern ptr_VidExt_GL_SwapBuffers CoreVideo_GL_SwapBuffers; /* global functions provided by Video.cpp */ -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus-video-rice.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

