mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
OpenGL: It seems like there was a purpose with the separate glViewport() and glScissor() in PE_copy.clear after all. I'll disable the XFB supplement until it works with those functions to.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2320 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
af461eeb1e
commit
f992dae50d
@ -372,7 +372,9 @@ void BPWritten(int addr, int changes, int newval)
|
||||
case 0x67:
|
||||
break;
|
||||
|
||||
// ===============================================================
|
||||
// This case writes to bpmem.triggerEFBCopy and may apparently prompt us to update glScissor()
|
||||
// ------------------------
|
||||
case 0x52:
|
||||
{
|
||||
DVSTARTSUBPROFILE("LoadBPReg:swap");
|
||||
@ -401,17 +403,21 @@ void BPWritten(int addr, int changes, int newval)
|
||||
UPE_Copy PE_copy;
|
||||
PE_copy.Hex = bpmem.triggerEFBCopy;
|
||||
|
||||
// --------------------------------------------------------
|
||||
// Check if we should copy the picture to XFB or not
|
||||
// --------------------------
|
||||
if (PE_copy.copy_to_xfb == 0)
|
||||
{
|
||||
// EFB to texture
|
||||
// for some reason it sets bpmem.zcontrol.pixel_format to PIXELFMT_Z24 every time a zbuffer format is given as a dest to GXSetTexCopyDst
|
||||
if (g_Config.bEFBCopyDisable)
|
||||
{
|
||||
// We already have this in Render.cpp that we call when (PE_copy.clear) is true, why do we need this here to?
|
||||
//glViewport(rc.left,rc.bottom, rc.right,rc.top);
|
||||
//glScissor(rc.left,rc.bottom, rc.right,rc.top);
|
||||
/* We already have this in Render.cpp that we call when (PE_copy.clear) is true. But we need a separate one
|
||||
here because UpdateViewport() is not run when this otion is set? */
|
||||
glViewport(rc.left,rc.bottom, rc.right,rc.top);
|
||||
glScissor(rc.left,rc.bottom, rc.right,rc.top);
|
||||
// Logging
|
||||
//GLScissorX = rc.left; GLScissorY = rc.bottom; GLScissorW = rc.right; GLScissorH = rc.top;
|
||||
GLScissorX = rc.left; GLScissorY = rc.bottom; GLScissorW = rc.right; GLScissorH = rc.top;
|
||||
}
|
||||
else if (g_Config.bCopyEFBToRAM)
|
||||
{
|
||||
@ -451,24 +457,30 @@ void BPWritten(int addr, int changes, int newval)
|
||||
g_VideoInitialize.pCopiedToXFB();
|
||||
}
|
||||
|
||||
// clearing
|
||||
// --------------------------------------------------------
|
||||
// Clearing
|
||||
// --------------------------
|
||||
if (PE_copy.clear)
|
||||
{
|
||||
// clear color
|
||||
// Clear color
|
||||
Renderer::SetRenderMode(Renderer::RM_Normal);
|
||||
|
||||
// Clear Z-Buffer target
|
||||
u32 nRestoreZBufferTarget = Renderer::GetZBufferTarget();
|
||||
|
||||
// Why do we have this here and in Render.cpp?
|
||||
//glViewport(0, 0, Renderer::GetTargetWidth(), Renderer::GetTargetHeight());
|
||||
glViewport(0, 0, Renderer::GetTargetWidth(), Renderer::GetTargetHeight());
|
||||
|
||||
// Always set the scissor in case it was set by the game and has not been reset
|
||||
// But we will do that at the end of this section, in SetScissorRect(), why would we do it twice in the same function?
|
||||
//glScissor(multirc.left, (Renderer::GetTargetHeight() - multirc.bottom),
|
||||
// (multirc.right - multirc.left), (multirc.bottom - multirc.top));
|
||||
// Because this is needed by the intermediate functions diirectly below here, in glDrawBuffer()
|
||||
// and so on.
|
||||
glScissor(multirc.left, (Renderer::GetTargetHeight() - multirc.bottom),
|
||||
(multirc.right - multirc.left), (multirc.bottom - multirc.top));
|
||||
// Logging
|
||||
// GLScissorX = multirc.left; GLScissorY = (Renderer::GetTargetHeight() - multirc.bottom);
|
||||
// GLScissorW = (multirc.right - multirc.left); GLScissorH = (multirc.bottom - multirc.top);
|
||||
GLScissorX = multirc.left; GLScissorY = (Renderer::GetTargetHeight() - multirc.bottom);
|
||||
GLScissorW = (multirc.right - multirc.left); GLScissorH = (multirc.bottom - multirc.top);
|
||||
|
||||
//Console::Print("%i %i %i %i\n", GLScissorX, GLScissorY, GLScissorW, GLScissorH);
|
||||
|
||||
VertexShaderManager::SetViewportChanged();
|
||||
|
||||
@ -510,16 +522,20 @@ void BPWritten(int addr, int changes, int newval)
|
||||
GL_REPORT_ERRORD();
|
||||
}
|
||||
|
||||
if (nRestoreZBufferTarget) {
|
||||
if (nRestoreZBufferTarget)
|
||||
{
|
||||
// restore target
|
||||
GLenum s_drawbuffers[2] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT};
|
||||
glDrawBuffers(2, s_drawbuffers);
|
||||
}
|
||||
|
||||
Renderer::SetScissorRect(); // reset the scissor rect
|
||||
Renderer::SetScissorRect(); // reset the scissor rectangle
|
||||
}
|
||||
// ------------------------------
|
||||
}
|
||||
break;
|
||||
// ==================================
|
||||
|
||||
|
||||
case 0x65: //GXLoadTlut
|
||||
{
|
||||
|
@ -699,7 +699,8 @@ bool Renderer::SetScissorRect()
|
||||
// XFB supplement, fix the black borders problem
|
||||
// ------------------
|
||||
// See comment in UpdateViewport() about why I don't the XFB supplement to these options
|
||||
if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
||||
//if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
||||
if(false)
|
||||
{
|
||||
int WidthDifference = 640 - (int)(rc_right - rc_left);
|
||||
int HeightDifference = 480 - (int)(rc_bottom - rc_top);
|
||||
@ -1206,7 +1207,7 @@ void UpdateViewport()
|
||||
int scissorYOff = bpmem.scissorOffset.y * 2 - 342;
|
||||
|
||||
// Used in the XFB supplement and the keep aspect ratio function
|
||||
int XOffset, YOffset;
|
||||
int XOffset = 0, YOffset = 0;
|
||||
// -------------------------------------
|
||||
|
||||
|
||||
@ -1218,7 +1219,8 @@ void UpdateViewport()
|
||||
/* I'm limiting it to the stretch to fit option because I don't know how the other mode works. The reason
|
||||
I don't allow this option together with UseXFB is that they are supplements and the XFB function
|
||||
should be able to produce the same result */
|
||||
if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
||||
//if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
||||
if(false)
|
||||
{
|
||||
XOffset = (640 - GLScissorW);
|
||||
YOffset = (480 - GLScissorH);
|
||||
@ -1343,7 +1345,7 @@ void UpdateViewport()
|
||||
GetWindowRect(Child, &RcChild);
|
||||
|
||||
|
||||
Console::ClearScreen();
|
||||
//Console::ClearScreen();
|
||||
Console::Print("----------------------------------------------------------------\n");
|
||||
Console::Print("Top window: X:%03i Y:%03i Width:%03i Height:%03i\n", RcTop.left, RcTop.top, RcTop.right - RcTop.left, RcTop.bottom - RcTop.top);
|
||||
Console::Print("Parent window: X:%03i Y:%03i Width:%03i Height:%03i\n", RcParent.left, RcParent.top, RcParent.right - RcParent.left, RcParent.bottom - RcParent.top);
|
||||
|
Loading…
Reference in New Issue
Block a user