GraphicsModGroup.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2022 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <jni.h>
  4. #include <set>
  5. #include <vector>
  6. #include "VideoCommon/GraphicsModSystem/Config/GraphicsMod.h"
  7. #include "VideoCommon/GraphicsModSystem/Config/GraphicsModGroup.h"
  8. #include "jni/AndroidCommon/AndroidCommon.h"
  9. #include "jni/AndroidCommon/IDCache.h"
  10. static GraphicsModGroupConfig* GetPointer(JNIEnv* env, jobject obj)
  11. {
  12. return reinterpret_cast<GraphicsModGroupConfig*>(
  13. env->GetLongField(obj, IDCache::GetGraphicsModGroupPointer()));
  14. }
  15. jobject GraphicsModToJava(JNIEnv* env, GraphicsModConfig* mod, jobject jGraphicsModGroup)
  16. {
  17. return env->NewObject(IDCache::GetGraphicsModClass(), IDCache::GetGraphicsModConstructor(),
  18. reinterpret_cast<jlong>(mod), jGraphicsModGroup);
  19. }
  20. extern "C" {
  21. JNIEXPORT void JNICALL
  22. Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_finalize(JNIEnv* env,
  23. jobject obj)
  24. {
  25. delete GetPointer(env, obj);
  26. }
  27. JNIEXPORT jobjectArray JNICALL
  28. Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_getMods(JNIEnv* env,
  29. jobject obj)
  30. {
  31. GraphicsModGroupConfig* mod_group = GetPointer(env, obj);
  32. std::set<std::string> groups;
  33. for (const GraphicsModConfig& mod : mod_group->GetMods())
  34. {
  35. for (const GraphicsTargetGroupConfig& group : mod.m_groups)
  36. groups.insert(group.m_name);
  37. }
  38. std::vector<GraphicsModConfig*> mods;
  39. for (GraphicsModConfig& mod : mod_group->GetMods())
  40. {
  41. // If no group matches the mod's features, or if the mod has no features, skip it
  42. if (std::ranges::none_of(mod.m_features, [&groups](const GraphicsModFeatureConfig& feature) {
  43. return groups.contains(feature.m_group);
  44. }))
  45. {
  46. continue;
  47. }
  48. mods.push_back(&mod);
  49. }
  50. return VectorToJObjectArray(
  51. env, mods, IDCache::GetGraphicsModClass(),
  52. [obj](JNIEnv* env, GraphicsModConfig* mod) { return GraphicsModToJava(env, mod, obj); });
  53. }
  54. JNIEXPORT void JNICALL
  55. Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_save(JNIEnv* env, jobject obj)
  56. {
  57. GetPointer(env, obj)->Save();
  58. }
  59. JNIEXPORT jobject JNICALL
  60. Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_load(JNIEnv* env, jclass,
  61. jstring jGameId)
  62. {
  63. auto* mod_group = new GraphicsModGroupConfig(GetJString(env, jGameId));
  64. mod_group->Load();
  65. return env->NewObject(IDCache::GetGraphicsModGroupClass(),
  66. IDCache::GetGraphicsModGroupConstructor(), mod_group);
  67. }
  68. }