Cocoa Port (OpenEmu Plug-in): Add OpenGL as an option for the emulated GPU rendering engine.

- Now that we can use OpenGL, we can increase the 3D render scaling to up to 8x for machines that can handle it.
- Also add the Fragment Sampling Hack option for SoftRasterizer for certain games that need it to 'fix' texture rendering.
- Also add the Smooth Textures option for OpenGL for games that can benefit from it.
This commit is contained in:
rogerman 2022-05-06 18:23:52 -07:00
parent e90ac6cc43
commit 3c04e8f4c7
3 changed files with 139 additions and 48 deletions

View File

@ -172,7 +172,6 @@ GPU3DInterface *core3DList[GPU_3D_RENDERER_COUNT+1] = {
bool isTempContextCreated = OSXOpenGLRendererInit(); bool isTempContextCreated = OSXOpenGLRendererInit();
if (isTempContextCreated) if (isTempContextCreated)
{ {
CGLContextObj prevContext = CGLGetCurrentContext();
OSXOpenGLRendererBegin(); OSXOpenGLRendererBegin();
GLint maxSamplesOGL = 0; GLint maxSamplesOGL = 0;
@ -187,7 +186,6 @@ GPU3DInterface *core3DList[GPU_3D_RENDERER_COUNT+1] = {
OSXOpenGLRendererEnd(); OSXOpenGLRendererEnd();
DestroyOpenGLRenderer(); DestroyOpenGLRenderer();
CGLSetCurrentContext(prevContext);
} }
return self; return self;
@ -1817,6 +1815,7 @@ bool GPUEventHandlerAsync::GetRender3DNeedsFinish()
#pragma mark - #pragma mark -
CGLContextObj OSXOpenGLRendererContext = NULL; CGLContextObj OSXOpenGLRendererContext = NULL;
CGLContextObj OSXOpenGLRendererContextPrev = NULL;
SILENCE_DEPRECATION_MACOS_10_7( CGLPBufferObj OSXOpenGLRendererPBuffer = NULL ); SILENCE_DEPRECATION_MACOS_10_7( CGLPBufferObj OSXOpenGLRendererPBuffer = NULL );
bool OSXOpenGLRendererInit() bool OSXOpenGLRendererInit()
@ -1832,6 +1831,7 @@ bool OSXOpenGLRendererInit()
bool OSXOpenGLRendererBegin() bool OSXOpenGLRendererBegin()
{ {
OSXOpenGLRendererContextPrev = CGLGetCurrentContext();
CGLSetCurrentContext(OSXOpenGLRendererContext); CGLSetCurrentContext(OSXOpenGLRendererContext);
return true; return true;
@ -1839,7 +1839,7 @@ bool OSXOpenGLRendererBegin()
void OSXOpenGLRendererEnd() void OSXOpenGLRendererEnd()
{ {
CGLSetCurrentContext(OSXOpenGLRendererContextPrev);
} }
bool OSXOpenGLRendererFramebufferDidResize(const bool isFBOSupported, size_t w, size_t h) bool OSXOpenGLRendererFramebufferDidResize(const bool isFBOSupported, size_t w, size_t h)
@ -1944,11 +1944,14 @@ void DestroyOpenGLRenderer()
return; return;
} }
OSXOpenGLRendererEnd();
SILENCE_DEPRECATION_MACOS_10_7( CGLReleasePBuffer(OSXOpenGLRendererPBuffer) ); SILENCE_DEPRECATION_MACOS_10_7( CGLReleasePBuffer(OSXOpenGLRendererPBuffer) );
OSXOpenGLRendererPBuffer = NULL; OSXOpenGLRendererPBuffer = NULL;
CGLReleaseContext(OSXOpenGLRendererContext); CGLReleaseContext(OSXOpenGLRendererContext);
OSXOpenGLRendererContext = NULL; OSXOpenGLRendererContext = NULL;
OSXOpenGLRendererContextPrev = NULL;
} }
void RequestOpenGLRenderer_3_2(bool request_3_2) void RequestOpenGLRenderer_3_2(bool request_3_2)

View File

@ -88,14 +88,24 @@ class OE_OGLDisplayPresenter;
#define NDSDISPLAYMODE_NAMEKEY_HUD_REALTIMECLOCK "Real-Time Clock" #define NDSDISPLAYMODE_NAMEKEY_HUD_REALTIMECLOCK "Real-Time Clock"
#define NDSDISPLAYMODE_NAMEKEY_HUD_INPUT "Input" #define NDSDISPLAYMODE_NAMEKEY_HUD_INPUT "Input"
#define NDSDISPLAYMODE_NAMEKEY_GPU_ENGINE_SOFTWARE "Use SoftRasterizer Engine"
#define NDSDISPLAYMODE_NAMEKEY_GPU_ENGINE_OPENGL "Use OpenGL Engine"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_1X "1x Native Resolution" #define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_1X "1x Native Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_2X "2x Resolution" #define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_2X "2x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_3X "3x Resolution" #define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_3X "3x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_4X "4x Resolution" #define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_4X "4x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_5X "5x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_6X "6x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_7X "7x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_8X "8x Resolution"
#define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_1X "1x Native Texture" #define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_1X "1x Native Texture"
#define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_2X "2x Texture Upscaling" #define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_2X "2x Texture Upscaling"
#define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_4X "4x Texture Upscaling" #define NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_4X "4x Texture Upscaling"
#define NDSDISPLAYMODE_NAMEKEY_GPU_SOFTWARE_FRAGMENTSAMPLINGHACK "Fragment Sampling Hack"
#define NDSDISPLAYMODE_NAMEKEY_GPU_OPENGL_SMOOTHTEXTURES "Smooth Textures"
#define NDSDISPLAYMODE_PREFKEY_DISPLAYMODE "displayMode" #define NDSDISPLAYMODE_PREFKEY_DISPLAYMODE "displayMode"
#define NDSDISPLAYMODE_PREFKEY_LAYOUT "layout" #define NDSDISPLAYMODE_PREFKEY_LAYOUT "layout"
@ -113,6 +123,9 @@ class OE_OGLDisplayPresenter;
#define NDSDISPLAYMODE_PREFKEY_HUD_CPULOADAVERAGE "hud_cpuloadaverage" #define NDSDISPLAYMODE_PREFKEY_HUD_CPULOADAVERAGE "hud_cpuloadaverage"
#define NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK "hud_realtimeclock" #define NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK "hud_realtimeclock"
#define NDSDISPLAYMODE_PREFKEY_HUD_INPUT "hud_input" #define NDSDISPLAYMODE_PREFKEY_HUD_INPUT "hud_input"
#define NDSDISPLAYMODE_PREFKEY_GPU_ENGINE "gpu_engine"
#define NDSDISPLAYMODE_PREFKEY_GPU_SOFTWARE_FRAGMENTSAMPLINGHACK "gpu_software_fragmentsamplinghack"
#define NDSDISPLAYMODE_PREFKEY_GPU_OPENGL_SMOOTHTEXTURES "gpu_opengl_smoothtextures"
#define NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING "3D_renderscaling" #define NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING "3D_renderscaling"
#define NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING "3D_texturescaling" #define NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING "3D_texturescaling"
@ -164,10 +177,20 @@ enum NDSDisplayOptionID
NDSDisplayOptionID_HUD_RealTimeClock, NDSDisplayOptionID_HUD_RealTimeClock,
NDSDisplayOptionID_HUD_Input, NDSDisplayOptionID_HUD_Input,
NDSDisplayOptionID_GPU_Engine_Software,
NDSDisplayOptionID_GPU_Engine_OpenGL,
NDSDisplayOptionID_GPU_Software_FragmentSamplingHack,
NDSDisplayOptionID_GPU_OpenGL_SmoothTextures,
NDSDisplayOptionID_3D_RenderScaling_1x, NDSDisplayOptionID_3D_RenderScaling_1x,
NDSDisplayOptionID_3D_RenderScaling_2x, NDSDisplayOptionID_3D_RenderScaling_2x,
NDSDisplayOptionID_3D_RenderScaling_3x, NDSDisplayOptionID_3D_RenderScaling_3x,
NDSDisplayOptionID_3D_RenderScaling_4x, NDSDisplayOptionID_3D_RenderScaling_4x,
NDSDisplayOptionID_3D_RenderScaling_5x,
NDSDisplayOptionID_3D_RenderScaling_6x,
NDSDisplayOptionID_3D_RenderScaling_7x,
NDSDisplayOptionID_3D_RenderScaling_8x,
NDSDisplayOptionID_3D_TextureScaling_1x, NDSDisplayOptionID_3D_TextureScaling_1x,
NDSDisplayOptionID_3D_TextureScaling_2x, NDSDisplayOptionID_3D_TextureScaling_2x,
@ -211,10 +234,17 @@ enum NDSDisplayOptionID
(1ULL << NDSDisplayOptionID_VideoSourceTouch_ForceMain) | \ (1ULL << NDSDisplayOptionID_VideoSourceTouch_ForceMain) | \
(1ULL << NDSDisplayOptionID_VideoSourceTouch_ForceSub)) (1ULL << NDSDisplayOptionID_VideoSourceTouch_ForceSub))
#define NDSDISPLAYMODE_GROUPBITMASK_GPUENGINE ((1ULL << NDSDisplayOptionID_GPU_Engine_Software) | \
(1ULL << NDSDisplayOptionID_GPU_Engine_OpenGL))
#define NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING ((1ULL << NDSDisplayOptionID_3D_RenderScaling_1x) | \ #define NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING ((1ULL << NDSDisplayOptionID_3D_RenderScaling_1x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_2x) | \ (1ULL << NDSDisplayOptionID_3D_RenderScaling_2x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_3x) | \ (1ULL << NDSDisplayOptionID_3D_RenderScaling_3x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_4x)) (1ULL << NDSDisplayOptionID_3D_RenderScaling_4x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_5x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_6x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_7x) | \
(1ULL << NDSDisplayOptionID_3D_RenderScaling_8x))
#define NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING ((1ULL << NDSDisplayOptionID_3D_TextureScaling_1x) | \ #define NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING ((1ULL << NDSDisplayOptionID_3D_TextureScaling_1x) | \
(1ULL << NDSDisplayOptionID_3D_TextureScaling_2x) | \ (1ULL << NDSDisplayOptionID_3D_TextureScaling_2x) | \

View File

@ -85,10 +85,20 @@ static const OEMenuItemDesc kDisplayModeItem[NDSDisplayOptionID_Count] = {
{ @NDSDISPLAYMODE_NAMEKEY_HUD_REALTIMECLOCK, @NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK, 0, nil }, { @NDSDISPLAYMODE_NAMEKEY_HUD_REALTIMECLOCK, @NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK, 0, nil },
{ @NDSDISPLAYMODE_NAMEKEY_HUD_INPUT, @NDSDISPLAYMODE_PREFKEY_HUD_INPUT, 0, nil }, { @NDSDISPLAYMODE_NAMEKEY_HUD_INPUT, @NDSDISPLAYMODE_PREFKEY_HUD_INPUT, 0, nil },
{ @NDSDISPLAYMODE_NAMEKEY_GPU_ENGINE_SOFTWARE, @NDSDISPLAYMODE_PREFKEY_GPU_ENGINE, NDSDISPLAYMODE_GROUPBITMASK_GPUENGINE, nil },
{ @NDSDISPLAYMODE_NAMEKEY_GPU_ENGINE_OPENGL, @NDSDISPLAYMODE_PREFKEY_GPU_ENGINE, NDSDISPLAYMODE_GROUPBITMASK_GPUENGINE, nil },
{ @NDSDISPLAYMODE_NAMEKEY_GPU_SOFTWARE_FRAGMENTSAMPLINGHACK, @NDSDISPLAYMODE_PREFKEY_GPU_SOFTWARE_FRAGMENTSAMPLINGHACK, 0, nil },
{ @NDSDISPLAYMODE_NAMEKEY_GPU_OPENGL_SMOOTHTEXTURES, @NDSDISPLAYMODE_PREFKEY_GPU_OPENGL_SMOOTHTEXTURES, 0, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_1X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_1X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_2X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_2X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_3X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_3X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_4X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_4X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_5X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_6X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_7X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_RENDERSCALING_8X, @NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING, NDSDISPLAYMODE_GROUPBITMASK_RENDERSCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_1X, @NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING, NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_1X, @NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING, NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING, nil },
{ @NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_2X, @NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING, NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING, nil }, { @NDSDISPLAYMODE_NAMEKEY_3D_TEXTURESCALING_2X, @NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING, NDSDISPLAYMODE_GROUPBITMASK_TEXTURESCALING, nil },
@ -104,6 +114,7 @@ static const uint64_t kDisplayModeStatesDefault = (1LLU << NDSDisplayOptionID_Mo
(1LLU << NDSDisplayOptionID_VideoSourceTouch_NDS) | (1LLU << NDSDisplayOptionID_VideoSourceTouch_NDS) |
(1LLU << NDSDisplayOptionID_HUD_ExecutionSpeed) | (1LLU << NDSDisplayOptionID_HUD_ExecutionSpeed) |
(1LLU << NDSDisplayOptionID_HUD_VideoFPS) | (1LLU << NDSDisplayOptionID_HUD_VideoFPS) |
(1LLU << NDSDisplayOptionID_GPU_Engine_Software) |
(1LLU << NDSDisplayOptionID_3D_RenderScaling_1x) | (1LLU << NDSDisplayOptionID_3D_RenderScaling_1x) |
(1LLU << NDSDisplayOptionID_3D_TextureScaling_1x); (1LLU << NDSDisplayOptionID_3D_TextureScaling_1x);
@ -272,10 +283,20 @@ volatile bool execute = true;
[NSNumber numberWithInteger:NDSDisplayOptionID_HUD_RealTimeClock], kDisplayModeItem[NDSDisplayOptionID_HUD_RealTimeClock].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_HUD_RealTimeClock], kDisplayModeItem[NDSDisplayOptionID_HUD_RealTimeClock].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_HUD_Input], kDisplayModeItem[NDSDisplayOptionID_HUD_Input].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_HUD_Input], kDisplayModeItem[NDSDisplayOptionID_HUD_Input].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_GPU_Engine_Software], kDisplayModeItem[NDSDisplayOptionID_GPU_Engine_Software].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_GPU_Engine_OpenGL], kDisplayModeItem[NDSDisplayOptionID_GPU_Engine_OpenGL].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_GPU_Software_FragmentSamplingHack], kDisplayModeItem[NDSDisplayOptionID_GPU_Software_FragmentSamplingHack].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_GPU_OpenGL_SmoothTextures], kDisplayModeItem[NDSDisplayOptionID_GPU_OpenGL_SmoothTextures].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_1x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_1x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_1x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_1x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_2x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_2x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_2x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_2x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_3x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_3x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_3x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_3x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_4x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_4x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_4x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_4x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_5x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_5x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_6x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_6x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_7x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_7x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_RenderScaling_8x], kDisplayModeItem[NDSDisplayOptionID_3D_RenderScaling_8x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_TextureScaling_1x], kDisplayModeItem[NDSDisplayOptionID_3D_TextureScaling_1x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_TextureScaling_1x], kDisplayModeItem[NDSDisplayOptionID_3D_TextureScaling_1x].nameKey,
[NSNumber numberWithInteger:NDSDisplayOptionID_3D_TextureScaling_2x], kDisplayModeItem[NDSDisplayOptionID_3D_TextureScaling_2x].nameKey, [NSNumber numberWithInteger:NDSDisplayOptionID_3D_TextureScaling_2x], kDisplayModeItem[NDSDisplayOptionID_3D_TextureScaling_2x].nameKey,
@ -328,6 +349,8 @@ volatile bool execute = true;
cdsGPU = [[CocoaDSGPU alloc] init]; cdsGPU = [[CocoaDSGPU alloc] init];
[cdsGPU setRender3DThreads:0]; // Pass 0 to automatically set the number of rendering threads [cdsGPU setRender3DThreads:0]; // Pass 0 to automatically set the number of rendering threads
[cdsGPU setRender3DRenderingEngine:CORE3DLIST_SWRASTERIZE]; [cdsGPU setRender3DRenderingEngine:CORE3DLIST_SWRASTERIZE];
[cdsGPU setRender3DFragmentSamplingHack:NO];
[cdsGPU setRender3DTextureSmoothing:NO];
[cdsGPU setRender3DTextureScalingFactor:1]; [cdsGPU setRender3DTextureScalingFactor:1];
[cdsGPU setGpuScale:1]; [cdsGPU setGpuScale:1];
[cdsGPU setGpuColorFormat:NDSColorFormat_BGR666_Rev]; [cdsGPU setGpuColorFormat:NDSColorFormat_BGR666_Rev];
@ -471,6 +494,10 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_2x) ) _selectedRenderScaling = 2; else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_2x) ) _selectedRenderScaling = 2;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_3x) ) _selectedRenderScaling = 3; else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_3x) ) _selectedRenderScaling = 3;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_4x) ) _selectedRenderScaling = 4; else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_4x) ) _selectedRenderScaling = 4;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_5x) ) _selectedRenderScaling = 5;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_6x) ) _selectedRenderScaling = 6;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_7x) ) _selectedRenderScaling = 7;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_RenderScaling_8x) ) _selectedRenderScaling = 8;
if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_TextureScaling_1x) ) _selectedTextureScaling = 1; if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_TextureScaling_1x) ) _selectedTextureScaling = 1;
else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_TextureScaling_2x) ) _selectedTextureScaling = 2; else if ( DISPLAYMODE_STATEBIT_CHECK(displayModeStates, NDSDisplayOptionID_3D_TextureScaling_2x) ) _selectedTextureScaling = 2;
@ -611,6 +638,19 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
_cdp->CommitPresenterProperties(newProps); _cdp->CommitPresenterProperties(newProps);
_cdp->SetupPresenterProperties(); _cdp->SetupPresenterProperties();
if ( DISPLAYMODE_STATEBIT_CHECK(appliedState, NDSDisplayOptionID_GPU_Engine_Software) )
{
[cdsGPU setRender3DRenderingEngine:CORE3DLIST_SWRASTERIZE];
[cdsGPU setGpuColorFormat:NDSColorFormat_BGR666_Rev];
}
else if ( DISPLAYMODE_STATEBIT_CHECK(appliedState, NDSDisplayOptionID_GPU_Engine_OpenGL) )
{
[cdsGPU setRender3DRenderingEngine:CORE3DLIST_OPENGL];
[cdsGPU setGpuColorFormat:NDSColorFormat_BGR888_Rev];
}
[cdsGPU setRender3DFragmentSamplingHack:(DISPLAYMODE_STATEBIT_CHECK(appliedState, NDSDisplayOptionID_GPU_Software_FragmentSamplingHack)) ? YES : NO];
[cdsGPU setRender3DTextureSmoothing:(DISPLAYMODE_STATEBIT_CHECK(appliedState, NDSDisplayOptionID_GPU_OpenGL_SmoothTextures)) ? YES : NO];
[cdsGPU setGpuScale:_selectedRenderScaling]; [cdsGPU setGpuScale:_selectedRenderScaling];
[cdsGPU setRender3DTextureScalingFactor:_selectedTextureScaling]; [cdsGPU setRender3DTextureScalingFactor:_selectedTextureScaling];
@ -682,6 +722,7 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_SEPARATION]]; s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_SEPARATION]];
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_VIDEOSOURCE_MAIN]]; s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_VIDEOSOURCE_MAIN]];
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_VIDEOSOURCE_TOUCH]]; s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_VIDEOSOURCE_TOUCH]];
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_GPU_ENGINE]];
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING]]; s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_3D_RENDERSCALING]];
s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING]]; s = [self switchDisplayModeState:s nameKey:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_3D_TEXTURESCALING]];
@ -695,6 +736,9 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_HUD_RealTimeClock state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK]]; s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_HUD_RealTimeClock state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_HUD_REALTIMECLOCK]];
s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_HUD_Input state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_HUD_INPUT]]; s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_HUD_Input state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_HUD_INPUT]];
s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_GPU_Software_FragmentSamplingHack state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_GPU_SOFTWARE_FRAGMENTSAMPLINGHACK]];
s = [self setDisplayModeState:s optionID:NDSDisplayOptionID_GPU_OpenGL_SmoothTextures state:[userDefaultsDisplayMode objectForKey:@NDSDISPLAYMODE_PREFKEY_GPU_OPENGL_SMOOTHTEXTURES]];
[self setNdsDisplayMode:s]; [self setNdsDisplayMode:s];
_displayModeStatesApplied = _displayModeStatesPending; _displayModeStatesApplied = _displayModeStatesPending;
@ -1192,85 +1236,98 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
- (NSArray<NSDictionary<NSString *, id> *> *) displayModes - (NSArray<NSDictionary<NSString *, id> *> *) displayModes
{ {
const uint64_t currentDisplayMode = _displayModeStatesPending; const uint64_t s = _displayModeStatesPending;
// Generate each display option submenu. // Generate each display option submenu.
NSArray< NSDictionary<NSString *, id> *> *displayModeMenu = NSArray< NSDictionary<NSString *, id> *> *displayModeMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_DualScreen states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_DualScreen states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_Main states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_Main states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_Touch states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Mode_Touch states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displayRotationMenu = NSArray< NSDictionary<NSString *, id> *> *displayRotationMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_0 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_0 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_90 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_90 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_180 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_180 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_270 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Rotation_270 states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displayLayoutMenu = NSArray< NSDictionary<NSString *, id> *> *displayLayoutMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Vertical states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Vertical states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Horizontal states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Horizontal states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_2_1 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_2_1 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_16_9 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_16_9 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_16_10 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Layout_Hybrid_16_10 states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displayOrderMenu = NSArray< NSDictionary<NSString *, id> *> *displayOrderMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_Order_MainFirst states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Order_MainFirst states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Order_TouchFirst states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Order_TouchFirst states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displaySeparationMenu = NSArray< NSDictionary<NSString *, id> *> *displaySeparationMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_0 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_0 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_50 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_50 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_100 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_100 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_150 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_150 states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_200 states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_Separation_200 states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displayVideoSourceMenu = NSArray< NSDictionary<NSString *, id> *> *displayVideoSourceMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_None states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_None states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_NDS states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_NDS states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_ForceMain states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_ForceMain states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_ForceSub states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceMain_ForceSub states:s],
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil], [NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_None states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_None states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_NDS states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_NDS states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_ForceMain states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_ForceMain states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_ForceSub states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_VideoSourceTouch_ForceSub states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *displayHUDMenu = NSArray< NSDictionary<NSString *, id> *> *displayHUDMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_Enable states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_Enable states:s],
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil], [NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_ExecutionSpeed states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_ExecutionSpeed states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_VideoFPS states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_VideoFPS states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_3DRendererFPS states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_3DRendererFPS states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_FrameIndex states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_FrameIndex states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_LagFrameCounter states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_LagFrameCounter states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_CPULoadAverage states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_CPULoadAverage states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_RealTimeClock states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_RealTimeClock states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_Input states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_HUD_Input states:s],
nil];
NSArray< NSDictionary<NSString *, id> *> *displayGPUEmulationMenu =
[NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_GPU_Engine_Software states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_GPU_Software_FragmentSamplingHack states:s],
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[self generateDisplayModeItemByID:NDSDisplayOptionID_GPU_Engine_OpenGL states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_GPU_OpenGL_SmoothTextures states:s],
nil]; nil];
NSArray< NSDictionary<NSString *, id> *> *display3DRenderingMenu = NSArray< NSDictionary<NSString *, id> *> *display3DRenderingMenu =
[NSArray arrayWithObjects: [NSArray arrayWithObjects:
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_1x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_1x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_2x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_2x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_3x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_3x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_4x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_4x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_5x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_6x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_7x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_RenderScaling_8x states:s],
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil], [NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_1x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_1x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_2x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_2x states:s],
[self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_4x states:currentDisplayMode], [self generateDisplayModeItemByID:NDSDisplayOptionID_3D_TextureScaling_4x states:s],
nil]; nil];
// Add each submenu to the menu descriptor. // Add each submenu to the menu descriptor.
@ -1300,6 +1357,7 @@ void UpdateDisplayPropertiesFromStates(uint64_t displayModeStates, ClientDisplay
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil], [NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[NSDictionary dictionaryWithObjectsAndKeys: @"Heads-Up Display", OEGameCoreDisplayModeGroupNameKey, displayHUDMenu, OEGameCoreDisplayModeGroupItemsKey, nil], [NSDictionary dictionaryWithObjectsAndKeys: @"Heads-Up Display", OEGameCoreDisplayModeGroupNameKey, displayHUDMenu, OEGameCoreDisplayModeGroupItemsKey, nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil], [NSDictionary dictionaryWithObjectsAndKeys:@"---", OEGameCoreDisplayModeSeparatorItemKey, nil],
[NSDictionary dictionaryWithObjectsAndKeys: @"GPU Emulation", OEGameCoreDisplayModeGroupNameKey, displayGPUEmulationMenu, OEGameCoreDisplayModeGroupItemsKey, nil],
[NSDictionary dictionaryWithObjectsAndKeys: @"3D Rendering", OEGameCoreDisplayModeGroupNameKey, display3DRenderingMenu, OEGameCoreDisplayModeGroupItemsKey, nil], [NSDictionary dictionaryWithObjectsAndKeys: @"3D Rendering", OEGameCoreDisplayModeGroupNameKey, display3DRenderingMenu, OEGameCoreDisplayModeGroupItemsKey, nil],
nil]; nil];