Move the message display thing out of Render.cpp
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2335 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
731dec6889
commit
fe0be64bd3
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Version="9,00"
|
||||
Name="Plugin_VideoOGL"
|
||||
ProjectGUID="{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}"
|
||||
RootNamespace="Plugin_VideoOGL"
|
||||
|
@ -758,6 +758,14 @@
|
|||
<Filter
|
||||
Name="Render"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Src\OnScreenDisplay.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\OnScreenDisplay.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Src\PixelShaderCache.cpp"
|
||||
>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "../Config.h"
|
||||
#include "main.h"
|
||||
#include "Win32.h"
|
||||
#include "Render.h" // for AddMessage
|
||||
#include "OnScreenDisplay.h" // for AddMessage
|
||||
|
||||
#include "StringUtil.h" // Common: For StringFromFormat
|
||||
//////////////////////////////////
|
||||
|
@ -76,6 +76,7 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
|
|||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
// This causes a "stop hang", if the gfx config dialog has been opened.
|
||||
wxEntryCleanup(); // Use wxUninitialize() if you don't want GUI
|
||||
break;
|
||||
default:
|
||||
|
@ -96,6 +97,7 @@ extern bool gShowDebugger;
|
|||
// ¯¯¯¯¯¯¯¯¯¯
|
||||
namespace EmuWindow
|
||||
{
|
||||
|
||||
HWND m_hWnd = NULL; // The new window that is created here
|
||||
HWND m_hParent = NULL;
|
||||
HWND m_hMain = NULL; // The main CPanel
|
||||
|
@ -119,7 +121,6 @@ namespace EmuWindow
|
|||
hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
}
|
||||
|
||||
|
||||
HWND GetWnd()
|
||||
{
|
||||
return m_hWnd;
|
||||
|
@ -178,7 +179,7 @@ namespace EmuWindow
|
|||
if (g_Config.bEFBCopyDisableHotKey)
|
||||
{
|
||||
g_Config.bEFBCopyDisable = !g_Config.bEFBCopyDisable;
|
||||
Renderer::AddMessage(StringFromFormat("Copy EFB was turned %s",
|
||||
OSD::AddMessage(StringFromFormat("Copy EFB was turned %s",
|
||||
g_Config.bEFBCopyDisable ? "off" : "on").c_str(), 5000);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include <list>
|
||||
|
||||
#include "Common.h"
|
||||
#include "GLUtil.h"
|
||||
|
||||
#include "OnScreenDisplay.h"
|
||||
#include "Render.h"
|
||||
|
||||
namespace OSD
|
||||
{
|
||||
|
||||
struct MESSAGE
|
||||
{
|
||||
MESSAGE() {}
|
||||
MESSAGE(const char* p, u32 dw) { strcpy(str, p); dwTimeStamp = dw; }
|
||||
char str[255];
|
||||
u32 dwTimeStamp;
|
||||
};
|
||||
|
||||
static std::list<MESSAGE> s_listMsgs;
|
||||
|
||||
void AddMessage(const char* pstr, u32 ms)
|
||||
{
|
||||
s_listMsgs.push_back(MESSAGE(pstr, timeGetTime() + ms));
|
||||
}
|
||||
|
||||
void DrawMessages()
|
||||
{
|
||||
GLboolean wasEnabled = glIsEnabled(GL_BLEND);
|
||||
if (!wasEnabled)
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
if (s_listMsgs.size() > 0) {
|
||||
int left = 25, top = 15;
|
||||
std::list<MESSAGE>::iterator it = s_listMsgs.begin();
|
||||
while (it != s_listMsgs.end())
|
||||
{
|
||||
int time_left = (int)(it->dwTimeStamp - timeGetTime());
|
||||
int alpha = 255;
|
||||
|
||||
if (time_left < 1024)
|
||||
{
|
||||
alpha = time_left >> 2;
|
||||
if (time_left < 0) alpha = 0;
|
||||
}
|
||||
|
||||
alpha <<= 24;
|
||||
|
||||
Renderer::RenderText(it->str, left+1, top+1, 0x000000|alpha);
|
||||
Renderer::RenderText(it->str, left, top, 0xffff30|alpha);
|
||||
top += 15;
|
||||
|
||||
if (time_left <= 0)
|
||||
it = s_listMsgs.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
if (!wasEnabled) glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
} // namespace
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, version 2.0.
|
||||
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#ifndef _OSD_H
|
||||
#define _OSD_H
|
||||
|
||||
namespace OSD
|
||||
{
|
||||
|
||||
// On-screen message display
|
||||
void AddMessage(const char* str, u32 ms);
|
||||
void DrawMessages(); // draw the current messages on the screen. Only call once per frame.
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
|
||||
#include "Globals.h"
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
|
||||
|
@ -45,6 +44,7 @@
|
|||
#include "VertexLoaderManager.h"
|
||||
#include "VertexLoader.h"
|
||||
#include "XFB.h"
|
||||
#include "OnScreenDisplay.h"
|
||||
#include "Timer.h"
|
||||
|
||||
#include "main.h" // Local
|
||||
|
@ -57,20 +57,12 @@
|
|||
#else
|
||||
#endif
|
||||
|
||||
struct MESSAGE
|
||||
{
|
||||
MESSAGE() {}
|
||||
MESSAGE(const char* p, u32 dw) { strcpy(str, p); dwTimeStamp = dw; }
|
||||
char str[255];
|
||||
u32 dwTimeStamp;
|
||||
};
|
||||
|
||||
CGcontext g_cgcontext;
|
||||
CGprofile g_cgvProf;
|
||||
CGprofile g_cgfProf;
|
||||
|
||||
static RasterFont* s_pfont = NULL;
|
||||
static std::list<MESSAGE> s_listMsgs;
|
||||
RasterFont* s_pfont = NULL;
|
||||
|
||||
static bool s_bFullscreen = false;
|
||||
static bool s_bOutputCgErrors = true;
|
||||
|
@ -416,58 +408,6 @@ bool Renderer::InitializeGL()
|
|||
return err == GL_NO_ERROR;
|
||||
}
|
||||
|
||||
void Renderer::AddMessage(const char* pstr, u32 ms)
|
||||
{
|
||||
s_listMsgs.push_back(MESSAGE(pstr, timeGetTime() + ms));
|
||||
}
|
||||
|
||||
void Renderer::ProcessMessages()
|
||||
{
|
||||
GLboolean wasEnabled = glIsEnabled(GL_BLEND);
|
||||
|
||||
if (!wasEnabled) glEnable(GL_BLEND);
|
||||
|
||||
if (s_listMsgs.size() > 0) {
|
||||
int left = 25, top = 15;
|
||||
std::list<MESSAGE>::iterator it = s_listMsgs.begin();
|
||||
while (it != s_listMsgs.end())
|
||||
{
|
||||
int time_left = (int)(it->dwTimeStamp - timeGetTime());
|
||||
int alpha = 255;
|
||||
|
||||
if (time_left < 1024)
|
||||
{
|
||||
alpha = time_left >> 2;
|
||||
if (time_left < 0) alpha = 0;
|
||||
}
|
||||
|
||||
alpha <<= 24;
|
||||
|
||||
RenderText(it->str, left+1, top+1, 0x000000|alpha);
|
||||
RenderText(it->str, left, top, 0xffff30|alpha);
|
||||
top += 15;
|
||||
|
||||
if (time_left <= 0)
|
||||
it = s_listMsgs.erase(it);
|
||||
else ++it;
|
||||
}
|
||||
}
|
||||
|
||||
if (!wasEnabled) glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
void Renderer::RenderText(const char* pstr, int left, int top, u32 color)
|
||||
{
|
||||
int nBackbufferWidth = (int)OpenGL_GetWidth();
|
||||
int nBackbufferHeight = (int)OpenGL_GetHeight();
|
||||
glColor4f(
|
||||
((color>>16) & 0xff)/255.0f,
|
||||
((color>> 8) & 0xff)/255.0f,
|
||||
((color>> 0) & 0xff)/255.0f,
|
||||
((color>>24) & 0xFF)/255.0f
|
||||
);
|
||||
s_pfont->printMultilineText(pstr, left * 2.0f / (float)nBackbufferWidth - 1, 1 - top * 2.0f / (float)nBackbufferHeight,0,nBackbufferWidth,nBackbufferHeight);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
// Return the rendering window width and height
|
||||
|
@ -989,7 +929,7 @@ void Renderer::SwapBuffers()
|
|||
Renderer::RenderText(debugtext_buffer, 21, 21, 0xDD000000);
|
||||
Renderer::RenderText(debugtext_buffer, 20, 20, 0xFF00FFFF);
|
||||
|
||||
Renderer::ProcessMessages();
|
||||
OSD::DrawMessages();
|
||||
|
||||
#if defined(DVPROFILE)
|
||||
if (g_bWriteProfile) {
|
||||
|
@ -1035,6 +975,18 @@ void Renderer::SwapBuffers()
|
|||
}
|
||||
}
|
||||
|
||||
void Renderer::RenderText(const char* pstr, int left, int top, u32 color)
|
||||
{
|
||||
int nBackbufferWidth = (int)OpenGL_GetWidth();
|
||||
int nBackbufferHeight = (int)OpenGL_GetHeight();
|
||||
glColor4f(((color>>16) & 0xff)/255.0f, ((color>> 8) & 0xff)/255.0f,
|
||||
((color>> 0) & 0xff)/255.0f, ((color>>24) & 0xFF)/255.0f);
|
||||
s_pfont->printMultilineText(pstr,
|
||||
left * 2.0f / (float)nBackbufferWidth - 1,
|
||||
1 - top * 2.0f / (float)nBackbufferHeight,
|
||||
0, nBackbufferWidth, nBackbufferHeight);
|
||||
}
|
||||
|
||||
bool Renderer::SaveRenderTarget(const char* filename, int jpeg)
|
||||
{
|
||||
bool bflip = true;
|
||||
|
@ -1083,13 +1035,6 @@ void HandleGLError()
|
|||
if (!error)
|
||||
return;
|
||||
|
||||
// What is this for?
|
||||
// int w, h;
|
||||
// GLint fmt;
|
||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, &fmt);
|
||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_WIDTH_EXT, (GLint *)&w);
|
||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_HEIGHT_EXT, (GLint *)&h);
|
||||
|
||||
switch(error)
|
||||
{
|
||||
case GL_FRAMEBUFFER_COMPLETE_EXT:
|
||||
|
@ -1133,8 +1078,6 @@ void HandleCgError(CGcontext ctx, CGerror err, void* appdata)
|
|||
if (listing != NULL) {
|
||||
ERROR_LOG(" last listing: %s\n", listing);
|
||||
}
|
||||
// glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &loc);
|
||||
// printf("pos: %d\n", loc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1299,7 +1242,6 @@ void UpdateViewport()
|
|||
glDepthRange(GLNear, GLFar);
|
||||
// -------------------------------------
|
||||
|
||||
|
||||
// Logging
|
||||
/*
|
||||
RECT RcTop, RcParent, RcChild;
|
||||
|
|
|
@ -96,12 +96,6 @@ public:
|
|||
// initialize opengl standard values (like viewport)
|
||||
static bool InitializeGL();
|
||||
|
||||
static void AddMessage(const char* str, u32 ms);
|
||||
static void ProcessMessages(); // draw the current messages on the screen
|
||||
static void RenderText(const char* pstr, int left, int top, u32 color);
|
||||
|
||||
static int GetTargetWidth();
|
||||
static int GetTargetHeight();
|
||||
static void SetCgErrorOutput(bool bOutput);
|
||||
|
||||
static void ResetGLState();
|
||||
|
@ -109,9 +103,6 @@ public:
|
|||
static bool IsUsingATIDrawBuffers();
|
||||
static bool HaveStencilBuffer();
|
||||
|
||||
static void SetZBufferRender(); // sets rendering of the zbuffer using MRTs
|
||||
static GLuint GetZBufferTarget();
|
||||
|
||||
static void SetColorMask();
|
||||
static void SetBlendMode(bool forceUpdate);
|
||||
static bool SetScissorRect();
|
||||
|
@ -119,19 +110,27 @@ public:
|
|||
static void SetRenderMode(RenderMode mode);
|
||||
static RenderMode GetRenderMode();
|
||||
|
||||
// Render target management
|
||||
static int GetTargetWidth();
|
||||
static int GetTargetHeight();
|
||||
|
||||
static void SetFramebuffer(GLuint fb);
|
||||
static void SetZBufferRender(); // sets rendering of the zbuffer using MRTs
|
||||
static void SetRenderTarget(GLuint targ); // if targ is 0, sets to original render target
|
||||
static void SetDepthTarget(GLuint targ);
|
||||
|
||||
static void SetFramebuffer(GLuint fb);
|
||||
|
||||
static GLuint GetRenderTarget();
|
||||
static GLuint GetZBufferTarget();
|
||||
|
||||
// Random utilities
|
||||
static void RenderText(const char* pstr, int left, int top, u32 color);
|
||||
static bool SaveRenderTarget(const char* filename, int jpeg);
|
||||
|
||||
// Finish up the current frame, print some stats
|
||||
static void Swap(const TRectangle& rc);
|
||||
|
||||
static void SwapBuffers();
|
||||
|
||||
static bool SaveRenderTarget(const char* filename, int jpeg);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -25,6 +25,7 @@ files = [
|
|||
'XFB.cpp',
|
||||
'XFStructs.cpp',
|
||||
'TextureConversionShader.cpp',
|
||||
'OnScreenDisplay.cpp',
|
||||
]
|
||||
compileFlags = [
|
||||
'-fPIC',
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "XFB.h"
|
||||
#include "XFBConvert.h"
|
||||
#include "TextureConverter.h"
|
||||
#include "OnScreenDisplay.h"
|
||||
|
||||
#include "VideoState.h"
|
||||
///////////////////////////////////////////////
|
||||
|
@ -223,7 +224,7 @@ void Initialize(void *init)
|
|||
// Now the window handle is written
|
||||
_pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle;
|
||||
|
||||
Renderer::AddMessage("Dolphin OpenGL Video Plugin" ,5000);
|
||||
OSD::AddMessage("Dolphin OpenGL Video Plugin" ,5000);
|
||||
}
|
||||
|
||||
void DoState(unsigned char **ptr, int mode) {
|
||||
|
@ -329,7 +330,7 @@ unsigned int Video_Screenshot(TCHAR* _szFilename)
|
|||
{
|
||||
char msg[255];
|
||||
sprintf(msg, "saved %s\n", _szFilename);
|
||||
Renderer::AddMessage(msg, 500);
|
||||
OSD::AddMessage(msg, 500);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -359,5 +360,5 @@ void Video_UpdateXFB(u8* _pXFB, u32 _dwWidth, u32 _dwHeight, s32 _dwYOffset, boo
|
|||
|
||||
void Video_AddMessage(const char* pstr, u32 milliseconds)
|
||||
{
|
||||
Renderer::AddMessage(pstr, milliseconds);
|
||||
OSD::AddMessage(pstr, milliseconds);
|
||||
}
|
||||
|
|
|
@ -1058,6 +1058,3 @@ void __Logv(int log, int v, const char *_fmt, ...)
|
|||
|
||||
g_WiimoteInitialize.pLog(Msg, v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue