From 1c11a8081f246dda91ff11d4207d87bb93260b1a Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Sun, 28 Jun 2020 00:01:51 +0300 Subject: mips overdose --- src/render/MBlur.cpp | 134 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 109 insertions(+), 25 deletions(-) (limited to 'src/render/MBlur.cpp') diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index 68ec1194..f6c16cfd 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -1,3 +1,4 @@ +#define WITHWINDOWS #include "common.h" #include "RwHelper.h" @@ -8,48 +9,125 @@ RwRaster *CMBlur::pFrontBuffer; bool CMBlur::ms_bJustInitialised; +bool CMBlur::ms_bScaledBlur; bool CMBlur::BlurOn; static RwIm2DVertex Vertex[4]; static RwImVertexIndex Index[6] = { 0, 1, 2, 0, 2, 3 }; -void +RwBool CMBlur::MotionBlurOpen(RwCamera *cam) { - // TODO. this is simplified - +#ifdef GTA_PS2 + RwRect rect = {0, 0, 0, 0}; + + if (pFrontBuffer) + return TRUE; + + BlurOn = true; + + rect.w = RwRasterGetWidth(RwCameraGetRaster(cam)); + rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); + + pFrontBuffer = RwRasterCreate(0, 0, 0, rwRASTERDONTALLOCATE|rwRASTERTYPECAMERATEXTURE); + if (!pFrontBuffer) + { + printf("Error creating raster\n"); + return FALSE; + } + + RwRaster *raster = RwRasterSubRaster(pFrontBuffer, RwCameraGetRaster(cam), &rect); + if (!raster) + { + RwRasterDestroy(pFrontBuffer); + pFrontBuffer = NULL; + printf("Error subrastering\n"); + return FALSE; + } + + CreateImmediateModeData(cam, &rect); +#else RwRect rect = { 0, 0, 0, 0 }; if(pFrontBuffer) MotionBlurClose(); - - if(BlurOn){ - for(rect.w = 1; rect.w < RwRasterGetWidth(RwCameraGetRaster(cam)); rect.w *= 2); - for(rect.h = 1; rect.h < RwRasterGetHeight(RwCameraGetRaster(cam)); rect.h *= 2); - pFrontBuffer = RwRasterCreate(rect.w, rect.h, RwRasterGetDepth(RwCameraGetRaster(cam)), rwRASTERTYPECAMERATEXTURE); - if(pFrontBuffer) - ms_bJustInitialised = true; - else{ - debug("MBlurOpen can't create raster."); + + extern void _GetVideoMemInfo(LPDWORD total, LPDWORD avaible); + DWORD total, avaible; + + _GetVideoMemInfo(&total, &avaible); + debug("Available video memory %d\n", avaible); + + if(BlurOn) + { + int32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1); + int32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1); + int32 depth = RwRasterGetDepth(RwCameraGetRaster(cam)); + +#ifndef LIBRW + extern D3DCAPS8 _RwD3D8DeviceCaps; + extern DWORD _dwMemTotalVideo; + if ( _RwD3D8DeviceCaps.MaxTextureWidth >= width && _RwD3D8DeviceCaps.MaxTextureHeight >= height ) + { + total = _dwMemTotalVideo - 3 * + ( RwRasterGetDepth(RwCameraGetRaster(cam)) + * RwRasterGetHeight(RwCameraGetRaster(cam)) + * RwRasterGetWidth(RwCameraGetRaster(cam)) / 8 ); + BlurOn = total >= height*width*(depth/8) + (12*1024*1024) /*12 MB*/; + } + else BlurOn = false; +#endif + + if ( BlurOn ) + { + ms_bScaledBlur = false; + rect.w = width; + rect.h = height; + + pFrontBuffer = RwRasterCreate(rect.w, rect.h, depth, rwRASTERTYPECAMERATEXTURE); + if ( !pFrontBuffer ) + { + debug("MBlurOpen can't create raster."); + BlurOn = false; + rect.w = RwRasterGetWidth(RwCameraGetRaster(cam)); + rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); + } + else + ms_bJustInitialised = true; + } + else + { rect.w = RwRasterGetWidth(RwCameraGetRaster(cam)); rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); } + + _GetVideoMemInfo(&total, &avaible); + debug("Available video memory %d\n", avaible); CreateImmediateModeData(cam, &rect); - }else{ + } + else + { rect.w = RwRasterGetWidth(RwCameraGetRaster(cam)); rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); CreateImmediateModeData(cam, &rect); } + + return TRUE; +#endif } -void +RwBool CMBlur::MotionBlurClose(void) { if(pFrontBuffer){ RwRasterDestroy(pFrontBuffer); pFrontBuffer = nil; + + return TRUE; } + + return FALSE; } void @@ -109,6 +187,10 @@ void CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 addalpha) { RwRGBA color = { (RwUInt8)red, (RwUInt8)green, (RwUInt8)blue, (RwUInt8)blur }; +#ifdef GTA_PS2 + if( pFrontBuffer ) + OverlayRender(cam, pFrontBuffer, color, type, addalpha); +#else if(BlurOn){ if(pFrontBuffer){ if(ms_bJustInitialised) @@ -122,6 +204,7 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u }else{ OverlayRender(cam, nil, color, type, addalpha); } +#endif } void @@ -136,32 +219,33 @@ CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, DefinedState(); - switch(type){ - case MBLUR_INTRO1: + switch(type) + { + case MOTION_BLUR_SECURITY_CAM: r = 0; g = 255; b = 0; a = 128; break; - case MBLUR_INTRO3: + case MOTION_BLUR_INTRO: r = 100; g = 220; b = 230; a = 158; break; - case MBLUR_INTRO4: + case MOTION_BLUR_INTRO2: r = 80; g = 255; b = 230; a = 138; break; - case MBLUR_INTRO6: + case MOTION_BLUR_INTRO3: r = 255; g = 60; b = 60; a = 200; break; - case MBLUR_UNUSED: + case MOTION_BLUR_INTRO4: r = 255; g = 180; b = 180; @@ -170,11 +254,11 @@ CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, } if(!BlurOn){ - r *= 0.6f; - g *= 0.6f; - b *= 0.6f; - if(type != 1) - a *= 0.6f; + r = Min(r*0.6f, 255.0f); + g = Min(g*0.6f, 255.0f); + b = Min(b*0.6f, 255.0f); + if(type != MOTION_BLUR_SNIPER) + a = Min(a*0.6f, 255.0f); // game clamps to 255 here, but why? } RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, a); -- cgit v1.2.3 From 233792e2b872ed400955bb3da113bd82234cfa09 Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Sun, 28 Jun 2020 00:31:45 +0300 Subject: fixfixfix --- src/render/MBlur.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/render/MBlur.cpp') diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index f6c16cfd..45224d05 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -20,14 +20,14 @@ CMBlur::MotionBlurOpen(RwCamera *cam) { #ifdef GTA_PS2 RwRect rect = {0, 0, 0, 0}; - + if (pFrontBuffer) - return TRUE; + return TRUE; BlurOn = true; rect.w = RwRasterGetWidth(RwCameraGetRaster(cam)); - rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); + rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); pFrontBuffer = RwRasterCreate(0, 0, 0, rwRASTERDONTALLOCATE|rwRASTERTYPECAMERATEXTURE); if (!pFrontBuffer) -- cgit v1.2.3 From fcac1f9a34488a3f3f42dc137b713d723ea9bd80 Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Mon, 29 Jun 2020 10:36:35 +0300 Subject: fix linux build? --- src/render/MBlur.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/render/MBlur.cpp') diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index 45224d05..af8fe763 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -52,11 +52,13 @@ CMBlur::MotionBlurOpen(RwCamera *cam) if(pFrontBuffer) MotionBlurClose(); - extern void _GetVideoMemInfo(LPDWORD total, LPDWORD avaible); DWORD total, avaible; +#ifdef _WIN32 + extern void _GetVideoMemInfo(LPDWORD total, LPDWORD avaible); _GetVideoMemInfo(&total, &avaible); debug("Available video memory %d\n", avaible); +#endif if(BlurOn) { @@ -102,9 +104,11 @@ CMBlur::MotionBlurOpen(RwCamera *cam) rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); } +#ifdef _WIN32 _GetVideoMemInfo(&total, &avaible); debug("Available video memory %d\n", avaible); CreateImmediateModeData(cam, &rect); +#endif } else { -- cgit v1.2.3 From 2f12d0e231c771e8fdb06da4bcec9ba4555109af Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Mon, 29 Jun 2020 10:40:06 +0300 Subject: Update MBlur.cpp --- src/render/MBlur.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/render/MBlur.cpp') diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index af8fe763..e37af6b7 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -52,9 +52,9 @@ CMBlur::MotionBlurOpen(RwCamera *cam) if(pFrontBuffer) MotionBlurClose(); - DWORD total, avaible; #ifdef _WIN32 extern void _GetVideoMemInfo(LPDWORD total, LPDWORD avaible); + DWORD total, avaible; _GetVideoMemInfo(&total, &avaible); debug("Available video memory %d\n", avaible); -- cgit v1.2.3 From 3b3324de380e14f17d533905dfe5af5ac6dba8db Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Mon, 29 Jun 2020 11:14:00 +0300 Subject: Update MBlur.cpp --- src/render/MBlur.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/render/MBlur.cpp') diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index e37af6b7..0ab9e8df 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -52,7 +52,7 @@ CMBlur::MotionBlurOpen(RwCamera *cam) if(pFrontBuffer) MotionBlurClose(); -#ifdef _WIN32 +#ifndef LIBRW extern void _GetVideoMemInfo(LPDWORD total, LPDWORD avaible); DWORD total, avaible; @@ -104,11 +104,11 @@ CMBlur::MotionBlurOpen(RwCamera *cam) rect.h = RwRasterGetHeight(RwCameraGetRaster(cam)); } -#ifdef _WIN32 +#ifndef LIBRW _GetVideoMemInfo(&total, &avaible); debug("Available video memory %d\n", avaible); - CreateImmediateModeData(cam, &rect); #endif + CreateImmediateModeData(cam, &rect); } else { -- cgit v1.2.3