Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Extend our OSD class to support callbacks on init, onframe, and shutd…
…own.
  • Loading branch information
Sonicadvance1 committed Apr 13, 2013
1 parent ccf1cee commit 39a7096
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 9 deletions.
35 changes: 35 additions & 0 deletions Source/Core/VideoCommon/Src/OnScreenDisplay.cpp
Expand Up @@ -24,6 +24,8 @@
#include "RenderBase.h"
#include "Timer.h"

#include <vector>

namespace OSD
{

Expand All @@ -39,6 +41,26 @@ struct MESSAGE
u32 dwTimeStamp;
};

class CALLBACK
{
private:
CallbackPtr m_functionptr;
CallbackType m_type;
u32 m_data;
public:
CALLBACK(CallbackType OnType, CallbackPtr FuncPtr, u32 UserData)
{
m_type = OnType;
m_functionptr = FuncPtr;
m_data = UserData;
}
void Call()
{
m_functionptr(m_data);
}
CallbackType Type() { return m_type; }
};
std::vector<CALLBACK> m_callbacks;
static std::list<MESSAGE> s_listMsgs;

void AddMessage(const char* pstr, u32 ms)
Expand Down Expand Up @@ -86,4 +108,17 @@ void ClearMessages()
it = s_listMsgs.erase(it);
}

// On-Screen Display Callbacks
void AddCallback(CallbackType OnType, CallbackPtr FuncPtr, u32 UserData)
{
m_callbacks.push_back(CALLBACK(OnType, FuncPtr, UserData));
}

void DoCallbacks(CallbackType OnType)
{
for (auto it = m_callbacks.begin(); it != m_callbacks.end(); ++it)
if (it->Type() == OnType)
it->Call();
}

} // namespace
12 changes: 12 additions & 0 deletions Source/Core/VideoCommon/Src/OnScreenDisplay.h
Expand Up @@ -26,6 +26,18 @@ void AddMessage(const char* str, u32 ms = 2000);
void DrawMessages(); // draw the current messages on the screen. Only call once per frame.
void ClearMessages();

// On-screen callbacks
enum CallbackType
{
OSD_INIT = 0,
OSD_ONFRAME,
OSD_SHUTDOWN
};
typedef void(*CallbackPtr)(u32);

void AddCallback(CallbackType OnType, CallbackPtr FuncPtr, u32 UserData);

void DoCallbacks(CallbackType OnType);
} // namespace

#endif // _OSD_H_
Expand Down
4 changes: 3 additions & 1 deletion Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
Expand Up @@ -1409,7 +1409,9 @@ void Renderer::Swap(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight,cons
DrawDebugText();

GL_REPORT_ERRORD();


// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_ONFRAME);
OSD::DrawMessages();
GL_REPORT_ERRORD();

Expand Down
12 changes: 11 additions & 1 deletion Source/Plugins/Plugin_VideoOGL/Src/main.cpp
Expand Up @@ -157,7 +157,10 @@ void VideoBackend::ShowConfig(void *_hParent)
diag.ShowModal();
#endif
}

void Test(u32 Data)
{
printf("Data: %d\n", Data);
}
bool VideoBackend::Initialize(void *&window_handle)
{
InitializeShared();
Expand All @@ -175,6 +178,9 @@ bool VideoBackend::Initialize(void *&window_handle)
if (!GLInterface->Create(window_handle))
return false;

// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_INIT);

s_BackendInitialized = true;

return true;
Expand Down Expand Up @@ -222,6 +228,10 @@ void VideoBackend::Video_Prepare()
void VideoBackend::Shutdown()
{
s_BackendInitialized = false;

// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_SHUTDOWN);

GLInterface->Shutdown();
}

Expand Down
5 changes: 5 additions & 0 deletions Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp
Expand Up @@ -23,6 +23,8 @@
#include "SWRenderer.h"
#include "SWStatistics.h"

#include "OnScreenDisplay.h"

static GLuint s_RenderTarget = 0;

static GLint attr_pos = -1, attr_tex = -1;
Expand Down Expand Up @@ -181,6 +183,9 @@ void SWRenderer::DrawTexture(u8 *texture, int width, int height)

void SWRenderer::SwapBuffer()
{
// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_ONFRAME);

DrawDebugText();

glFlush();
Expand Down
20 changes: 13 additions & 7 deletions Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
Expand Up @@ -43,6 +43,7 @@
#include "SWVertexLoader.h"
#include "SWStatistics.h"

#include "OnScreenDisplay.h"
#define VSYNC_ENABLED 0

namespace SW
Expand Down Expand Up @@ -81,6 +82,8 @@ bool VideoSoftware::Initialize(void *&window_handle)
INFO_LOG(VIDEO, "%s", "SWRenderer::Create failed\n");
return false;
}
// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_INIT);

InitBPMemory();
InitXFMemory();
Expand Down Expand Up @@ -111,15 +114,15 @@ void VideoSoftware::DoState(PointerWrap& p)
OpcodeDecoder::DoState(p);
Clipper::DoState(p);
p.Do(swxfregs);
p.Do(bpmem);
p.Do(bpmem);
p.DoPOD(swstats);

// CP Memory
p.DoArray(arraybases, 16);
p.DoArray(arraystrides, 16);
p.Do(MatrixIndexA);
p.Do(MatrixIndexB);
p.Do(g_VtxDesc.Hex);
p.DoArray(arraybases, 16);
p.DoArray(arraystrides, 16);
p.Do(MatrixIndexA);
p.Do(MatrixIndexB);
p.Do(g_VtxDesc.Hex);
p.DoArray(g_VtxAttr, 8);
p.DoMarker("CP Memory");

Expand Down Expand Up @@ -162,7 +165,10 @@ void VideoSoftware::Shutdown()
// TODO: should be in Video_Cleanup
HwRasterizer::Shutdown();
SWRenderer::Shutdown();


// Do our OSD callbacks
OSD::DoCallbacks(OSD::OSD_SHUTDOWN);

GLInterface->Shutdown();
}

Expand Down

0 comments on commit 39a7096

Please sign in to comment.