summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorNeoBrainX <NeoBrainX@googlemail.com>2011-09-05 22:04:28 +0200
committerNeoBrainX <NeoBrainX@googlemail.com>2011-09-05 22:04:28 +0200
commit17fcd406fcf68059ee5c0e940d42e9bcdcd32842 (patch)
treeb1e7515857ebe5843e525188d97a5d5895272385 /Source
parentb867c21fea6401c0f9886129621bb0dbae962a4a (diff)
Merge some scissor rect related code to VideoCommon.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/VideoCommon/Src/BPFunctions.cpp19
-rw-r--r--Source/Core/VideoCommon/Src/BPFunctions.h2
-rw-r--r--Source/Core/VideoCommon/Src/BPStructs.cpp2
-rw-r--r--Source/Core/VideoCommon/Src/RenderBase.h14
-rw-r--r--Source/Core/VideoCommon/Src/VideoCommon.h3
-rw-r--r--Source/Plugins/Plugin_VideoDX11/Src/Render.cpp19
-rw-r--r--Source/Plugins/Plugin_VideoDX11/Src/Render.h2
-rw-r--r--Source/Plugins/Plugin_VideoDX9/Src/Render.cpp19
-rw-r--r--Source/Plugins/Plugin_VideoDX9/Src/Render.h2
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/Render.cpp19
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/Render.h2
11 files changed, 36 insertions, 67 deletions
diff --git a/Source/Core/VideoCommon/Src/BPFunctions.cpp b/Source/Core/VideoCommon/Src/BPFunctions.cpp
index f323f03142..4f7315e832 100644
--- a/Source/Core/VideoCommon/Src/BPFunctions.cpp
+++ b/Source/Core/VideoCommon/Src/BPFunctions.cpp
@@ -44,9 +44,24 @@ void SetGenerationMode(const BPCmd &bp)
g_renderer->SetGenerationMode();
}
-void SetScissor(const BPCmd &bp)
+void SetScissor()
{
- g_renderer->SetScissorRect();
+ const int xoff = bpmem.scissorOffset.x * 2 - 342;
+ const int yoff = bpmem.scissorOffset.y * 2 - 342;
+
+ EFBRectangle rc (bpmem.scissorTL.x - xoff - 342, bpmem.scissorTL.y - yoff - 342,
+ bpmem.scissorBR.x - xoff - 341, bpmem.scissorBR.y - yoff - 341);
+
+ if (rc.left < 0) rc.left = 0;
+ if (rc.top < 0) rc.top = 0;
+ if (rc.right > EFB_WIDTH) rc.right = EFB_WIDTH;
+ if (rc.bottom > EFB_HEIGHT) rc.bottom = EFB_HEIGHT;
+
+ if (rc.left > rc.right) rc.right = rc.left;
+ if (rc.top > rc.bottom) rc.bottom = rc.top;
+
+ TargetRectangle trc = g_renderer->ConvertEFBRectangle(rc);
+ g_renderer->SetScissorRect(trc);
}
void SetLineWidth(const BPCmd &bp)
diff --git a/Source/Core/VideoCommon/Src/BPFunctions.h b/Source/Core/VideoCommon/Src/BPFunctions.h
index d104b12751..2b86523687 100644
--- a/Source/Core/VideoCommon/Src/BPFunctions.h
+++ b/Source/Core/VideoCommon/Src/BPFunctions.h
@@ -38,7 +38,7 @@ enum
void FlushPipeline();
void SetGenerationMode(const BPCmd &bp);
-void SetScissor(const BPCmd &bp);
+void SetScissor();
void SetLineWidth(const BPCmd &bp);
void SetDepthMode(const BPCmd &bp);
void SetBlendMode(const BPCmd &bp);
diff --git a/Source/Core/VideoCommon/Src/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp
index 42b5b2212a..cee68327f5 100644
--- a/Source/Core/VideoCommon/Src/BPStructs.cpp
+++ b/Source/Core/VideoCommon/Src/BPStructs.cpp
@@ -162,7 +162,7 @@ void BPWritten(const BPCmd& bp)
case BPMEM_SCISSORTL: // Scissor Rectable Top, Left
case BPMEM_SCISSORBR: // Scissor Rectable Bottom, Right
case BPMEM_SCISSOROFFSET: // Scissor Offset
- SetScissor(bp);
+ SetScissor();
break;
case BPMEM_LINEPTWIDTH: // Line Width
SetLineWidth(bp);
diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h
index 7e5c0dc8fe..b2c2c7ecfb 100644
--- a/Source/Core/VideoCommon/Src/RenderBase.h
+++ b/Source/Core/VideoCommon/Src/RenderBase.h
@@ -54,7 +54,7 @@ public:
virtual void SetColorMask() = 0;
virtual void SetBlendMode(bool forceUpdate) = 0;
- virtual void SetScissorRect() = 0;
+ virtual void SetScissorRect(const TargetRectangle& rc) = 0;
virtual void SetGenerationMode() = 0;
virtual void SetDepthMode() = 0;
virtual void SetLogicOpMode() = 0;
@@ -175,16 +175,4 @@ extern Renderer *g_renderer;
void UpdateViewport(Matrix44& vpCorrection);
-template <typename R>
-void GetScissorRect(MathUtil::Rectangle<R> &rect)
-{
- const int xoff = bpmem.scissorOffset.x * 2 - 342;
- const int yoff = bpmem.scissorOffset.y * 2 - 342;
-
- rect.left = (R)(bpmem.scissorTL.x - xoff - 342);
- rect.top = (R)(bpmem.scissorTL.y - yoff - 342);
- rect.right = (R)(bpmem.scissorBR.x - xoff - 341);
- rect.bottom = (R)(bpmem.scissorBR.y - yoff - 341);
-}
-
#endif // _COMMON_RENDERBASE_H_
diff --git a/Source/Core/VideoCommon/Src/VideoCommon.h b/Source/Core/VideoCommon/Src/VideoCommon.h
index 030c1f0b32..80c0937884 100644
--- a/Source/Core/VideoCommon/Src/VideoCommon.h
+++ b/Source/Core/VideoCommon/Src/VideoCommon.h
@@ -70,8 +70,7 @@ void HandleGLError();
// This structure should only be used to represent a rectangle in EFB
// coordinates, where the origin is at the upper left and the frame dimensions
// are 640 x 528.
-struct EFBRectangle : public MathUtil::Rectangle<int>
-{};
+typedef MathUtil::Rectangle<int> EFBRectangle;
// This structure should only be used to represent a rectangle in standard target
// coordinates, where the origin is at the lower left and the frame dimensions
diff --git a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
index 2c2f3037f6..bbf2a966dd 100644
--- a/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoDX11/Src/Render.cpp
@@ -42,6 +42,7 @@
#include "Movie.h"
#include "Television.h"
#include "Host.h"
+#include "BPFunctions.h"
namespace DX11
{
@@ -444,21 +445,9 @@ bool Renderer::CheckForResize()
return false;
}
-void Renderer::SetScissorRect()
+void Renderer::SetScissorRect(const TargetRectangle& rc)
{
- EFBRectangle rc;
- GetScissorRect(rc);
-
- if (rc.left < 0) rc.left = 0;
- if (rc.top < 0) rc.top = 0;
- if (rc.right > EFB_WIDTH) rc.right = EFB_WIDTH;
- if (rc.bottom > EFB_HEIGHT) rc.bottom = EFB_HEIGHT;
-
- if (rc.left > rc.right) rc.right = rc.left;
- if (rc.top > rc.bottom) rc.bottom = rc.top;
-
- TargetRectangle trc = ConvertEFBRectangle(rc);
- D3D::context->RSSetScissorRects(1, trc.AsRECT());
+ D3D::context->RSSetScissorRects(1, rc.AsRECT());
}
void Renderer::SetColorMask()
@@ -1133,7 +1122,7 @@ void Renderer::RestoreAPIState()
D3D::stateman->PopDepthState();
D3D::stateman->PopRasterizerState();
VertexShaderManager::SetViewportChanged();
- SetScissorRect();
+ BPFunctions::SetScissor();
}
void Renderer::ApplyState(bool bUseDstAlpha)
diff --git a/Source/Plugins/Plugin_VideoDX11/Src/Render.h b/Source/Plugins/Plugin_VideoDX11/Src/Render.h
index bc6dcba2bd..8f6c78fae1 100644
--- a/Source/Plugins/Plugin_VideoDX11/Src/Render.h
+++ b/Source/Plugins/Plugin_VideoDX11/Src/Render.h
@@ -15,7 +15,7 @@ public:
void SetColorMask();
void SetBlendMode(bool forceUpdate);
- void SetScissorRect();
+ void SetScissorRect(const TargetRectangle& rc);
void SetGenerationMode();
void SetDepthMode();
void SetLogicOpMode();
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
index 59af978107..15b592e800 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
@@ -53,6 +53,7 @@
#include "Debugger.h"
#include "Core.h"
#include "Movie.h"
+#include "BPFunctions.h"
namespace DX9
{
@@ -426,21 +427,9 @@ bool Renderer::CheckForResize()
return false;
}
-void Renderer::SetScissorRect()
+void Renderer::SetScissorRect(const TargetRectangle& rc)
{
- EFBRectangle rc;
- GetScissorRect(rc);
-
- if (rc.left < 0) rc.left = 0;
- if (rc.top < 0) rc.top = 0;
- if (rc.right > EFB_WIDTH) rc.right = EFB_WIDTH;
- if (rc.bottom > EFB_HEIGHT) rc.bottom = EFB_HEIGHT;
-
- if (rc.left > rc.right) rc.right = rc.left;
- if (rc.top > rc.bottom) rc.bottom = rc.top;
-
- TargetRectangle trc = ConvertEFBRectangle(rc);
- D3D::dev->SetScissorRect(trc.AsRECT());
+ D3D::dev->SetScissorRect(rc.AsRECT());
}
void Renderer::SetColorMask()
@@ -1259,7 +1248,7 @@ void Renderer::RestoreAPIState()
D3D::SetRenderState(D3DRS_FILLMODE, g_ActiveConfig.bWireFrame ? D3DFILL_WIREFRAME : D3DFILL_SOLID);
D3D::SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE);
VertexShaderManager::SetViewportChanged();
- SetScissorRect();
+ BPFunctions::SetScissor();
if (bpmem.zmode.testenable) {
D3D::SetRenderState(D3DRS_ZENABLE, TRUE);
if (bpmem.zmode.updateenable)
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.h b/Source/Plugins/Plugin_VideoDX9/Src/Render.h
index 6ba40de063..6e5198b3cd 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/Render.h
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.h
@@ -15,7 +15,7 @@ public:
void SetColorMask();
void SetBlendMode(bool forceUpdate);
- void SetScissorRect();
+ void SetScissorRect(const TargetRectangle& rc);
void SetGenerationMode();
void SetDepthMode();
void SetLogicOpMode();
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
index 1567c9825b..ca3280673e 100644
--- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
@@ -60,6 +60,7 @@
#include "Core.h"
#include "Movie.h"
#include "Host.h"
+#include "BPFunctions.h"
#include "main.h" // Local
#ifdef _WIN32
@@ -642,21 +643,9 @@ TargetRectangle Renderer::ConvertEFBRectangle(const EFBRectangle& rc)
// Renderer::GetTargetHeight() = the fixed ini file setting
// donkopunchstania - it appears scissorBR is the bottom right pixel inside the scissor box
// therefore the width and height are (scissorBR + 1) - scissorTL
-void Renderer::SetScissorRect()
+void Renderer::SetScissorRect(const TargetRectangle& rc)
{
- EFBRectangle rc;
- GetScissorRect(rc);
-
- if (rc.left < 0) rc.left = 0;
- if (rc.top < 0) rc.top = 0;
- if (rc.right > EFB_WIDTH) rc.right = EFB_WIDTH;
- if (rc.bottom > EFB_HEIGHT) rc.bottom = EFB_HEIGHT;
-
- if (rc.left > rc.right) rc.right = rc.left;
- if (rc.top > rc.bottom) rc.bottom = rc.top;
-
- TargetRectangle trc = ConvertEFBRectangle(rc);
- glScissor(trc.left, trc.bottom, trc.GetWidth(), trc.GetHeight());
+ glScissor(rc.left, rc.bottom, rc.GetWidth(), rc.GetHeight());
}
void Renderer::SetColorMask()
@@ -1404,7 +1393,7 @@ void Renderer::RestoreAPIState()
// Gets us back into a more game-like state.
glEnable(GL_SCISSOR_TEST);
SetGenerationMode();
- SetScissorRect();
+ BPFunctions::SetScissor();
SetColorMask();
SetDepthMode();
SetBlendMode(true);
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.h b/Source/Plugins/Plugin_VideoOGL/Src/Render.h
index b14617bed6..032a9a222c 100644
--- a/Source/Plugins/Plugin_VideoOGL/Src/Render.h
+++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.h
@@ -15,7 +15,7 @@ public:
void SetColorMask();
void SetBlendMode(bool forceUpdate);
- void SetScissorRect();
+ void SetScissorRect(const TargetRectangle& rc);
void SetGenerationMode();
void SetDepthMode();
void SetLogicOpMode();