Cocoa Port: Synchronize access to ClientDisplayView._hudString.
This commit is contained in:
parent
db4982f4bc
commit
fd6ed7b518
|
@ -60,6 +60,8 @@ ClientDisplayView::~ClientDisplayView()
|
||||||
FT_Done_FreeType(this->_ftLibrary);
|
FT_Done_FreeType(this->_ftLibrary);
|
||||||
this->_ftLibrary = NULL;
|
this->_ftLibrary = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&this->_mutexHUDString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDisplayView::__InstanceInit(const ClientDisplayViewProperties &props)
|
void ClientDisplayView::__InstanceInit(const ClientDisplayViewProperties &props)
|
||||||
|
@ -96,6 +98,7 @@ void ClientDisplayView::__InstanceInit(const ClientDisplayViewProperties &props)
|
||||||
|
|
||||||
memset(&_emuDisplayInfo, 0, sizeof(_emuDisplayInfo));
|
memset(&_emuDisplayInfo, 0, sizeof(_emuDisplayInfo));
|
||||||
_hudString = "\x01"; // Char value 0x01 will represent the "text box" character, which will always be first in the string.
|
_hudString = "\x01"; // Char value 0x01 will represent the "text box" character, which will always be first in the string.
|
||||||
|
_outHudString = _hudString;
|
||||||
_hudNeedsUpdate = true;
|
_hudNeedsUpdate = true;
|
||||||
_allowViewUpdates = true;
|
_allowViewUpdates = true;
|
||||||
|
|
||||||
|
@ -126,6 +129,8 @@ void ClientDisplayView::__InstanceInit(const ClientDisplayViewProperties &props)
|
||||||
_vf[NDSDisplayID_Touch] = new VideoFilter(GPU_FRAMEBUFFER_NATIVE_WIDTH, GPU_FRAMEBUFFER_NATIVE_HEIGHT, VideoFilterTypeID_None, 0);
|
_vf[NDSDisplayID_Touch] = new VideoFilter(GPU_FRAMEBUFFER_NATIVE_WIDTH, GPU_FRAMEBUFFER_NATIVE_HEIGHT, VideoFilterTypeID_None, 0);
|
||||||
_vf[NDSDisplayID_Main]->SetDstBufferPtr(_vfMasterDstBuffer);
|
_vf[NDSDisplayID_Main]->SetDstBufferPtr(_vfMasterDstBuffer);
|
||||||
_vf[NDSDisplayID_Touch]->SetDstBufferPtr(_vfMasterDstBuffer + (_vf[NDSDisplayID_Main]->GetDstWidth() * _vf[NDSDisplayID_Main]->GetDstHeight()));
|
_vf[NDSDisplayID_Touch]->SetDstBufferPtr(_vfMasterDstBuffer + (_vf[NDSDisplayID_Main]->GetDstWidth() * _vf[NDSDisplayID_Main]->GetDstHeight()));
|
||||||
|
|
||||||
|
pthread_mutex_init(&_mutexHUDString, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDisplayView::_UpdateHUDString()
|
void ClientDisplayView::_UpdateHUDString()
|
||||||
|
@ -167,8 +172,10 @@ void ClientDisplayView::_UpdateHUDString()
|
||||||
ss << "RTC: " << this->_ndsFrameInfo.rtcString << "\n";
|
ss << "RTC: " << this->_ndsFrameInfo.rtcString << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
this->_hudString = ss.str();
|
this->_hudString = ss.str();
|
||||||
this->_hudNeedsUpdate = true;
|
this->_hudNeedsUpdate = true;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDisplayView::_SetHUDShowInfoItem(bool &infoItemFlag, const bool visibleState)
|
void ClientDisplayView::_SetHUDShowInfoItem(bool &infoItemFlag, const bool visibleState)
|
||||||
|
@ -218,7 +225,9 @@ void ClientDisplayView::SetScaleFactor(const double scaleFactor)
|
||||||
|
|
||||||
void ClientDisplayView::_UpdateClientSize()
|
void ClientDisplayView::_UpdateClientSize()
|
||||||
{
|
{
|
||||||
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
this->_hudNeedsUpdate = true;
|
this->_hudNeedsUpdate = true;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDisplayView::_UpdateViewScale()
|
void ClientDisplayView::_UpdateViewScale()
|
||||||
|
@ -455,9 +464,13 @@ void ClientDisplayView::SetHUDInfo(const ClientFrameInfo &clientFrameInfo, const
|
||||||
this->_UpdateHUDString();
|
this->_UpdateHUDString();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& ClientDisplayView::GetHUDString() const
|
const std::string& ClientDisplayView::GetHUDString()
|
||||||
{
|
{
|
||||||
return this->_hudString;
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
|
this->_outHudString = this->_hudString;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
|
|
||||||
|
return this->_outHudString;
|
||||||
}
|
}
|
||||||
|
|
||||||
float ClientDisplayView::GetHUDObjectScale() const
|
float ClientDisplayView::GetHUDObjectScale() const
|
||||||
|
@ -547,14 +560,20 @@ void ClientDisplayView::SetHUDShowRTC(const bool visibleState)
|
||||||
this->UpdateView();
|
this->UpdateView();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientDisplayView::HUDNeedsUpdate() const
|
bool ClientDisplayView::HUDNeedsUpdate()
|
||||||
{
|
{
|
||||||
return this->_hudNeedsUpdate;
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
|
const bool needsUpdate = this->_hudNeedsUpdate;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
|
|
||||||
|
return needsUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientDisplayView::ClearHUDNeedsUpdate()
|
void ClientDisplayView::ClearHUDNeedsUpdate()
|
||||||
{
|
{
|
||||||
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
this->_hudNeedsUpdate = false;
|
this->_hudNeedsUpdate = false;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NDS GPU Interface
|
// NDS GPU Interface
|
||||||
|
@ -1169,8 +1188,12 @@ void ClientDisplay3DView::SetSourceDeposterize(bool useDeposterize)
|
||||||
|
|
||||||
void ClientDisplay3DView::SetHUDVertices(float viewportWidth, float viewportHeight, float *vtxBufferPtr)
|
void ClientDisplay3DView::SetHUDVertices(float viewportWidth, float viewportHeight, float *vtxBufferPtr)
|
||||||
{
|
{
|
||||||
const char *cString = this->_hudString.c_str();
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
const size_t length = this->_hudString.length();
|
std::string hudString = this->_hudString;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
|
|
||||||
|
const char *cString = hudString.c_str();
|
||||||
|
const size_t length = hudString.length();
|
||||||
const float charSize = this->_glyphSize;
|
const float charSize = this->_glyphSize;
|
||||||
const float lineHeight = charSize * 0.8f;
|
const float lineHeight = charSize * 0.8f;
|
||||||
const float textBoxTextOffset = charSize * 0.25f;
|
const float textBoxTextOffset = charSize * 0.25f;
|
||||||
|
@ -1253,8 +1276,12 @@ void ClientDisplay3DView::SetHUDVertices(float viewportWidth, float viewportHeig
|
||||||
|
|
||||||
void ClientDisplay3DView::SetHUDTextureCoordinates(float *texCoordBufferPtr)
|
void ClientDisplay3DView::SetHUDTextureCoordinates(float *texCoordBufferPtr)
|
||||||
{
|
{
|
||||||
const char *cString = this->_hudString.c_str();
|
pthread_mutex_lock(&this->_mutexHUDString);
|
||||||
const size_t length = this->_hudString.length();
|
std::string hudString = this->_hudString;
|
||||||
|
pthread_mutex_unlock(&this->_mutexHUDString);
|
||||||
|
|
||||||
|
const char *cString = hudString.c_str();
|
||||||
|
const size_t length = hudString.length();
|
||||||
|
|
||||||
for (size_t i = 0; i < length; i++)
|
for (size_t i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#ifndef _CLIENT_DISPLAY_VIEW_H_
|
#ifndef _CLIENT_DISPLAY_VIEW_H_
|
||||||
#define _CLIENT_DISPLAY_VIEW_H_
|
#define _CLIENT_DISPLAY_VIEW_H_
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "../../filter/videofilter.h"
|
#include "../../filter/videofilter.h"
|
||||||
|
@ -164,6 +165,7 @@ protected:
|
||||||
|
|
||||||
NDSDisplayInfo _emuDisplayInfo;
|
NDSDisplayInfo _emuDisplayInfo;
|
||||||
std::string _hudString;
|
std::string _hudString;
|
||||||
|
std::string _outHudString;
|
||||||
bool _hudNeedsUpdate;
|
bool _hudNeedsUpdate;
|
||||||
bool _allowViewUpdates;
|
bool _allowViewUpdates;
|
||||||
|
|
||||||
|
@ -177,6 +179,8 @@ protected:
|
||||||
size_t _vfMasterDstBufferSize;
|
size_t _vfMasterDstBufferSize;
|
||||||
VideoFilter *_vf[2];
|
VideoFilter *_vf[2];
|
||||||
|
|
||||||
|
pthread_mutex_t _mutexHUDString;
|
||||||
|
|
||||||
void _UpdateHUDString();
|
void _UpdateHUDString();
|
||||||
void _SetHUDShowInfoItem(bool &infoItemFlag, const bool visibleState);
|
void _SetHUDShowInfoItem(bool &infoItemFlag, const bool visibleState);
|
||||||
|
|
||||||
|
@ -237,7 +241,7 @@ public:
|
||||||
virtual void CopyHUDFont(const FT_Face &fontFace, const size_t glyphSize, const size_t glyphTileSize, GlyphInfo *glyphInfo);
|
virtual void CopyHUDFont(const FT_Face &fontFace, const size_t glyphSize, const size_t glyphTileSize, GlyphInfo *glyphInfo);
|
||||||
virtual void SetHUDInfo(const ClientFrameInfo &clientFrameInfo, const NDSFrameInfo &ndsFrameInfo);
|
virtual void SetHUDInfo(const ClientFrameInfo &clientFrameInfo, const NDSFrameInfo &ndsFrameInfo);
|
||||||
|
|
||||||
const std::string& GetHUDString() const;
|
const std::string& GetHUDString();
|
||||||
float GetHUDObjectScale() const;
|
float GetHUDObjectScale() const;
|
||||||
virtual void SetHUDObjectScale(float objectScale);
|
virtual void SetHUDObjectScale(float objectScale);
|
||||||
|
|
||||||
|
@ -255,7 +259,7 @@ public:
|
||||||
virtual void SetHUDShowCPULoadAverage(const bool visibleState);
|
virtual void SetHUDShowCPULoadAverage(const bool visibleState);
|
||||||
bool GetHUDShowRTC() const;
|
bool GetHUDShowRTC() const;
|
||||||
virtual void SetHUDShowRTC(const bool visibleState);
|
virtual void SetHUDShowRTC(const bool visibleState);
|
||||||
bool HUDNeedsUpdate() const;
|
bool HUDNeedsUpdate();
|
||||||
void ClearHUDNeedsUpdate();
|
void ClearHUDNeedsUpdate();
|
||||||
|
|
||||||
// Client view interface
|
// Client view interface
|
||||||
|
|
Loading…
Reference in New Issue