GPU:
- Auto-resolving the native framebuffer is now only performed if the frame isn’t skipped. - Add some callback routines for the beginning and ending of rendering a frame, and for the beginning and ending of rendering the 3D layer.
This commit is contained in:
parent
f3fd4e2ebc
commit
9f04d9076a
|
@ -723,7 +723,7 @@ void GPUEngineBase::_RenderLine_Clear(const u16 clearColor, const u16 l, u16 *ds
|
||||||
}
|
}
|
||||||
|
|
||||||
template<bool ISCUSTOMRENDERINGNEEDED>
|
template<bool ISCUSTOMRENDERINGNEEDED>
|
||||||
void GPUEngineBase::RenderLine(const u16 l, bool isFrameSkipRequested)
|
void GPUEngineBase::RenderLine(const u16 l)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2710,7 +2710,7 @@ void GPUEngineA::SetCustomFramebufferSize(size_t w, size_t h)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<bool ISCUSTOMRENDERINGNEEDED>
|
template<bool ISCUSTOMRENDERINGNEEDED>
|
||||||
void GPUEngineA::RenderLine(const u16 l, bool isFrameSkipRequested)
|
void GPUEngineA::RenderLine(const u16 l)
|
||||||
{
|
{
|
||||||
const NDSDisplayInfo &dispInfo = GPU->GetDisplayInfo();
|
const NDSDisplayInfo &dispInfo = GPU->GetDisplayInfo();
|
||||||
const size_t dstLineWidth = (ISCUSTOMRENDERINGNEEDED) ? dispInfo.customWidth : GPU_FRAMEBUFFER_NATIVE_WIDTH;
|
const size_t dstLineWidth = (ISCUSTOMRENDERINGNEEDED) ? dispInfo.customWidth : GPU_FRAMEBUFFER_NATIVE_WIDTH;
|
||||||
|
@ -3808,6 +3808,9 @@ void GPUEngineB::_RenderLine_Layer(const u16 l, u16 *dstColorLine, const size_t
|
||||||
|
|
||||||
GPUSubsystem::GPUSubsystem()
|
GPUSubsystem::GPUSubsystem()
|
||||||
{
|
{
|
||||||
|
_defaultEventHandler = new GPUEventHandlerDefault;
|
||||||
|
_event = _defaultEventHandler;
|
||||||
|
|
||||||
gfx3d_init();
|
gfx3d_init();
|
||||||
|
|
||||||
_engineMain = GPUEngineA::Allocate();
|
_engineMain = GPUEngineA::Allocate();
|
||||||
|
@ -3867,6 +3870,8 @@ GPUSubsystem::~GPUSubsystem()
|
||||||
_engineSub->FinalizeAndDeallocate();
|
_engineSub->FinalizeAndDeallocate();
|
||||||
|
|
||||||
gfx3d_deinit();
|
gfx3d_deinit();
|
||||||
|
|
||||||
|
delete _defaultEventHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
GPUSubsystem* GPUSubsystem::Allocate()
|
GPUSubsystem* GPUSubsystem::Allocate()
|
||||||
|
@ -3880,6 +3885,16 @@ void GPUSubsystem::FinalizeAndDeallocate()
|
||||||
free_aligned(this);
|
free_aligned(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GPUSubsystem::SetEventHandler(GPUEventHandler *eventHandler)
|
||||||
|
{
|
||||||
|
this->_event = eventHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
GPUEventHandler* GPUSubsystem::GetEventHandler()
|
||||||
|
{
|
||||||
|
return this->_event;
|
||||||
|
}
|
||||||
|
|
||||||
void GPUSubsystem::Reset()
|
void GPUSubsystem::Reset()
|
||||||
{
|
{
|
||||||
if (this->_customVRAM == NULL || this->_customVRAM == NULL || this->_customFramebuffer == NULL)
|
if (this->_customVRAM == NULL || this->_customVRAM == NULL || this->_customFramebuffer == NULL)
|
||||||
|
@ -4184,6 +4199,7 @@ void GPUSubsystem::RenderLine(const u16 l, bool isFrameSkipRequested)
|
||||||
if (l == 0)
|
if (l == 0)
|
||||||
{
|
{
|
||||||
CurrentRenderer->RenderFinish();
|
CurrentRenderer->RenderFinish();
|
||||||
|
this->_event->DidFrameBegin();
|
||||||
this->UpdateVRAM3DUsageProperties();
|
this->UpdateVRAM3DUsageProperties();
|
||||||
|
|
||||||
// Clear displays to black if they are turned off by the user.
|
// Clear displays to black if they are turned off by the user.
|
||||||
|
@ -4215,11 +4231,11 @@ void GPUSubsystem::RenderLine(const u16 l, bool isFrameSkipRequested)
|
||||||
{
|
{
|
||||||
if (this->_engineMain->isCustomRenderingNeeded)
|
if (this->_engineMain->isCustomRenderingNeeded)
|
||||||
{
|
{
|
||||||
this->_engineMain->RenderLine<true>(l, isFrameSkipRequested);
|
this->_engineMain->RenderLine<true>(l);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->_engineMain->RenderLine<false>(l, isFrameSkipRequested);
|
this->_engineMain->RenderLine<false>(l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4249,16 +4265,17 @@ void GPUSubsystem::RenderLine(const u16 l, bool isFrameSkipRequested)
|
||||||
{
|
{
|
||||||
this->_engineSub->ApplyMasterBrightness<false>();
|
this->_engineSub->ApplyMasterBrightness<false>();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (this->_willAutoResolveToCustomBuffer)
|
||||||
if (this->_willAutoResolveToCustomBuffer)
|
{
|
||||||
{
|
this->_engineMain->ResolveToCustomFramebuffer();
|
||||||
this->_engineMain->ResolveToCustomFramebuffer();
|
this->_engineSub->ResolveToCustomFramebuffer();
|
||||||
this->_engineSub->ResolveToCustomFramebuffer();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->_engineMain->FramebufferPostprocess();
|
this->_engineMain->FramebufferPostprocess();
|
||||||
this->_engineSub->FramebufferPostprocess();
|
this->_engineSub->FramebufferPostprocess();
|
||||||
|
this->_event->DidFrameEnd(isFrameSkipRequested);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ public:
|
||||||
|
|
||||||
template<GPUEngineID ENGINEID> void ParseAllRegisters();
|
template<GPUEngineID ENGINEID> void ParseAllRegisters();
|
||||||
|
|
||||||
template<bool ISCUSTOMRENDERINGNEEDED> void RenderLine(const u16 l, bool isFrameSkipRequested);
|
template<bool ISCUSTOMRENDERINGNEEDED> void RenderLine(const u16 l);
|
||||||
void FramebufferPostprocess();
|
void FramebufferPostprocess();
|
||||||
|
|
||||||
bool isCustomRenderingNeeded;
|
bool isCustomRenderingNeeded;
|
||||||
|
@ -1337,7 +1337,7 @@ public:
|
||||||
|
|
||||||
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool ISCUSTOMRENDERINGNEEDED> void _LineLarge8bpp(u16 *dstColorLine, const u16 lineIndex);
|
template<GPULayerID LAYERID, bool ISDEBUGRENDER, bool MOSAIC, bool ISCUSTOMRENDERINGNEEDED> void _LineLarge8bpp(u16 *dstColorLine, const u16 lineIndex);
|
||||||
|
|
||||||
template<bool ISCUSTOMRENDERINGNEEDED> void RenderLine(const u16 l, bool isFrameSkipRequested);
|
template<bool ISCUSTOMRENDERINGNEEDED> void RenderLine(const u16 l);
|
||||||
void FramebufferPostprocess();
|
void FramebufferPostprocess();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1376,12 +1376,36 @@ public:
|
||||||
void SetEngineByID(const GPUEngineID theID);
|
void SetEngineByID(const GPUEngineID theID);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GPUEventHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void DidFrameBegin() = 0;
|
||||||
|
virtual void DidFrameEnd(bool isFrameSkipped) = 0;
|
||||||
|
virtual void DidRender3DBegin() = 0;
|
||||||
|
virtual void DidRender3DEnd() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// All of the default event handler methods should do nothing.
|
||||||
|
// If a subclass doesn't need to override every method, then it might be easier
|
||||||
|
// if you subclass GPUEventHandlerDefault instead of GPUEventHandler.
|
||||||
|
class GPUEventHandlerDefault : public GPUEventHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void DidFrameBegin() {};
|
||||||
|
virtual void DidFrameEnd(bool isFrameSkipped) {};
|
||||||
|
virtual void DidRender3DBegin() {};
|
||||||
|
virtual void DidRender3DEnd() {};
|
||||||
|
};
|
||||||
|
|
||||||
class GPUSubsystem
|
class GPUSubsystem
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
GPUSubsystem();
|
GPUSubsystem();
|
||||||
~GPUSubsystem();
|
~GPUSubsystem();
|
||||||
|
|
||||||
|
GPUEventHandlerDefault *_defaultEventHandler;
|
||||||
|
GPUEventHandler *_event;
|
||||||
|
|
||||||
GPUEngineA *_engineMain;
|
GPUEngineA *_engineMain;
|
||||||
GPUEngineB *_engineSub;
|
GPUEngineB *_engineSub;
|
||||||
NDSDisplay *_displayMain;
|
NDSDisplay *_displayMain;
|
||||||
|
@ -1401,6 +1425,9 @@ public:
|
||||||
static GPUSubsystem* Allocate();
|
static GPUSubsystem* Allocate();
|
||||||
void FinalizeAndDeallocate();
|
void FinalizeAndDeallocate();
|
||||||
|
|
||||||
|
void SetEventHandler(GPUEventHandler *eventHandler);
|
||||||
|
GPUEventHandler* GetEventHandler();
|
||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
VRAM3DUsageProperties& GetVRAM3DUsageProperties();
|
VRAM3DUsageProperties& GetVRAM3DUsageProperties();
|
||||||
const NDSDisplayInfo& GetDisplayInfo(); // Frontends need to call this whenever they need to read the video buffers from the emulator core
|
const NDSDisplayInfo& GetDisplayInfo(); // Frontends need to call this whenever they need to read the video buffers from the emulator core
|
||||||
|
|
|
@ -2720,11 +2720,13 @@ Render3DError OpenGLRenderer_1_2::RenderFinish()
|
||||||
{
|
{
|
||||||
if (!this->_pixelReadNeedsFinish)
|
if (!this->_pixelReadNeedsFinish)
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!BEGINGL())
|
if(!BEGINGL())
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_BEGINGL_FAILED;
|
return OGLERROR_BEGINGL_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2747,6 +2749,7 @@ Render3DError OpenGLRenderer_1_2::RenderFinish()
|
||||||
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
||||||
this->_pixelReadNeedsFinish = false;
|
this->_pixelReadNeedsFinish = false;
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3287,11 +3290,13 @@ Render3DError OpenGLRenderer_1_5::RenderFinish()
|
||||||
{
|
{
|
||||||
if (!this->_pixelReadNeedsFinish)
|
if (!this->_pixelReadNeedsFinish)
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!BEGINGL())
|
if(!BEGINGL())
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_BEGINGL_FAILED;
|
return OGLERROR_BEGINGL_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3314,6 +3319,7 @@ Render3DError OpenGLRenderer_1_5::RenderFinish()
|
||||||
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
||||||
this->_pixelReadNeedsFinish = false;
|
this->_pixelReadNeedsFinish = false;
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4077,11 +4083,13 @@ Render3DError OpenGLRenderer_2_1::RenderFinish()
|
||||||
{
|
{
|
||||||
if (!this->_pixelReadNeedsFinish)
|
if (!this->_pixelReadNeedsFinish)
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!BEGINGL())
|
if(!BEGINGL())
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_BEGINGL_FAILED;
|
return OGLERROR_BEGINGL_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4097,5 +4105,6 @@ Render3DError OpenGLRenderer_2_1::RenderFinish()
|
||||||
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
||||||
this->_pixelReadNeedsFinish = false;
|
this->_pixelReadNeedsFinish = false;
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return OGLERROR_NOERR;
|
return OGLERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <libkern/OSAtomic.h>
|
#include <libkern/OSAtomic.h>
|
||||||
|
|
||||||
|
|
||||||
|
class GPUEventHandlerOSX;
|
||||||
|
|
||||||
@interface CocoaDSGPU : NSObject
|
@interface CocoaDSGPU : NSObject
|
||||||
{
|
{
|
||||||
UInt32 gpuStateFlags;
|
UInt32 gpuStateFlags;
|
||||||
|
@ -26,13 +29,14 @@
|
||||||
BOOL isCPUCoreCountAuto;
|
BOOL isCPUCoreCountAuto;
|
||||||
|
|
||||||
OSSpinLock spinlockGpuState;
|
OSSpinLock spinlockGpuState;
|
||||||
pthread_rwlock_t *rwlockProducer;
|
GPUEventHandlerOSX *gpuEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (assign) UInt32 gpuStateFlags;
|
@property (assign) UInt32 gpuStateFlags;
|
||||||
@property (assign) NSSize gpuDimensions;
|
@property (assign) NSSize gpuDimensions;
|
||||||
@property (assign) NSUInteger gpuScale;
|
@property (assign) NSUInteger gpuScale;
|
||||||
@property (assign) pthread_rwlock_t *rwlockProducer;
|
@property (readonly) pthread_rwlock_t *gpuFrameRWLock;
|
||||||
|
@property (assign) NSMutableArray *outputList;
|
||||||
|
|
||||||
@property (assign) BOOL layerMainGPU;
|
@property (assign) BOOL layerMainGPU;
|
||||||
@property (assign) BOOL layerMainBG0;
|
@property (assign) BOOL layerMainBG0;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "cocoa_GPU.h"
|
#import "cocoa_GPU.h"
|
||||||
|
#import "cocoa_output.h"
|
||||||
#import "cocoa_globals.h"
|
#import "cocoa_globals.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
@ -40,12 +41,41 @@ GPU3DInterface *core3DList[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GPUEventHandlerOSX : public GPUEventHandlerDefault
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
pthread_rwlock_t _rwlockFrame;
|
||||||
|
pthread_mutex_t _mutex3DRender;
|
||||||
|
NSMutableArray *_cdsOutputList;
|
||||||
|
bool _isRender3DLockHeld;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GPUEventHandlerOSX();
|
||||||
|
~GPUEventHandlerOSX();
|
||||||
|
|
||||||
|
void FramebufferLockWrite();
|
||||||
|
void FramebufferLockRead();
|
||||||
|
void FramebufferUnlock();
|
||||||
|
void Render3DLock();
|
||||||
|
void Render3DUnlock();
|
||||||
|
|
||||||
|
pthread_rwlock_t* GetFrameRWLock();
|
||||||
|
NSMutableArray* GetOutputList();
|
||||||
|
void SetOutputList(NSMutableArray *outputList);
|
||||||
|
|
||||||
|
virtual void DidFrameBegin();
|
||||||
|
virtual void DidFrameEnd(bool isFrameSkipped);
|
||||||
|
virtual void DidRender3DBegin();
|
||||||
|
virtual void DidRender3DEnd();
|
||||||
|
};
|
||||||
|
|
||||||
@implementation CocoaDSGPU
|
@implementation CocoaDSGPU
|
||||||
|
|
||||||
@dynamic gpuStateFlags;
|
@dynamic gpuStateFlags;
|
||||||
@dynamic gpuDimensions;
|
@dynamic gpuDimensions;
|
||||||
@dynamic gpuScale;
|
@dynamic gpuScale;
|
||||||
@synthesize rwlockProducer;
|
@dynamic gpuFrameRWLock;
|
||||||
|
@dynamic outputList;
|
||||||
|
|
||||||
@dynamic layerMainGPU;
|
@dynamic layerMainGPU;
|
||||||
@dynamic layerMainBG0;
|
@dynamic layerMainBG0;
|
||||||
|
@ -81,7 +111,6 @@ GPU3DInterface *core3DList[] = {
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlockGpuState = OS_SPINLOCK_INIT;
|
spinlockGpuState = OS_SPINLOCK_INIT;
|
||||||
rwlockProducer = NULL;
|
|
||||||
|
|
||||||
_gpuScale = 1;
|
_gpuScale = 1;
|
||||||
gpuStateFlags = GPUSTATE_MAIN_GPU_MASK |
|
gpuStateFlags = GPUSTATE_MAIN_GPU_MASK |
|
||||||
|
@ -104,6 +133,8 @@ GPU3DInterface *core3DList[] = {
|
||||||
&OSXOpenGLRendererEnd,
|
&OSXOpenGLRendererEnd,
|
||||||
&OSXOpenGLRendererFramebufferDidResize);
|
&OSXOpenGLRendererFramebufferDidResize);
|
||||||
|
|
||||||
|
gpuEvent = new GPUEventHandlerOSX;
|
||||||
|
GPU->SetEventHandler(gpuEvent);
|
||||||
GPU->SetWillAutoResolveToCustomBuffer(false);
|
GPU->SetWillAutoResolveToCustomBuffer(false);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -114,6 +145,8 @@ GPU3DInterface *core3DList[] = {
|
||||||
NDS_3D_ChangeCore(CORE3DLIST_NULL);
|
NDS_3D_ChangeCore(CORE3DLIST_NULL);
|
||||||
DestroyOpenGLRenderer();
|
DestroyOpenGLRenderer();
|
||||||
|
|
||||||
|
delete gpuEvent;
|
||||||
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,16 +182,20 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (void) setGpuDimensions:(NSSize)theDimensions
|
- (void) setGpuDimensions:(NSSize)theDimensions
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
|
gpuEvent->Render3DLock();
|
||||||
GPU->SetCustomFramebufferSize(theDimensions.width, theDimensions.height);
|
GPU->SetCustomFramebufferSize(theDimensions.width, theDimensions.height);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
gpuEvent->FramebufferUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSSize) gpuDimensions
|
- (NSSize) gpuDimensions
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
|
gpuEvent->Render3DLock();
|
||||||
const NSSize dimensions = NSMakeSize(GPU->GetCustomFramebufferWidth(), GPU->GetCustomFramebufferHeight());
|
const NSSize dimensions = NSMakeSize(GPU->GetCustomFramebufferWidth(), GPU->GetCustomFramebufferHeight());
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return dimensions;
|
return dimensions;
|
||||||
}
|
}
|
||||||
|
@ -174,98 +211,113 @@ GPU3DInterface *core3DList[] = {
|
||||||
return (NSUInteger)_gpuScale;
|
return (NSUInteger)_gpuScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (pthread_rwlock_t *) gpuFrameRWLock
|
||||||
|
{
|
||||||
|
return gpuEvent->GetFrameRWLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setOutputList:(NSMutableArray *)outputList
|
||||||
|
{
|
||||||
|
gpuEvent->SetOutputList(outputList);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSMutableArray *) outputList
|
||||||
|
{
|
||||||
|
return gpuEvent->GetOutputList();
|
||||||
|
}
|
||||||
|
|
||||||
- (void) setRender3DRenderingEngine:(NSInteger)methodID
|
- (void) setRender3DRenderingEngine:(NSInteger)methodID
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
NDS_3D_ChangeCore(methodID);
|
NDS_3D_ChangeCore(methodID);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSInteger) render3DRenderingEngine
|
- (NSInteger) render3DRenderingEngine
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const NSInteger methodID = (NSInteger)cur3DCore;
|
const NSInteger methodID = (NSInteger)cur3DCore;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return methodID;
|
return methodID;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state
|
- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_HighResolutionInterpolateColor = state ? true : false;
|
CommonSettings.GFX3D_HighResolutionInterpolateColor = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DHighPrecisionColorInterpolation
|
- (BOOL) render3DHighPrecisionColorInterpolation
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_HighResolutionInterpolateColor ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_HighResolutionInterpolateColor ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DEdgeMarking:(BOOL)state
|
- (void) setRender3DEdgeMarking:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_EdgeMark = state ? true : false;
|
CommonSettings.GFX3D_EdgeMark = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DEdgeMarking
|
- (BOOL) render3DEdgeMarking
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_EdgeMark ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_EdgeMark ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DFog:(BOOL)state
|
- (void) setRender3DFog:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_Fog = state ? true : false;
|
CommonSettings.GFX3D_Fog = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DFog
|
- (BOOL) render3DFog
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_Fog ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_Fog ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DTextures:(BOOL)state
|
- (void) setRender3DTextures:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_Texture = state ? true : false;
|
CommonSettings.GFX3D_Texture = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DTextures
|
- (BOOL) render3DTextures
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_Texture ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_Texture ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold
|
- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = threshold;
|
CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = threshold;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSUInteger) render3DDepthComparisonThreshold
|
- (NSUInteger) render3DDepthComparisonThreshold
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const NSUInteger threshold = (NSUInteger)CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack;
|
const NSUInteger threshold = (NSUInteger)CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return threshold;
|
return threshold;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +354,7 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
const NSInteger renderingEngineID = [self render3DRenderingEngine];
|
const NSInteger renderingEngineID = [self render3DRenderingEngine];
|
||||||
|
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
|
|
||||||
CommonSettings.num_cores = numberCores;
|
CommonSettings.num_cores = numberCores;
|
||||||
|
|
||||||
|
@ -311,71 +363,71 @@ GPU3DInterface *core3DList[] = {
|
||||||
NDS_3D_ChangeCore(renderingEngineID);
|
NDS_3D_ChangeCore(renderingEngineID);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSUInteger) render3DThreads
|
- (NSUInteger) render3DThreads
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const NSUInteger numberThreads = isCPUCoreCountAuto ? 0 : (NSUInteger)CommonSettings.num_cores;
|
const NSUInteger numberThreads = isCPUCoreCountAuto ? 0 : (NSUInteger)CommonSettings.num_cores;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return numberThreads;
|
return numberThreads;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DLineHack:(BOOL)state
|
- (void) setRender3DLineHack:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_LineHack = state ? true : false;
|
CommonSettings.GFX3D_LineHack = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DLineHack
|
- (BOOL) render3DLineHack
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_LineHack ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_LineHack ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DMultisample:(BOOL)state
|
- (void) setRender3DMultisample:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_Renderer_Multisample = state ? true : false;
|
CommonSettings.GFX3D_Renderer_Multisample = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DMultisample
|
- (BOOL) render3DMultisample
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_Renderer_Multisample ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_Renderer_Multisample ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setRender3DFragmentSamplingHack:(BOOL)state
|
- (void) setRender3DFragmentSamplingHack:(BOOL)state
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
CommonSettings.GFX3D_TXTHack = state ? true : false;
|
CommonSettings.GFX3D_TXTHack = state ? true : false;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) render3DFragmentSamplingHack
|
- (BOOL) render3DFragmentSamplingHack
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
const BOOL state = CommonSettings.GFX3D_TXTHack ? YES : NO;
|
const BOOL state = CommonSettings.GFX3D_TXTHack ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainGPU:(BOOL)gpuState
|
- (void) setLayerMainGPU:(BOOL)gpuState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetEnableState((gpuState) ? true : false);
|
GPU->GetEngineMain()->SetEnableState((gpuState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (gpuState) ? (gpuStateFlags | GPUSTATE_MAIN_GPU_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_GPU_MASK);
|
gpuStateFlags = (gpuState) ? (gpuStateFlags | GPUSTATE_MAIN_GPU_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_GPU_MASK);
|
||||||
|
@ -384,18 +436,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainGPU
|
- (BOOL) layerMainGPU
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL gpuState = GPU->GetEngineMain()->GetEnableState() ? YES : NO;
|
const BOOL gpuState = GPU->GetEngineMain()->GetEnableState() ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return gpuState;
|
return gpuState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainBG0:(BOOL)layerState
|
- (void) setLayerMainBG0:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetLayerEnableState(0, (layerState) ? true : false);
|
GPU->GetEngineMain()->SetLayerEnableState(GPULayerID_BG0, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG0_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG0_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG0_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG0_MASK);
|
||||||
|
@ -404,18 +456,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainBG0
|
- (BOOL) layerMainBG0
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(0);
|
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(GPULayerID_BG0);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainBG1:(BOOL)layerState
|
- (void) setLayerMainBG1:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetLayerEnableState(1, (layerState) ? true : false);
|
GPU->GetEngineMain()->SetLayerEnableState(GPULayerID_BG1, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG1_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG1_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG1_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG1_MASK);
|
||||||
|
@ -424,18 +476,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainBG1
|
- (BOOL) layerMainBG1
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(1);
|
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(GPULayerID_BG1);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainBG2:(BOOL)layerState
|
- (void) setLayerMainBG2:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetLayerEnableState(2, (layerState) ? true : false);
|
GPU->GetEngineMain()->SetLayerEnableState(GPULayerID_BG2, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG2_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG2_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG2_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG2_MASK);
|
||||||
|
@ -444,18 +496,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainBG2
|
- (BOOL) layerMainBG2
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(2);
|
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(GPULayerID_BG2);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainBG3:(BOOL)layerState
|
- (void) setLayerMainBG3:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetLayerEnableState(3, (layerState) ? true : false);
|
GPU->GetEngineMain()->SetLayerEnableState(GPULayerID_BG3, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG3_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG3_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_BG3_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_BG3_MASK);
|
||||||
|
@ -464,18 +516,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainBG3
|
- (BOOL) layerMainBG3
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(3);
|
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(GPULayerID_BG3);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerMainOBJ:(BOOL)layerState
|
- (void) setLayerMainOBJ:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineMain()->SetLayerEnableState(4, (layerState) ? true : false);
|
GPU->GetEngineMain()->SetLayerEnableState(GPULayerID_OBJ, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_OBJ_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_OBJ_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_MAIN_OBJ_MASK) : (gpuStateFlags & ~GPUSTATE_MAIN_OBJ_MASK);
|
||||||
|
@ -484,18 +536,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerMainOBJ
|
- (BOOL) layerMainOBJ
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(4);
|
const BOOL layerState = GPU->GetEngineMain()->GetLayerEnableState(GPULayerID_OBJ);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubGPU:(BOOL)gpuState
|
- (void) setLayerSubGPU:(BOOL)gpuState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetEnableState((gpuState) ? true : false);
|
GPU->GetEngineSub()->SetEnableState((gpuState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (gpuState) ? (gpuStateFlags | GPUSTATE_SUB_GPU_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_GPU_MASK);
|
gpuStateFlags = (gpuState) ? (gpuStateFlags | GPUSTATE_SUB_GPU_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_GPU_MASK);
|
||||||
|
@ -504,18 +556,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubGPU
|
- (BOOL) layerSubGPU
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL gpuState = GPU->GetEngineSub()->GetEnableState() ? YES : NO;
|
const BOOL gpuState = GPU->GetEngineSub()->GetEnableState() ? YES : NO;
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return gpuState;
|
return gpuState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubBG0:(BOOL)layerState
|
- (void) setLayerSubBG0:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetLayerEnableState(0, (layerState) ? true : false);
|
GPU->GetEngineSub()->SetLayerEnableState(GPULayerID_BG0, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG0_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG0_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG0_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG0_MASK);
|
||||||
|
@ -524,18 +576,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubBG0
|
- (BOOL) layerSubBG0
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(0);
|
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(GPULayerID_BG0);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubBG1:(BOOL)layerState
|
- (void) setLayerSubBG1:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetLayerEnableState(1, (layerState) ? true : false);
|
GPU->GetEngineSub()->SetLayerEnableState(GPULayerID_BG1, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG1_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG1_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG1_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG1_MASK);
|
||||||
|
@ -544,18 +596,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubBG1
|
- (BOOL) layerSubBG1
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(1);
|
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(GPULayerID_BG1);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubBG2:(BOOL)layerState
|
- (void) setLayerSubBG2:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetLayerEnableState(2, (layerState) ? true : false);
|
GPU->GetEngineSub()->SetLayerEnableState(GPULayerID_BG2, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG2_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG2_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG2_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG2_MASK);
|
||||||
|
@ -564,18 +616,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubBG2
|
- (BOOL) layerSubBG2
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(2);
|
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(GPULayerID_BG2);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubBG3:(BOOL)layerState
|
- (void) setLayerSubBG3:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetLayerEnableState(3, (layerState) ? true : false);
|
GPU->GetEngineSub()->SetLayerEnableState(GPULayerID_BG3, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG3_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG3_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_BG3_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_BG3_MASK);
|
||||||
|
@ -584,18 +636,18 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubBG3
|
- (BOOL) layerSubBG3
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(3);
|
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(GPULayerID_BG3);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLayerSubOBJ:(BOOL)layerState
|
- (void) setLayerSubOBJ:(BOOL)layerState
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->GetEngineSub()->SetLayerEnableState(4, (layerState) ? true : false);
|
GPU->GetEngineSub()->SetLayerEnableState(GPULayerID_OBJ, (layerState) ? true : false);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
OSSpinLockLock(&spinlockGpuState);
|
OSSpinLockLock(&spinlockGpuState);
|
||||||
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_OBJ_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_OBJ_MASK);
|
gpuStateFlags = (layerState) ? (gpuStateFlags | GPUSTATE_SUB_OBJ_MASK) : (gpuStateFlags & ~GPUSTATE_SUB_OBJ_MASK);
|
||||||
|
@ -604,9 +656,9 @@ GPU3DInterface *core3DList[] = {
|
||||||
|
|
||||||
- (BOOL) layerSubOBJ
|
- (BOOL) layerSubOBJ
|
||||||
{
|
{
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockRead();
|
||||||
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(4);
|
const BOOL layerState = GPU->GetEngineSub()->GetLayerEnableState(GPULayerID_OBJ);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
|
|
||||||
return layerState;
|
return layerState;
|
||||||
}
|
}
|
||||||
|
@ -620,31 +672,120 @@ GPU3DInterface *core3DList[] = {
|
||||||
{
|
{
|
||||||
NSString *theString = @"Uninitialized";
|
NSString *theString = @"Uninitialized";
|
||||||
|
|
||||||
pthread_rwlock_rdlock(self.rwlockProducer);
|
gpuEvent->Render3DLock();
|
||||||
|
|
||||||
if(gpu3D == NULL)
|
if(gpu3D == NULL)
|
||||||
{
|
{
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
return theString;
|
return theString;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *theName = gpu3D->name;
|
const char *theName = gpu3D->name;
|
||||||
theString = [NSString stringWithCString:theName encoding:NSUTF8StringEncoding];
|
theString = [NSString stringWithCString:theName encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->Render3DUnlock();
|
||||||
|
|
||||||
return theString;
|
return theString;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) clearWithColor:(const uint16_t)colorBGRA5551
|
- (void) clearWithColor:(const uint16_t)colorBGRA5551
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(self.rwlockProducer);
|
gpuEvent->FramebufferLockWrite();
|
||||||
GPU->ClearWithColor(colorBGRA5551);
|
GPU->ClearWithColor(colorBGRA5551);
|
||||||
pthread_rwlock_unlock(self.rwlockProducer);
|
gpuEvent->FramebufferUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
GPUEventHandlerOSX::GPUEventHandlerOSX()
|
||||||
|
{
|
||||||
|
_isRender3DLockHeld = false;
|
||||||
|
pthread_rwlock_init(&_rwlockFrame, NULL);
|
||||||
|
pthread_mutex_init(&_mutex3DRender, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
GPUEventHandlerOSX::~GPUEventHandlerOSX()
|
||||||
|
{
|
||||||
|
pthread_rwlock_destroy(&this->_rwlockFrame);
|
||||||
|
pthread_mutex_destroy(&this->_mutex3DRender);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::DidFrameBegin()
|
||||||
|
{
|
||||||
|
this->FramebufferLockWrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::DidFrameEnd(bool isFrameSkipped)
|
||||||
|
{
|
||||||
|
this->FramebufferUnlock();
|
||||||
|
|
||||||
|
if (!isFrameSkipped)
|
||||||
|
{
|
||||||
|
for (CocoaDSOutput *cdsOutput in this->_cdsOutputList)
|
||||||
|
{
|
||||||
|
if ([cdsOutput isKindOfClass:[CocoaDSDisplay class]])
|
||||||
|
{
|
||||||
|
[cdsOutput doCoreEmuFrame];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::DidRender3DBegin()
|
||||||
|
{
|
||||||
|
this->_isRender3DLockHeld = true;
|
||||||
|
this->Render3DLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::DidRender3DEnd()
|
||||||
|
{
|
||||||
|
if (this->_isRender3DLockHeld)
|
||||||
|
{
|
||||||
|
this->Render3DUnlock();
|
||||||
|
this->_isRender3DLockHeld = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::FramebufferLockWrite()
|
||||||
|
{
|
||||||
|
pthread_rwlock_wrlock(&this->_rwlockFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::FramebufferLockRead()
|
||||||
|
{
|
||||||
|
pthread_rwlock_rdlock(&this->_rwlockFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::FramebufferUnlock()
|
||||||
|
{
|
||||||
|
pthread_rwlock_unlock(&this->_rwlockFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::Render3DLock()
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&this->_mutex3DRender);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::Render3DUnlock()
|
||||||
|
{
|
||||||
|
pthread_mutex_unlock(&this->_mutex3DRender);
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_rwlock_t* GPUEventHandlerOSX::GetFrameRWLock()
|
||||||
|
{
|
||||||
|
return &this->_rwlockFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSMutableArray* GPUEventHandlerOSX::GetOutputList()
|
||||||
|
{
|
||||||
|
return this->_cdsOutputList;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUEventHandlerOSX::SetOutputList(NSMutableArray *outputList)
|
||||||
|
{
|
||||||
|
this->_cdsOutputList = outputList;
|
||||||
|
}
|
||||||
|
|
||||||
CGLContextObj OSXOpenGLRendererContext = NULL;
|
CGLContextObj OSXOpenGLRendererContext = NULL;
|
||||||
CGLPBufferObj OSXOpenGLRendererPBuffer = NULL;
|
CGLPBufferObj OSXOpenGLRendererPBuffer = NULL;
|
||||||
|
|
||||||
|
|
|
@ -213,7 +213,7 @@ volatile bool execute = true;
|
||||||
sp.sched_priority = sched_get_priority_max(thePolicy);
|
sp.sched_priority = sched_get_priority_max(thePolicy);
|
||||||
pthread_setschedparam(coreThread, thePolicy, &sp);
|
pthread_setschedparam(coreThread, thePolicy, &sp);
|
||||||
|
|
||||||
[cdsGPU setRwlockProducer:self.rwlockCoreExecute];
|
[cdsGPU setOutputList:cdsOutputList];
|
||||||
|
|
||||||
OSXDriver *newDriver = new OSXDriver;
|
OSXDriver *newDriver = new OSXDriver;
|
||||||
newDriver->SetCoreThreadMutexLock(&threadParam.mutexThreadExecute);
|
newDriver->SetCoreThreadMutexLock(&threadParam.mutexThreadExecute);
|
||||||
|
@ -950,7 +950,16 @@ volatile bool execute = true;
|
||||||
- (void) addOutput:(CocoaDSOutput *)theOutput
|
- (void) addOutput:(CocoaDSOutput *)theOutput
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&threadParam.mutexOutputList);
|
pthread_mutex_lock(&threadParam.mutexOutputList);
|
||||||
[theOutput setRwlockProducer:[self rwlockCoreExecute]];
|
|
||||||
|
if ([theOutput isKindOfClass:[CocoaDSDisplay class]])
|
||||||
|
{
|
||||||
|
[theOutput setRwlockProducer:[[self cdsGPU] gpuFrameRWLock]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[theOutput setRwlockProducer:[self rwlockCoreExecute]];
|
||||||
|
}
|
||||||
|
|
||||||
[[self cdsOutputList] addObject:theOutput];
|
[[self cdsOutputList] addObject:theOutput];
|
||||||
pthread_mutex_unlock(&threadParam.mutexOutputList);
|
pthread_mutex_unlock(&threadParam.mutexOutputList);
|
||||||
}
|
}
|
||||||
|
@ -1145,12 +1154,10 @@ static void* RunCoreThread(void *arg)
|
||||||
{
|
{
|
||||||
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
||||||
{
|
{
|
||||||
if (param->framesToSkip > 0 && [cdsOutput isKindOfClass:[CocoaDSDisplay class]])
|
if (![cdsOutput isKindOfClass:[CocoaDSDisplay class]])
|
||||||
{
|
{
|
||||||
continue;
|
[cdsOutput doCoreEmuFrame];
|
||||||
}
|
}
|
||||||
|
|
||||||
[cdsOutput doCoreEmuFrame];
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1159,7 +1166,10 @@ static void* RunCoreThread(void *arg)
|
||||||
{
|
{
|
||||||
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
||||||
{
|
{
|
||||||
[cdsOutput doCoreEmuFrame];
|
if (![cdsOutput isKindOfClass:[CocoaDSDisplay class]])
|
||||||
|
{
|
||||||
|
[cdsOutput doCoreEmuFrame];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1168,7 +1178,7 @@ static void* RunCoreThread(void *arg)
|
||||||
{
|
{
|
||||||
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
for(CocoaDSOutput *cdsOutput in cdsOutputList)
|
||||||
{
|
{
|
||||||
if ([cdsOutput isKindOfClass:[CocoaDSDisplay class]] && (param->framesToSkip == 0 || frameNum >= param->frameJumpTarget))
|
if (![cdsOutput isKindOfClass:[CocoaDSDisplay class]])
|
||||||
{
|
{
|
||||||
[cdsOutput doCoreEmuFrame];
|
[cdsOutput doCoreEmuFrame];
|
||||||
}
|
}
|
||||||
|
|
|
@ -559,7 +559,6 @@ void gfx3d_init()
|
||||||
|
|
||||||
makeTables();
|
makeTables();
|
||||||
Render3D_Init();
|
Render3D_Init();
|
||||||
gfx3d_reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfx3d_deinit()
|
void gfx3d_deinit()
|
||||||
|
|
|
@ -1933,6 +1933,7 @@ Render3DError SoftRasterizerRenderer::Render(const GFX3D &engine)
|
||||||
{
|
{
|
||||||
Render3DError error = RENDER3DERROR_NOERR;
|
Render3DError error = RENDER3DERROR_NOERR;
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DBegin();
|
||||||
error = this->BeginRender(engine);
|
error = this->BeginRender(engine);
|
||||||
if (error != RENDER3DERROR_NOERR)
|
if (error != RENDER3DERROR_NOERR)
|
||||||
{
|
{
|
||||||
|
@ -1970,6 +1971,7 @@ Render3DError SoftRasterizerRenderer::RenderFinish()
|
||||||
{
|
{
|
||||||
if (!this->_renderGeometryNeedsFinish)
|
if (!this->_renderGeometryNeedsFinish)
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return RENDER3DERROR_NOERR;
|
return RENDER3DERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2005,6 +2007,7 @@ Render3DError SoftRasterizerRenderer::RenderFinish()
|
||||||
|
|
||||||
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
this->FlushFramebuffer(GPU->GetEngineMain()->Get3DFramebufferRGBA6665(), GPU->GetEngineMain()->Get3DFramebufferRGBA5551());
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return RENDER3DERROR_NOERR;
|
return RENDER3DERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -437,6 +437,7 @@ Render3DError Render3D::Render(const GFX3D &engine)
|
||||||
{
|
{
|
||||||
Render3DError error = RENDER3DERROR_NOERR;
|
Render3DError error = RENDER3DERROR_NOERR;
|
||||||
|
|
||||||
|
GPU->GetEventHandler()->DidRender3DBegin();
|
||||||
error = this->BeginRender(engine);
|
error = this->BeginRender(engine);
|
||||||
if (error != RENDER3DERROR_NOERR)
|
if (error != RENDER3DERROR_NOERR)
|
||||||
{
|
{
|
||||||
|
@ -465,6 +466,7 @@ Render3DError Render3D::Render(const GFX3D &engine)
|
||||||
|
|
||||||
Render3DError Render3D::RenderFinish()
|
Render3DError Render3D::RenderFinish()
|
||||||
{
|
{
|
||||||
|
GPU->GetEventHandler()->DidRender3DEnd();
|
||||||
return RENDER3DERROR_NOERR;
|
return RENDER3DERROR_NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue