From e57aa00b2ab243c094e217acb15a0638b918c45d Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 29 Jul 2006 00:23:44 +0000 Subject: [PATCH] invert RenderTarget_FramebufferObject set viewport --- stepmania/src/RageDisplay_OGL.cpp | 12 ++++++++++++ stepmania/src/RageDisplay_OGL_Helpers.h | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index ce4aea76bf..564611b505 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -1909,6 +1909,8 @@ public: void StartRenderingTo(); void FinishRenderingTo(); + virtual bool InvertY() const { return true; } + private: unsigned int m_iFrameBufferHandle; unsigned int m_iTexHandle; @@ -1934,6 +1936,8 @@ RenderTarget_FramebufferObject::~RenderTarget_FramebufferObject() void RenderTarget_FramebufferObject::Create( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut ) { + m_Param = param; + FlushGLErrors(); // Allocate OpenGL texture resource @@ -2041,6 +2045,11 @@ void RageDisplay_OGL::SetRenderTarget( unsigned iTexture, bool bPreserveTexture g_bInvertY = false; glFrontFace( GL_CCW ); + /* Reset the viewport. */ + int fWidth = g_pWind->GetActualVideoModeParams().width; + int fHeight = g_pWind->GetActualVideoModeParams().height; + glViewport( 0, 0, fWidth, fHeight ); + if( g_pCurrentRenderTarget ) g_pCurrentRenderTarget->FinishRenderingTo(); g_pCurrentRenderTarget = NULL; @@ -2057,6 +2066,9 @@ void RageDisplay_OGL::SetRenderTarget( unsigned iTexture, bool bPreserveTexture pTarget->StartRenderingTo(); g_pCurrentRenderTarget = pTarget; + /* Set the viewport to the size of the render target. */ + glViewport( 0, 0, pTarget->GetParam().iWidth, pTarget->GetParam().iHeight ); + /* If this render target implementation flips Y, compensate. Inverting will * switch the winding order. */ g_bInvertY = pTarget->InvertY(); diff --git a/stepmania/src/RageDisplay_OGL_Helpers.h b/stepmania/src/RageDisplay_OGL_Helpers.h index b752e90bda..eef09eafd0 100644 --- a/stepmania/src/RageDisplay_OGL_Helpers.h +++ b/stepmania/src/RageDisplay_OGL_Helpers.h @@ -19,6 +19,9 @@ #undef __glext_h_ #include "glext.h" +/* Import RageDisplay, for types. Do not include RageDisplay_OGL.h. */ +#include "RageDisplay.h" + /* Windows defines GL_EXT_paletted_texture incompletely: */ #ifndef GL_TEXTURE_INDEX_SIZE_EXT #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED @@ -33,7 +36,6 @@ namespace RageDisplay_OGL_Helpers RString GLToString( GLenum e ); }; -struct RenderTargetParam; class RenderTarget { public: @@ -50,6 +52,11 @@ public: virtual void FinishRenderingTo() = 0; virtual bool InvertY() const { return false; } + + const RenderTargetParam &GetParam() const { return m_Param; } + +protected: + RenderTargetParam m_Param; }; class LowLevelWindow;