summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2010-11-11 09:22:19 +0000
committerskidau <skidau@gmail.com>2010-11-11 09:22:19 +0000
commitd4b72eaae57d1d797e19e5558fb93eb8cfc914c0 (patch)
tree3f3e251aec6f9f82576f31193fef5ee3a0b9e884 /Source/Core/VideoCommon
parent45f1948d33a2589ece828abaf568b7edcb863a9b (diff)
Added a projection hack for Metroid: Other M. This fixes the black screens that occur in cut-scenes. Patch by Trevor002.
Fixes issue 3477. Fixes issue 3127. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6381 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/Src/VertexShaderManager.cpp20
-rw-r--r--Source/Core/VideoCommon/Src/VertexShaderManager.h3
2 files changed, 19 insertions, 4 deletions
diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp
index 501791a953..a8601012a2 100644
--- a/Source/Core/VideoCommon/Src/VertexShaderManager.cpp
+++ b/Source/Core/VideoCommon/Src/VertexShaderManager.cpp
@@ -56,11 +56,12 @@ namespace
static bool g_ProjHack0;
static ProjectionHack g_ProjHack1;
static ProjectionHack g_ProjHack2;
+static ProjectionHack g_ProjHack3;
} // Namespace
void UpdateProjectionHack(int iPhackvalue)
{
- bool bProjHack1 = 0, bPhackvalue1 = 0, bPhackvalue2 = 0;
+ bool bProjHack1 = 0, bPhackvalue1 = 0, bPhackvalue2 = 0, bPhackvalue3 = 0;
float fhackvalue1 = 0, fhackvalue2 = 0;
switch(iPhackvalue)
{
@@ -68,6 +69,7 @@ void UpdateProjectionHack(int iPhackvalue)
bProjHack1 = 0;
bPhackvalue1 = 0;
bPhackvalue2 = 0;
+ bPhackvalue3 = 0;
break;
case PROJECTION_HACK_ZELDA_TP_BLOOM_HACK:
bPhackvalue1 = 1;
@@ -91,6 +93,9 @@ void UpdateProjectionHack(int iPhackvalue)
bPhackvalue2 = 0;
bProjHack1 = 0;
break;
+ case PROJECTION_HACK_METROID_OTHER_M: //temp fix for black screens during cut scenes
+ bPhackvalue3 = 1;
+ break;
/* // Unused - kept for reference
case PROJECTION_HACK_FINAL_FANTASY_CC_ECHO_OF_TIME:
bPhackvalue1 = 1;
@@ -126,6 +131,7 @@ void UpdateProjectionHack(int iPhackvalue)
g_ProjHack0 = bProjHack1;
g_ProjHack1 = ProjectionHack(bPhackvalue1 == 0 ? false : true, fhackvalue1);
g_ProjHack2 = ProjectionHack(bPhackvalue2 == 0 ? false : true, fhackvalue2);
+ g_ProjHack3 = ProjectionHack(bPhackvalue3,0);
}
void VertexShaderManager::Init()
@@ -344,9 +350,17 @@ void VertexShaderManager::SetConstants()
g_fProjectionMatrix[12] = 0.0f;
g_fProjectionMatrix[13] = 0.0f;
- g_fProjectionMatrix[14] = 0.0f;
- g_fProjectionMatrix[15] = 1.0f;
+ /*
+ projection hack for metroid other m...attempt to remove black projection layer from cut scenes.
+ g_fProjectionMatrix[15] = 1.0f was the default setting before
+ this hack was added...setting g_fProjectionMatrix[14] to -1 might make the hack more stable, needs more testing.
+ Only works for OGL and DX9...this is not helping DX11
+ */
+
+ g_fProjectionMatrix[14] = 0.0f;
+ g_fProjectionMatrix[15] = (g_ProjHack3.enabled && xfregs.rawProjection[0] == 2.0f ? 0.0f : 1.0f); //causes either the efb copy or bloom layer not to show if proj hack enabled
+
SETSTAT_FT(stats.g2proj_0, g_fProjectionMatrix[0]);
SETSTAT_FT(stats.g2proj_1, g_fProjectionMatrix[1]);
SETSTAT_FT(stats.g2proj_2, g_fProjectionMatrix[2]);
diff --git a/Source/Core/VideoCommon/Src/VertexShaderManager.h b/Source/Core/VideoCommon/Src/VertexShaderManager.h
index 7f89c62f56..46491b2255 100644
--- a/Source/Core/VideoCommon/Src/VertexShaderManager.h
+++ b/Source/Core/VideoCommon/Src/VertexShaderManager.h
@@ -26,7 +26,8 @@ enum
PROJECTION_HACK_ZELDA_TP_BLOOM_HACK = 1,
PROJECTION_HACK_SONIC_AND_THE_BLACK_KNIGHT = 2,
PROJECTION_HACK_BLEACH_VERSUS_CRUSADE = 3,
- PROJECTION_HACK_SKIES_OF_ARCADIA = 4
+ PROJECTION_HACK_SKIES_OF_ARCADIA = 4,
+ PROJECTION_HACK_METROID_OTHER_M = 5,
};
struct ProjectionHack