diff --git a/Android/res/values/strings.xml b/Android/res/values/strings.xml index 592d05322..7a890c759 100644 --- a/Android/res/values/strings.xml +++ b/Android/res/values/strings.xml @@ -119,8 +119,6 @@ Vertical interrupts per second Record Execution Times Record how long each block executes for - Reset GFX Plugin - Always reload GFX plugin Pre Alloc Sync Mem Allocate sync memory at startup Reduced Sync Mem diff --git a/Android/res/xml/settings_advanced.xml b/Android/res/xml/settings_advanced.xml index c44608fb7..73ab19660 100644 --- a/Android/res/xml/settings_advanced.xml +++ b/Android/res/xml/settings_advanced.xml @@ -26,10 +26,6 @@ android:key="Debugger_RecordExecutionTimes" android:summary="@string/RecordExecutionTimes_summary" android:title="@string/RecordExecutionTimes_title" /> - failures ) { @@ -202,7 +202,7 @@ public class SplashActivity extends Activity implements ExtractAssetsListener { InitProject64(); } - + // Extraction succeeded, record new asset version and merge cheats mTextView.setText( R.string.assetExtractor_finished ); NativeExports.UISettingsSaveDword(UISettingID.Asserts_Version.getValue(), ASSET_VERSION); @@ -210,7 +210,7 @@ public class SplashActivity extends Activity implements ExtractAssetsListener // Launch gallery activity Intent intent = new Intent( this, GalleryActivity.class ); this.startActivity( intent ); - + // We never want to come back to this activity, so finish it finish(); } diff --git a/Android/src/emu/project64/game/GameMenuHandler.java b/Android/src/emu/project64/game/GameMenuHandler.java index 2cb8c921a..99f15d106 100644 --- a/Android/src/emu/project64/game/GameMenuHandler.java +++ b/Android/src/emu/project64/game/GameMenuHandler.java @@ -210,7 +210,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup { item.setChecked(true); } - String SaveFileName = SaveDirectory + "/" + NativeExports.SettingsLoadString(SettingsID.Game_GoodName.getValue()) + ".pj"; + String SaveFileName = SaveDirectory + "/" + NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.getValue()) + ".pj"; String Timestamp = ""; if (SaveSlot != 0) { @@ -228,7 +228,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup Timestamp = new SimpleDateFormat(" [yyyy/MM/dd HH:mm]").format(new Date(LastModified)); } String SlotName = SaveSlot == 0 ? Strings.GetString(LanguageStringID.ANDROID_MENU_CURRENTSAVEAUTO) : - Strings.GetString(LanguageStringID.ANDROID_MENU_CURRENTSAVESLOT) + " " + SaveSlot; + Strings.GetString(LanguageStringID.ANDROID_MENU_CURRENTSAVESLOT) + " " + SaveSlot; item.setTitle(SlotName + Timestamp); } diff --git a/Android/src/emu/project64/jni/SettingsID.java b/Android/src/emu/project64/jni/SettingsID.java index ee02deb32..d549f16bc 100644 --- a/Android/src/emu/project64/jni/SettingsID.java +++ b/Android/src/emu/project64/jni/SettingsID.java @@ -97,7 +97,7 @@ public enum SettingsID Game_File, Game_UniqueSaveDir, Game_GameName, - Game_GoodName, + Cfg_GoodName, Game_TempLoaded, Game_SystemType, Game_EditPlugin_Gfx, @@ -255,7 +255,6 @@ public enum SettingsID Plugin_UseHleGfx, Plugin_UseHleAudio, Plugin_EnableAudio, - Plugin_ForceGfxReset, Logging_GenerateLog, Logging_LogRDRamRegisters, diff --git a/Android/src/emu/project64/settings/SettingsActivity.java b/Android/src/emu/project64/settings/SettingsActivity.java index 4417231dd..1541aa1b5 100644 --- a/Android/src/emu/project64/settings/SettingsActivity.java +++ b/Android/src/emu/project64/settings/SettingsActivity.java @@ -60,7 +60,6 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere .putBoolean("audio_Enabled",NativeExports.SettingsLoadBool(SettingsID.Plugin_EnableAudio.getValue())) .putBoolean("PreAllocSyncMem",NativeExports.SettingsLoadBool(SettingsID.Setting_PreAllocSyncMem.getValue())) .putBoolean("ReducedSyncMem",NativeExports.SettingsLoadBool(SettingsID.Setting_ReducedSyncMem.getValue())) - .putBoolean("Plugin_ForceGfxReset",NativeExports.SettingsLoadBool(SettingsID.Plugin_ForceGfxReset.getValue())) .putBoolean("UserInterface_BasicMode",NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.getValue())) .putBoolean("Debugger_Enabled",NativeExports.SettingsLoadBool(SettingsID.Debugger_Enabled.getValue())) .putBoolean("Debugger_RecordRecompilerAsm",NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordRecompilerAsm.getValue())) @@ -145,7 +144,6 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere else if (key.equals("touchscreenLayout")) { NativeExports.UISettingsSaveString(UISettingID.TouchScreen_Layout.getValue(), sharedPreferences.getString(key, "Analog")); } else if (key.equals("Patreon_email")) { NativeExports.UISettingsSaveString(UISettingID.SupportWindow_PatreonEmail.getValue(), sharedPreferences.getString(key, "")); } else if (key.equals("audio_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Plugin_EnableAudio.getValue(), sharedPreferences.getBoolean(key,false)); } - else if (key.equals("Plugin_ForceGfxReset")) { NativeExports.SettingsSaveBool(SettingsID.Plugin_ForceGfxReset.getValue(), sharedPreferences.getBoolean(key,false)); } else if (key.equals("PreAllocSyncMem")) { NativeExports.SettingsSaveBool(SettingsID.Setting_PreAllocSyncMem.getValue(), sharedPreferences.getBoolean(key,false)); } else if (key.equals("ReducedSyncMem")) { NativeExports.SettingsSaveBool(SettingsID.Setting_ReducedSyncMem.getValue(), sharedPreferences.getBoolean(key,false)); } else if (key.equals("Debugger_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_Enabled.getValue(), sharedPreferences.getBoolean(key,false)); } diff --git a/Android/src/emu/project64/util/Notifier.java b/Android/src/emu/project64/util/Notifier.java index 1a3806bf8..4b115a8ec 100644 --- a/Android/src/emu/project64/util/Notifier.java +++ b/Android/src/emu/project64/util/Notifier.java @@ -106,15 +106,15 @@ public final class Notifier GameOverlay overlay = (GameOverlay) activity.findViewById(R.id.gameOverlay); overlay.SetDisplayMessage2(message); } - - public static void EmulationStarted (Activity activity) + + public static void EmulationStarted (Activity activity) { ((Project64Application) activity.getApplication()).getDefaultTracker().send(new HitBuilders.EventBuilder() - .setCategory("mobile") - .setAction("game") - .setLabel(NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.getValue())) - .build()); - } + .setCategory("mobile") + .setAction("game") + .setLabel(NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.getValue())) + .build()); + } private static Runnable runEmulationStopped = null; public static void EmulationStopped (Activity activity) diff --git a/Source/Glitch64/OGLESglitchmain.cpp b/Source/Glitch64/OGLESglitchmain.cpp index 103b209a6..e3274a1eb 100644 --- a/Source/Glitch64/OGLESglitchmain.cpp +++ b/Source/Glitch64/OGLESglitchmain.cpp @@ -356,6 +356,8 @@ FX_ENTRY GrContext_t FX_CALL grSstWinOpen(GrColorFormat_t color_format, GrOrigin { static int show_warning = 1; + GLCache::ResetCache(); + // ZIGGY // allocate static texture names // the initial value should be big enough to support the maximal resolution diff --git a/Source/Glitch64/OGLESwrappers.cpp b/Source/Glitch64/OGLESwrappers.cpp index 874741c6b..cd271bd19 100644 --- a/Source/Glitch64/OGLESwrappers.cpp +++ b/Source/Glitch64/OGLESwrappers.cpp @@ -42,313 +42,351 @@ void vbo_draw(); -void cache_glActiveTexture (GLenum texture) -{ - static GLenum cached_texture; +GLenum GLCache::m_cached_texture; +GLenum GLCache::m_cached_mode; +GLenum GLCache::m_cached_modeRGB; +GLenum GLCache::m_cached_modeAlpha; +GLenum GLCache::m_cached_sfactor; +GLenum GLCache::m_cached_dfactor; +GLenum GLCache::m_cached_BlendFuncSeparate_srcRGB; +GLenum GLCache::m_cached_BlendFuncSeparate_dstRGB; +GLenum GLCache::m_cached_BlendFuncSeparate_srcAlpha; +GLenum GLCache::m_cached_BlendFuncSeparate_dstAlpha; +GLclampf GLCache::m_cached_depth; +GLenum GLCache::m_cached_CullFace_mode; +GLenum GLCache::m_cached_func; +GLboolean GLCache::m_cached_DepthMask_flag; +GLclampf GLCache::m_cached_zNear; +GLclampf GLCache::m_cached_zFar; +bool GLCache::m_cached_BLEND = false; +bool GLCache::m_cached_CULL_FACE = false; +bool GLCache::m_cached_DEPTH_TEST = false; +bool GLCache::m_cached_DITHER = false; +bool GLCache::m_cached_POLYGON_OFFSET_FILL = false; +bool GLCache::m_cached_SAMPLE_ALPHA_TO_COVERAGE = false; +bool GLCache::m_cached_SAMPLE_COVERAGE = false; +bool GLCache::m_cached_SCISSOR_TEST = false; +bool GLCache::m_cached_STENCIL_TEST = false; +GLenum GLCache::m_cached_FrontFace_mode; +GLfloat GLCache::m_cached_factor; +GLfloat GLCache::m_cached_units; +GLclampf GLCache::m_cached_red, GLCache::m_cached_green, GLCache::m_cached_blue, GLCache::m_cached_alpha; +GLint GLCache::m_cached_x, GLCache::m_cached_y; +GLsizei GLCache::m_cached_width, GLCache::m_cached_height; +GLuint GLCache::m_cached_program; +GLint GLCache::m_Viewport_cached_x = 0, GLCache::m_Viewport_cached_y = 0; +GLsizei GLCache::m_Viewport_cached_width = 0, GLCache::m_Viewport_cached_height = 0; - if(texture != cached_texture) +void GLCache::ResetCache(void) +{ + m_cached_texture = 0; + m_cached_mode = 0; + m_cached_modeRGB = 0; + m_cached_modeAlpha = 0; + m_cached_sfactor = 0; + m_cached_dfactor = 0; + m_cached_BlendFuncSeparate_srcRGB = 0; + m_cached_BlendFuncSeparate_dstRGB = 0; + m_cached_BlendFuncSeparate_srcAlpha = 0; + m_cached_BlendFuncSeparate_dstAlpha = 0; + m_cached_depth = 0; + m_cached_CullFace_mode = 0; + m_cached_func = 0; + m_cached_DepthMask_flag = 0; + m_cached_zNear = 0; + m_cached_zFar = 0; + m_cached_BLEND = false; + m_cached_CULL_FACE = false; + m_cached_DEPTH_TEST = false; + m_cached_DITHER = false; + m_cached_POLYGON_OFFSET_FILL = false; + m_cached_SAMPLE_ALPHA_TO_COVERAGE = false; + m_cached_SAMPLE_COVERAGE = false; + m_cached_SCISSOR_TEST = false; + m_cached_STENCIL_TEST = false; + m_cached_FrontFace_mode = 0; + m_cached_factor = 0; + m_cached_units = 0; + m_cached_red = 0; + m_cached_green = 0; + m_cached_blue = 0; + m_cached_alpha = 0; + m_cached_x = 0; + m_cached_y = 0; + m_cached_width = 0; + m_cached_height = 0; + m_cached_program = 0; + m_Viewport_cached_x = 0; + m_Viewport_cached_y = 0; + m_Viewport_cached_width = 0; + m_Viewport_cached_height = 0; +} + +void GLCache::glActiveTexture(GLenum texture) +{ + if (texture != m_cached_texture) { - WriteTrace(TraceOGLWrapper, TraceDebug, "texture: %d",texture); + WriteTrace(TraceOGLWrapper, TraceDebug, "texture: %d", texture); vbo_draw(); - glActiveTexture(texture); - cached_texture = texture; + ::glActiveTexture(texture); + m_cached_texture = texture; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - texture: %d",texture); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - texture: %d", texture); } } -void cache_glBindTexture (GLenum target, GLuint texture) +void GLCache::glBindTexture(GLenum target, GLuint texture) { - WriteTrace(TraceOGLWrapper, TraceDebug, "target: %d texture: %d",target, texture); + WriteTrace(TraceOGLWrapper, TraceDebug, "target: %d texture: %d", target, texture); vbo_draw(); - glBindTexture(target, texture); + ::glBindTexture(target, texture); } -void cache_glBlendEquation ( GLenum mode ) +void GLCache::glBlendEquation(GLenum mode) { - static GLenum cached_mode; - - if(mode != cached_mode) + if (mode != m_cached_mode) { - WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d", mode); vbo_draw(); - glBlendEquation(mode); - cached_mode = mode; + ::glBlendEquation(mode); + m_cached_mode = mode; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d", mode); } } -void cache_glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha) +void GLCache::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) { - static GLenum cached_modeRGB; - static GLenum cached_modeAlpha; - - if(modeRGB != cached_modeRGB || modeAlpha != cached_modeAlpha) + if (modeRGB != m_cached_modeRGB || modeAlpha != m_cached_modeAlpha) { - WriteTrace(TraceOGLWrapper, TraceDebug, "modeRGB: %d cached_modeAlpha: %d",modeRGB, cached_modeAlpha); + WriteTrace(TraceOGLWrapper, TraceDebug, "modeRGB: %d cached_modeAlpha: %d", modeRGB, m_cached_modeAlpha); vbo_draw(); - glBlendEquationSeparate(modeRGB, modeAlpha); - cached_modeRGB = modeRGB; - cached_modeAlpha = modeAlpha; + ::glBlendEquationSeparate(modeRGB, modeAlpha); + m_cached_modeRGB = modeRGB; + m_cached_modeAlpha = modeAlpha; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - modeRGB: %d cached_modeAlpha: %d",modeRGB, cached_modeAlpha); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - modeRGB: %d cached_modeAlpha: %d", modeRGB, m_cached_modeAlpha); } - } -void cache_glBlendFunc (GLenum sfactor, GLenum dfactor) +void GLCache::glBlendFunc(GLenum sfactor, GLenum dfactor) { - static GLenum cached_sfactor; - static GLenum cached_dfactor; - - if(sfactor != cached_sfactor || dfactor != cached_dfactor) + if (sfactor != m_cached_sfactor || dfactor != m_cached_dfactor) { - WriteTrace(TraceOGLWrapper, TraceDebug, "sfactor: %d dfactor: %d",sfactor, dfactor); + WriteTrace(TraceOGLWrapper, TraceDebug, "sfactor: %d dfactor: %d", sfactor, dfactor); vbo_draw(); - glBlendFunc(sfactor, dfactor); - cached_sfactor = sfactor; - cached_dfactor = dfactor; + ::glBlendFunc(sfactor, dfactor); + m_cached_sfactor = sfactor; + m_cached_dfactor = dfactor; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - sfactor: %d dfactor: %d",sfactor, dfactor); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - sfactor: %d dfactor: %d", sfactor, dfactor); } } -void cache_glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) +void GLCache::glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { - static GLenum cached_BlendFuncSeparate_srcRGB; - static GLenum cached_BlendFuncSeparate_dstRGB; - static GLenum cached_BlendFuncSeparate_srcAlpha; - static GLenum cached_BlendFuncSeparate_dstAlpha; - - if(srcRGB != cached_BlendFuncSeparate_srcRGB || dstRGB != cached_BlendFuncSeparate_dstRGB || srcAlpha != cached_BlendFuncSeparate_srcAlpha || dstAlpha != cached_BlendFuncSeparate_dstAlpha) + if (srcRGB != m_cached_BlendFuncSeparate_srcRGB || dstRGB != m_cached_BlendFuncSeparate_dstRGB || srcAlpha != m_cached_BlendFuncSeparate_srcAlpha || dstAlpha != m_cached_BlendFuncSeparate_dstAlpha) { - WriteTrace(TraceOGLWrapper, TraceDebug, "srcRGB: %d dstRGB: %d srcAlpha: %d dstAlpha: %d",srcRGB, dstRGB, srcAlpha, dstAlpha); + WriteTrace(TraceOGLWrapper, TraceDebug, "srcRGB: %d dstRGB: %d srcAlpha: %d dstAlpha: %d", srcRGB, dstRGB, srcAlpha, dstAlpha); vbo_draw(); - glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - cached_BlendFuncSeparate_srcRGB = srcRGB; - cached_BlendFuncSeparate_dstRGB = dstRGB; - cached_BlendFuncSeparate_srcAlpha = srcAlpha; - cached_BlendFuncSeparate_dstAlpha = dstAlpha; + ::glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); + m_cached_BlendFuncSeparate_srcRGB = srcRGB; + m_cached_BlendFuncSeparate_dstRGB = dstRGB; + m_cached_BlendFuncSeparate_srcAlpha = srcAlpha; + m_cached_BlendFuncSeparate_dstAlpha = dstAlpha; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - srcRGB: %d dstRGB: %d srcAlpha: %d dstAlpha: %d",srcRGB, dstRGB, srcAlpha, dstAlpha); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - srcRGB: %d dstRGB: %d srcAlpha: %d dstAlpha: %d", srcRGB, dstRGB, srcAlpha, dstAlpha); } } -void cache_glClearDepthf (GLclampf depth) +void GLCache::glClearDepthf(GLclampf depth) { - static GLclampf cached_depth; - - if(depth != cached_depth) + if (depth != m_cached_depth) { - WriteTrace(TraceOGLWrapper, TraceDebug, "depth: %d",depth); + WriteTrace(TraceOGLWrapper, TraceDebug, "depth: %d", depth); vbo_draw(); - glClearDepthf(depth); - cached_depth = depth; + ::glClearDepthf(depth); + m_cached_depth = depth; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - depth: %d",depth); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - depth: %d", depth); } } -void cache_glCullFace (GLenum mode) +void GLCache::glCullFace(GLenum mode) { - static GLenum cached_CullFace_mode; - - if(mode != cached_CullFace_mode) + if (mode != m_cached_CullFace_mode) { - WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d", mode); vbo_draw(); - glCullFace(mode); - cached_CullFace_mode = mode; + ::glCullFace(mode); + m_cached_CullFace_mode = mode; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d", mode); } } -void cache_glDepthFunc (GLenum func) +void GLCache::glDepthFunc(GLenum func) { - static GLenum cached_func; - - if(func != cached_func) + if (func != m_cached_func) { - WriteTrace(TraceOGLWrapper, TraceDebug, "func: %d",func); + WriteTrace(TraceOGLWrapper, TraceDebug, "func: %d", func); vbo_draw(); - glDepthFunc(func); - cached_func = func; + ::glDepthFunc(func); + m_cached_func = func; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - func: %d",func); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - func: %d", func); } } -void cache_glDepthMask (GLboolean flag) +void GLCache::glDepthMask(GLboolean flag) { - static GLboolean cached_DepthMask_flag; - - if(flag != cached_DepthMask_flag) + if (flag != m_cached_DepthMask_flag) { - WriteTrace(TraceOGLWrapper, TraceDebug, "flag: %d",(int)flag); + WriteTrace(TraceOGLWrapper, TraceDebug, "flag: %d", (int)flag); vbo_draw(); - glDepthMask(flag); - cached_DepthMask_flag = flag; + ::glDepthMask(flag); + m_cached_DepthMask_flag = flag; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - flag: %d",(int)flag); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - flag: %d", (int)flag); } } -void cache_glDepthRangef (GLclampf zNear, GLclampf zFar) +void GLCache::glDepthRangef(GLclampf zNear, GLclampf zFar) { - static GLclampf cached_zNear; - static GLclampf cached_zFar; - if(zNear != cached_zNear || zFar != cached_zFar) + if (zNear != m_cached_zNear || zFar != m_cached_zFar) { - WriteTrace(TraceOGLWrapper, TraceDebug, "zNear: %d zFar: %d",zNear, zFar); + WriteTrace(TraceOGLWrapper, TraceDebug, "zNear: %d zFar: %d", zNear, zFar); vbo_draw(); - glDepthRangef(zNear, zFar); - cached_zNear = zNear; - cached_zFar = zFar; + ::glDepthRangef(zNear, zFar); + m_cached_zNear = zNear; + m_cached_zFar = zFar; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - zNear: %d zFar: %d",zNear, zFar); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - zNear: %d zFar: %d", zNear, zFar); } } - -void cache_glEnableDisableItem (GLenum cap, bool enable, bool & cached_state, const char * StateName) +void GLCache::glEnableDisableItem(GLenum cap, bool enable, bool & cached_state, const char * StateName) { if (enable) { - if(!cached_state) + if (!cached_state) { - WriteTrace(TraceOGLWrapper, TraceDebug, "glEnable(%s)",StateName); + WriteTrace(TraceOGLWrapper, TraceDebug, "glEnable(%s)", StateName); vbo_draw(); - glEnable(cap); + ::glEnable(cap); cached_state = true; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - glEnable(%s)",StateName); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - glEnable(%s)", StateName); } } else { if (cached_state) { - WriteTrace(TraceOGLWrapper, TraceDebug, "glDisable(%s)",StateName); + WriteTrace(TraceOGLWrapper, TraceDebug, "glDisable(%s)", StateName); vbo_draw(); - glDisable(cap); + ::glDisable(cap); cached_state = false; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - glEnable(%s)",StateName); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - glEnable(%s)", StateName); } } } -void cache_glEnableDisable (GLenum cap, bool enable) +void GLCache::glEnableDisable(GLenum cap, bool enable) { - static bool cached_BLEND = false; - static bool cached_CULL_FACE = false; - static bool cached_DEPTH_TEST = false; - static bool cached_DITHER = false; - static bool cached_POLYGON_OFFSET_FILL = false; - static bool cached_SAMPLE_ALPHA_TO_COVERAGE = false; - static bool cached_SAMPLE_COVERAGE = false; - static bool cached_SCISSOR_TEST = false; - static bool cached_STENCIL_TEST = false; - - if(cap == GL_BLEND) { cache_glEnableDisableItem(cap, enable, cached_BLEND, "GL_BLEND"); } - else if(cap == GL_CULL_FACE) { cache_glEnableDisableItem(cap, enable, cached_CULL_FACE, "GL_CULL_FACE"); } - else if(cap == GL_DEPTH_TEST) { cache_glEnableDisableItem(cap, enable, cached_DEPTH_TEST, "GL_DEPTH_TEST"); } - else if(cap == GL_DITHER) { cache_glEnableDisableItem(cap, enable, cached_DITHER, "GL_DITHER"); } - else if(cap == GL_POLYGON_OFFSET_FILL) { cache_glEnableDisableItem(cap, enable, cached_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL"); } - else if(cap == GL_SAMPLE_ALPHA_TO_COVERAGE) { cache_glEnableDisableItem(cap, enable, cached_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE"); } - else if(cap == GL_SAMPLE_COVERAGE) { cache_glEnableDisableItem(cap, enable, cached_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE"); } - else if(cap == GL_SCISSOR_TEST) { cache_glEnableDisableItem(cap, enable, cached_SCISSOR_TEST, "GL_SCISSOR_TEST"); } - else if(cap == GL_STENCIL_TEST) { cache_glEnableDisableItem(cap, enable, cached_STENCIL_TEST, "GL_STENCIL_TEST"); } + if (cap == GL_BLEND) { GLCache::glEnableDisableItem(cap, enable, m_cached_BLEND, "GL_BLEND"); } + else if (cap == GL_CULL_FACE) { GLCache::glEnableDisableItem(cap, enable, m_cached_CULL_FACE, "GL_CULL_FACE"); } + else if (cap == GL_DEPTH_TEST) { GLCache::glEnableDisableItem(cap, enable, m_cached_DEPTH_TEST, "GL_DEPTH_TEST"); } + else if (cap == GL_DITHER) { GLCache::glEnableDisableItem(cap, enable, m_cached_DITHER, "GL_DITHER"); } + else if (cap == GL_POLYGON_OFFSET_FILL) { GLCache::glEnableDisableItem(cap, enable, m_cached_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL"); } + else if (cap == GL_SAMPLE_ALPHA_TO_COVERAGE) { GLCache::glEnableDisableItem(cap, enable, m_cached_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE"); } + else if (cap == GL_SAMPLE_COVERAGE) { GLCache::glEnableDisableItem(cap, enable, m_cached_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE"); } + else if (cap == GL_SCISSOR_TEST) { GLCache::glEnableDisableItem(cap, enable, m_cached_SCISSOR_TEST, "GL_SCISSOR_TEST"); } + else if (cap == GL_STENCIL_TEST) { GLCache::glEnableDisableItem(cap, enable, m_cached_STENCIL_TEST, "GL_STENCIL_TEST"); } else { if (enable) { - WriteTrace(TraceOGLWrapper, TraceDebug, "glEnable(%d)",cap); + WriteTrace(TraceOGLWrapper, TraceDebug, "glEnable(%d)", cap); vbo_draw(); - glEnable(cap); + ::glEnable(cap); } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "glDisable(%d)",cap); + WriteTrace(TraceOGLWrapper, TraceDebug, "glDisable(%d)", cap); vbo_draw(); - glDisable(cap); + ::glDisable(cap); } } } -void cache_glFrontFace (GLenum mode) +void GLCache::glFrontFace(GLenum mode) { - static GLenum cached_FrontFace_mode; - if(mode != cached_FrontFace_mode) + if (mode != m_cached_FrontFace_mode) { - WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "mode: %d", mode); vbo_draw(); - glFrontFace(mode); - cached_FrontFace_mode = mode; + ::glFrontFace(mode); + m_cached_FrontFace_mode = mode; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d",mode); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - mode: %d", mode); } } -void cache_glPolygonOffset (GLfloat factor, GLfloat units) +void GLCache::glPolygonOffset(GLfloat factor, GLfloat units) { - static GLfloat cached_factor; - static GLfloat cached_units; - if(factor != cached_factor || units != cached_units) + if (factor != m_cached_factor || units != m_cached_units) { vbo_draw(); - WriteTrace(TraceOGLWrapper, TraceDebug, "factor: %f units: %f",factor, units); - glPolygonOffset(factor, units); - cached_factor = factor; - cached_units = units; + WriteTrace(TraceOGLWrapper, TraceDebug, "factor: %f units: %f", factor, units); + ::glPolygonOffset(factor, units); + m_cached_factor = factor; + m_cached_units = units; } else { - WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - factor: %f units: %f",factor, units); + WriteTrace(TraceOGLWrapper, TraceDebug, "Ignored - factor: %f units: %f", factor, units); } } -void cache_glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +void GLCache::glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { - static GLclampf cached_red, cached_green, cached_blue, cached_alpha; - - if(red != cached_red || green != cached_green || blue != cached_blue || alpha != cached_alpha) + if (red != m_cached_red || green != m_cached_green || blue != m_cached_blue || alpha != m_cached_alpha) { WriteTrace(TraceOGLWrapper, TraceDebug, "red: %f, green: %f, blue: %f, alpha: %f", red, green, blue, alpha); vbo_draw(); - glClearColor(red, green, blue, alpha); - cached_red = red; - cached_green = green; - cached_blue = blue; - cached_alpha = alpha; + ::glClearColor(red, green, blue, alpha); + m_cached_red = red; + m_cached_green = green; + m_cached_blue = blue; + m_cached_alpha = alpha; } else { @@ -356,20 +394,17 @@ void cache_glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf a } } -void cache_glScissor (GLint x, GLint y, GLsizei width, GLsizei height) +void GLCache::glScissor(GLint x, GLint y, GLsizei width, GLsizei height) { - static GLint cached_x, cached_y; - static GLsizei cached_width, cached_height; - - if(x != cached_x || y != cached_y || width != cached_width || height != cached_height) + if (x != m_cached_x || y != m_cached_y || width != m_cached_width || height != m_cached_height) { WriteTrace(TraceOGLWrapper, TraceDebug, "x: %d, y: %d, width: %d, height: %d", x, y, width, height); vbo_draw(); - glScissor(x, y, width, height); - cached_x = x; - cached_y = y; - cached_width = width; - cached_height = height; + ::glScissor(x, y, width, height); + m_cached_x = x; + m_cached_y = y; + m_cached_width = width; + m_cached_height = height; } else { @@ -377,15 +412,14 @@ void cache_glScissor (GLint x, GLint y, GLsizei width, GLsizei height) } } -void cache_glUseProgram (GLuint program) +void GLCache::glUseProgram(GLuint program) { - static GLuint cached_program; - if(program != cached_program) + if (program != m_cached_program) { WriteTrace(TraceOGLWrapper, TraceDebug, "program: %d", program); vbo_draw(); - glUseProgram(program); - cached_program = program; + ::glUseProgram(program); + m_cached_program = program; } else { @@ -393,24 +427,20 @@ void cache_glUseProgram (GLuint program) } } -void cache_glViewport (GLint x, GLint y, GLsizei width, GLsizei height) +void GLCache::glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { - static GLint cached_x = 0, cached_y = 0; - static GLsizei cached_width = 0, cached_height = 0; - - if(x != cached_x || y != cached_y || width != cached_width || height != cached_height) + if (x != m_Viewport_cached_x || y != m_Viewport_cached_y || width != m_Viewport_cached_width || height != m_Viewport_cached_height) { WriteTrace(TraceOGLWrapper, TraceDebug, "x: %d, y: %d, width: %d, height: %d", x, y, width, height); vbo_draw(); - glViewport(x, y, width, height); - cached_x = x; - cached_y = y; - cached_width = width; - cached_height = height; + ::glViewport(x, y, width, height); + m_Viewport_cached_x = x; + m_Viewport_cached_y = y; + m_Viewport_cached_width = width; + m_Viewport_cached_height = height; } else { WriteTrace(TraceOGLWrapper, TraceDebug, "ignored x: %d, y: %d, width: %d, height: %d", x, y, width, height); } } - diff --git a/Source/Glitch64/OGLESwrappers.h b/Source/Glitch64/OGLESwrappers.h index 7e35b7e63..75b6ff6e8 100644 --- a/Source/Glitch64/OGLESwrappers.h +++ b/Source/Glitch64/OGLESwrappers.h @@ -1,42 +1,87 @@ #pragma once -#include "opengl.h" +#include +#include void vbo_draw(); -void cache_glActiveTexture (GLenum texture); -void cache_glBindTexture (GLenum target, GLuint texture); -void cache_glBlendEquation ( GLenum mode ); -void cache_glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -void cache_glBlendFunc (GLenum sfactor, GLenum dfactor); -void cache_glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -void cache_glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -void cache_glClearDepthf (GLclampf depth); -void cache_glCullFace (GLenum mode); -void cache_glDepthFunc (GLenum func); -void cache_glDepthMask (GLboolean flag); -void cache_glDepthRangef (GLclampf zNear, GLclampf zFar); -void cache_glEnableDisable (GLenum cap, bool enable); -void cache_glPolygonOffset (GLfloat factor, GLfloat units); -void cache_glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -void cache_glUseProgram (GLuint program); -void cache_glViewport (GLint x, GLint y, GLsizei width, GLsizei height); +class GLCache +{ +public: + static void ResetCache(void); -#define glActiveTexture(texture) cache_glActiveTexture(texture) -#define glBindTexture(target, texture) cache_glBindTexture(target, texture) -#define glBlendEquation(mode) cache_glBlendEquation(mode) -#define glBlendEquationSeparate(modeRGB, modeAlpha) cache_glBlendEquationSeparate(modeRGB, modeAlpha) -#define glBlendFunc(sfactor, dfactor) cache_glBlendFunc(sfactor, dfactor) -#define glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) cache_glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) -#define glClearColor(red, green, blue, alpha) cache_glClearColor(red, green, blue, alpha) -#define glClearDepthf(depth) cache_glClearDepthf(depth) -#define glCullFace(mode) cache_glCullFace(mode) -#define glDepthFunc(func) cache_glDepthFunc(func) -#define glDepthMask(flag) cache_glDepthMask(flag) -#define glDepthRangef(zNear, zFar) cache_glDepthRangef(zNear, zFar) -#define glDisable(cap) cache_glEnableDisable(cap, false) -#define glEnable(cap) cache_glEnableDisable(cap, true) -#define glFrontFace(mode) cache_glFrontFace(mode) -#define glPolygonOffset(factor, units) cache_glPolygonOffset(factor, units) -#define glScissor(x, y, width, height) cache_glScissor(x, y, width, height) -#define glUseProgram(program) cache_glUseProgram(program) -#define glViewport(x, y, width, height) cache_glViewport(x, y, width, height) + static void glActiveTexture(GLenum texture); + static void glBindTexture(GLenum target, GLuint texture); + static void glBlendEquation(GLenum mode); + static void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); + static void glBlendFunc(GLenum sfactor, GLenum dfactor); + static void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + static void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + static void glClearDepthf(GLclampf depth); + static void glCullFace(GLenum mode); + static void glDepthFunc(GLenum func); + static void glDepthMask(GLboolean flag); + static void glDepthRangef(GLclampf zNear, GLclampf zFar); + static void glEnableDisable(GLenum cap, bool enable); + static void glPolygonOffset(GLfloat factor, GLfloat units); + static void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); + static void glUseProgram(GLuint program); + static void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); + static void glFrontFace(GLenum mode); +private: + static void glEnableDisableItem(GLenum cap, bool enable, bool & cached_state, const char * StateName); + + static GLenum m_cached_texture; + static GLenum m_cached_mode; + static GLenum m_cached_modeRGB; + static GLenum m_cached_modeAlpha; + static GLenum m_cached_sfactor; + static GLenum m_cached_dfactor; + static GLenum m_cached_BlendFuncSeparate_srcRGB; + static GLenum m_cached_BlendFuncSeparate_dstRGB; + static GLenum m_cached_BlendFuncSeparate_srcAlpha; + static GLenum m_cached_BlendFuncSeparate_dstAlpha; + static GLclampf m_cached_depth; + static GLenum m_cached_CullFace_mode; + static GLenum m_cached_func; + static GLboolean m_cached_DepthMask_flag; + static GLclampf m_cached_zNear; + static GLclampf m_cached_zFar; + static bool m_cached_BLEND; + static bool m_cached_CULL_FACE; + static bool m_cached_DEPTH_TEST; + static bool m_cached_DITHER; + static bool m_cached_POLYGON_OFFSET_FILL; + static bool m_cached_SAMPLE_ALPHA_TO_COVERAGE; + static bool m_cached_SAMPLE_COVERAGE; + static bool m_cached_SCISSOR_TEST; + static bool m_cached_STENCIL_TEST; + static GLenum m_cached_FrontFace_mode; + static GLfloat m_cached_factor; + static GLfloat m_cached_units; + static GLclampf m_cached_red, m_cached_green, m_cached_blue, m_cached_alpha; + static GLint m_cached_x, m_cached_y; + static GLsizei m_cached_width, m_cached_height; + static GLuint m_cached_program; + static GLint m_Viewport_cached_x, m_Viewport_cached_y; + static GLsizei m_Viewport_cached_width, m_Viewport_cached_height; +}; + +#define glActiveTexture(texture) GLCache::glActiveTexture(texture) +#define glBindTexture(target, texture) GLCache::glBindTexture(target, texture) +#define glBlendEquation(mode) GLCache::glBlendEquation(mode) +#define glBlendEquationSeparate(modeRGB, modeAlpha) GLCache::glBlendEquationSeparate(modeRGB, modeAlpha) +#define glBlendFunc(sfactor, dfactor) GLCache::glBlendFunc(sfactor, dfactor) +#define glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) GLCache::glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) +#define glClearColor(red, green, blue, alpha) GLCache::glClearColor(red, green, blue, alpha) +#define glClearDepthf(depth) GLCache::glClearDepthf(depth) +#define glCullFace(mode) GLCache::glCullFace(mode) +#define glDepthFunc(func) GLCache::glDepthFunc(func) +#define glDepthMask(flag) GLCache::glDepthMask(flag) +#define glDepthRangef(zNear, zFar) GLCache::glDepthRangef(zNear, zFar) +#define glDisable(cap) GLCache::glEnableDisable(cap, false) +#define glEnable(cap) GLCache::glEnableDisable(cap, true) +#define glFrontFace(mode) GLCache::glFrontFace(mode) +#define glPolygonOffset(factor, units) GLCache::glPolygonOffset(factor, units) +#define glScissor(x, y, width, height) GLCache::glScissor(x, y, width, height) +#define glUseProgram(program) GLCache::glUseProgram(program) +#define glViewport(x, y, width, height) GLCache::glViewport(x, y, width, height) diff --git a/Source/Project64-core/N64System/N64Class.cpp b/Source/Project64-core/N64System/N64Class.cpp index 9d287dabb..05ec9270b 100644 --- a/Source/Project64-core/N64System/N64Class.cpp +++ b/Source/Project64-core/N64System/N64Class.cpp @@ -675,10 +675,6 @@ void CN64System::Reset(bool bInitReg, bool ClearMenory) } if (m_Plugins && g_Settings->LoadBool(GameRunning_CPU_Running)) { - if (g_Settings->LoadBool(Plugin_ForceGfxReset)) - { - m_Plugins->Reset(this); - } m_Plugins->RomClosed(); m_Plugins->RomOpened(); } diff --git a/Source/Project64-core/Plugins/PluginClass.cpp b/Source/Project64-core/Plugins/PluginClass.cpp index 88e832cf6..5a4b24c01 100644 --- a/Source/Project64-core/Plugins/PluginClass.cpp +++ b/Source/Project64-core/Plugins/PluginClass.cpp @@ -326,12 +326,6 @@ bool CPlugins::Reset(CN64System * System) bool bRspChange = _stricmp(m_RSPFile.c_str(), g_Settings->LoadStringVal(Game_Plugin_RSP).c_str()) != 0; bool bContChange = _stricmp(m_ControlFile.c_str(), g_Settings->LoadStringVal(Game_Plugin_Controller).c_str()) != 0; - if (g_Settings->LoadBool(Plugin_ForceGfxReset)) - { - //this is a hack and should not be here, glide64 is not correctly freeing something on restart, this needs to be fixed but this is a short term workaround - bGfxChange = true; - } - //if GFX and Audio has changed we also need to force reset of RSP if (bGfxChange || bAudioChange) { diff --git a/Source/Project64-core/Settings/Settings.h b/Source/Project64-core/Settings/Settings.h index 5675a9e92..097f47bbf 100644 --- a/Source/Project64-core/Settings/Settings.h +++ b/Source/Project64-core/Settings/Settings.h @@ -260,7 +260,6 @@ enum SettingID Plugin_UseHleGfx, Plugin_UseHleAudio, Plugin_EnableAudio, - Plugin_ForceGfxReset, Logging_GenerateLog, Logging_LogRDRamRegisters, diff --git a/Source/Project64-core/Settings/SettingsClass.cpp b/Source/Project64-core/Settings/SettingsClass.cpp index 478c90069..c3473d6c9 100644 --- a/Source/Project64-core/Settings/SettingsClass.cpp +++ b/Source/Project64-core/Settings/SettingsClass.cpp @@ -357,11 +357,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory) AddHandler(Plugin_UseHleGfx, new CSettingTypeApplication("RSP", "HLE GFX", true)); AddHandler(Plugin_UseHleAudio, new CSettingTypeApplication("RSP", "HLE Audio", false)); AddHandler(Plugin_EnableAudio, new CSettingTypeApplication("Audio", "Enable Audio", true)); -#ifdef ANDROID - AddHandler(Plugin_ForceGfxReset, new CSettingTypeApplication("Plugin", "Force Gfx Reset", true)); -#else - AddHandler(Plugin_ForceGfxReset, new CSettingTypeApplication("Plugin", "Force Gfx Reset", false)); -#endif + //Logging AddHandler(Logging_GenerateLog, new CSettingTypeApplication("Logging", "Generate Log Files", false)); AddHandler(Logging_LogRDRamRegisters, new CSettingTypeApplication("Logging", "Log RDRam Registers", false));