mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-20 18:59:07 -05:00
fix: reprofile j2me-loader at 752b93a
The native build split into m3g/ and micro3d/ makefiles, micro3d moved to ru.woesss.j2me.micro3d, c++_shared now loads ahead of every native module and MIDI can play through a user sound bank (EAS or TinySoundFont). appcenter.cer is no longer read. The new libraries are marked unsourceable until the release's own copies are collected.
This commit is contained in:
1 parent
8edaca0925
commit
53a1c6e0d8
1 file changed
+107
-35
+107
-35
@@ -4,8 +4,8 @@ core_classification: community_fork
|
||||
source: "https://github.com/nikita36078/J2ME-Loader"
|
||||
upstream: "https://github.com/nikita36078/J2ME-Loader"
|
||||
author: "Nikita Shakarun"
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "9b0fa48a0a0d1e61376c0b9af28b3d2caec0a4cc"
|
||||
profiled_date: "2026-10-20"
|
||||
source_commit: "752b93afa80f657fa515f560bebf7904d219f73a"
|
||||
core_version: "1.8.2"
|
||||
display_name: "Mobile - J2ME (J2ME Loader)"
|
||||
cores:
|
||||
@@ -20,24 +20,35 @@ notes: |
|
||||
converted to Dalvik bytecode on import and runs against the javax.microedition
|
||||
classes compiled into the app, so no device firmware is read. The vendor
|
||||
extension trees (Nokia, Siemens, Samsung, Motorola, Sony Ericsson, Sprint,
|
||||
Vodafone, KDDI, JBlend, Mascot Capsule) are Java sources in the same package.
|
||||
Vodafone, J-Phone, KDDI, JBlend, Mascot Capsule, Mexa) are Java sources in the
|
||||
same package. The Mascot Capsule, JBlend, Motorola, Vodafone and Mexa 3D APIs
|
||||
all delegate to one renderer in ru.woesss.j2me.micro3d.
|
||||
A fork of NaikSoftware/J2meLoader with an independent history: the 2016
|
||||
ancestor carries no assets directory and none of the loading code cited below.
|
||||
ref: app/src/main/java/ru/woesss/j2me/installer/AppInstaller.java:292,
|
||||
app/src/main/java/javax/microedition/shell/AppClassLoader.java:38
|
||||
|
||||
The working directory holds converted/, configs/, templates/, data/, fs/c and
|
||||
fs/e, all written by the app. fs/c and fs/e are the JSR-75 drives, data/ is RMS
|
||||
storage, converted/ holds converted.dex and res.jar per MIDlet. Nothing there
|
||||
is user-supplied.
|
||||
ref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:41-53,
|
||||
app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:146-152
|
||||
fs/e, all written by the app, plus shaders/ and soundbanks/, created empty when
|
||||
the directory is initialized and read from. fs/c and fs/e are the JSR-75
|
||||
drives, data/ is RMS storage, converted/ holds converted.dex and res.jar per
|
||||
MIDlet.
|
||||
ref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:47-61,
|
||||
app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:155-161,
|
||||
app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:166-181
|
||||
|
||||
The shader and property assets are read through ContextHolder.getAssetAsString,
|
||||
which rethrows an IOException as RuntimeException instead of degrading, so an
|
||||
absent asset ends the code path that reads it. Roboto-Regular.ttf goes through
|
||||
Typeface.createFromAsset and appcenter.cer through the asset manager directly.
|
||||
ref: app/src/main/java/javax/microedition/util/ContextHolder.java:179-193
|
||||
Typeface.createFromAsset.
|
||||
ref: app/src/main/java/javax/microedition/util/ContextHolder.java:178-193
|
||||
|
||||
MIDI playback goes to the Android synthesizer unless a sound bank is selected
|
||||
per MIDlet. Manager's static initializer then tries the EAS and the
|
||||
TinySoundFont plugins with that bank and falls back to the Android synthesizer
|
||||
with a toast when neither accepts it.
|
||||
ref: app/src/main/java/javax/microedition/media/Manager.java:138-140,
|
||||
app/src/main/java/ru/woesss/j2me/mmapi/synth/SynthPluginFactory.java:36-54
|
||||
|
||||
files:
|
||||
- name: Roboto-Regular.ttf
|
||||
@@ -47,7 +58,7 @@ files:
|
||||
category: game_data
|
||||
description: "Typeface for the virtual keyboard and overlays"
|
||||
note: "Built into a Typeface at CanvasWrapper construction, which is a field initializer of Canvas and therefore runs for every MIDlet that opens one. Drives the key captions, the soft bar and the FPS counter."
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/CanvasWrapper.java:36, app/src/main/java/javax/microedition/lcdui/Canvas.java:141, app/src/main/java/javax/microedition/lcdui/keyboard/VirtualKeyboard.java:908, app/src/main/java/javax/microedition/lcdui/overlay/FpsCounter.java:48"
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/CanvasWrapper.java:37, app/src/main/java/javax/microedition/lcdui/Canvas.java:141, app/src/main/java/javax/microedition/lcdui/keyboard/VirtualKeyboard.java:908, app/src/main/java/javax/microedition/lcdui/overlay/FpsCounter.java:48"
|
||||
|
||||
- name: system.props
|
||||
system: j2me
|
||||
@@ -56,7 +67,7 @@ files:
|
||||
category: game_data
|
||||
description: "Default microedition system properties"
|
||||
note: "Read from assets/defaults when a profile is created and again when the config screen or updateSystemProperties fills the field. Each line becomes a System.setProperty pair at MIDlet startup, carrying microedition.configuration, microedition.platform, the JSR version strings and the vendor identity values."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:198, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:609, app/src/main/java/javax/microedition/shell/MicroLoader.java:247-252"
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:201, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:636, app/src/main/java/javax/microedition/shell/MicroLoader.java:249-256"
|
||||
|
||||
- name: simple.vsh
|
||||
system: j2me
|
||||
@@ -65,7 +76,7 @@ files:
|
||||
category: game_data
|
||||
description: "Vertex shader for the screen blitter"
|
||||
note: "Compiled when the GL surface is created and no user shader is selected. Graphics mode 1 is the default, so this is the standard display path. Also compiled as the Simple program of the Mascot Capsule renderer."
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:35, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:61, app/src/main/java/javax/microedition/lcdui/Canvas.java:782, app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:180, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:212"
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:34, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:58, app/src/main/java/javax/microedition/lcdui/Canvas.java:795, app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:183, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:216"
|
||||
|
||||
- name: simple.fsh
|
||||
system: j2me
|
||||
@@ -74,7 +85,7 @@ files:
|
||||
category: game_data
|
||||
description: "Fragment shader for the screen blitter"
|
||||
note: "Paired with simple.vsh. createProgram returning -1 raises RuntimeException at surface creation."
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:36, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:62-66, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:213"
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:35, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:59-63, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:217"
|
||||
|
||||
- name: color.vsh
|
||||
system: j2me
|
||||
@@ -82,8 +93,8 @@ files:
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Vertex shader for untextured Mascot Capsule geometry"
|
||||
note: "Program.create builds the tex, color, simple and sprite programs together the first time the Mascot Capsule renderer initializes, so all four pairs are read on the first micro3d frame."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:153, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58"
|
||||
note: "Program.create builds the tex, color, simple and sprite programs together whenever the renderer binds a target of a new size, so all four pairs are read on the first micro3d frame."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:150, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-59, app/src/main/java/ru/woesss/j2me/micro3d/Render.java:156"
|
||||
|
||||
- name: color.fsh
|
||||
system: j2me
|
||||
@@ -91,8 +102,8 @@ files:
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Fragment shader for untextured Mascot Capsule geometry"
|
||||
note: "Carries the sphere map, toon threshold and primitive colour uniforms of the Color program."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:154, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:155-161"
|
||||
note: "Carries the sphere map and toon shading uniforms of the Color program."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:151, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:172-175"
|
||||
|
||||
- name: tex.vsh
|
||||
system: j2me
|
||||
@@ -101,7 +112,7 @@ files:
|
||||
category: game_data
|
||||
description: "Vertex shader for textured Mascot Capsule geometry"
|
||||
note: "Built by Program.create alongside the other three pairs."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:229, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58"
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:233, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-59"
|
||||
|
||||
- name: tex.fsh
|
||||
system: j2me
|
||||
@@ -109,8 +120,8 @@ files:
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Fragment shader for textured Mascot Capsule geometry"
|
||||
note: "Carries the texture size, transparency and sphere map uniforms of the Tex program."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:230, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:231-235"
|
||||
note: "Carries the texture size, sphere map and toon shading uniforms of the Tex program."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:234, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:258-267"
|
||||
|
||||
- name: sprite.vsh
|
||||
system: j2me
|
||||
@@ -119,7 +130,7 @@ files:
|
||||
category: game_data
|
||||
description: "Vertex shader for Mascot Capsule sprites"
|
||||
note: "Built by Program.create alongside the other three pairs."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:310, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58"
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:313, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-59"
|
||||
|
||||
- name: sprite.fsh
|
||||
system: j2me
|
||||
@@ -127,8 +138,18 @@ files:
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Fragment shader for Mascot Capsule sprites"
|
||||
note: "Carries the texture size, transparency and colour key uniforms of the Sprite program."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:311, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:312-315"
|
||||
note: "Carries the texture size and transparency uniforms of the Sprite program."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:314, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:333-334"
|
||||
|
||||
- name: libc++_shared.so
|
||||
system: j2me
|
||||
required: true
|
||||
bundled: true
|
||||
unsourceable: "built into this app's package only, and the same-named build of another app must not stand in"
|
||||
category: game_data
|
||||
description: "NDK C++ runtime for the native modules"
|
||||
note: "Named ahead of every other native library, in the M3G toolkit init, in the static initializer of micro3d Utils and in both synthesizer classes."
|
||||
source_ref: "app/src/main/java/javax/microedition/m3g/Platform.java:69, app/src/main/java/ru/woesss/j2me/micro3d/Utils.java:103, app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:70, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:70"
|
||||
|
||||
- name: libjavam3g.so
|
||||
system: j2me
|
||||
@@ -137,7 +158,7 @@ files:
|
||||
category: game_data
|
||||
description: "JSR-184 M3G engine"
|
||||
note: "Named by System.loadLibrary(\"javam3g\") outside any catch, the first time the toolkit reports the UI thread available. Built by ndkBuild from the m3g sources against GLES 1.1."
|
||||
source_ref: "app/src/main/java/javax/microedition/m3g/Platform.java:66-72, app/src/main/cpp/Android.mk:3-15"
|
||||
source_ref: "app/src/main/java/javax/microedition/m3g/Platform.java:65-72, app/src/main/cpp/m3g/Android.mk:5-16"
|
||||
|
||||
- name: libmicro3d.so
|
||||
system: j2me
|
||||
@@ -145,17 +166,48 @@ files:
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Mascot Capsule vertex and buffer routines"
|
||||
note: "Loaded from the static initializer of Utils, so the first Mascot Capsule call brings it in. Holds fillBuffer, glReadPixels and the bone transform."
|
||||
source_ref: "app/src/main/java/com/mascotcapsule/micro3d/v3/Utils.java:149-159, app/src/main/cpp/Android.mk:28-34"
|
||||
note: "Loaded from the static initializer of Utils, so the first call into the micro3d renderer brings it in. Holds fillBuffer, glReadPixels and the bone transform."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/micro3d/Utils.java:97-105, app/src/main/cpp/micro3d/Android.mk:5-7"
|
||||
|
||||
- name: appcenter.cer
|
||||
- name: liboboe.so
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "built into this app's package only, and the same-named build of another app must not stand in"
|
||||
category: game_data
|
||||
description: "X.509 certificate for the crash report endpoint"
|
||||
note: "Read into a trust store only when a crash report is sent from Android 4.1 through 4.4, where TLSv1.2 is forced. A read or certificate failure falls back to the default socket factory."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/crashes/TLSSocketFactory.java:41-63, app/src/main/java/ru/playsoftware/j2meloader/crashes/AppCenterSender.java:56-60"
|
||||
description: "Audio output stream of the sound bank synthesizers"
|
||||
note: "Named by both synthesizer classes ahead of their own libraries. Reached only when a sound bank is selected, and SynthPluginFactory catches the load failure and falls back to the Android synthesizer."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:71, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:71, app/src/main/java/ru/woesss/j2me/mmapi/synth/SynthPluginFactory.java:41-54"
|
||||
|
||||
- name: libmmapi_common.so
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "built into this app's package only, and the same-named build of another app must not stand in"
|
||||
category: game_data
|
||||
description: "Shared player and listener code of the synthesizer plugins"
|
||||
note: "Named by both synthesizer classes ahead of their own libraries. Same fallback as liboboe.so."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:72, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:72, app/src/main/cpp/mmapi_common/Android.mk:5-11"
|
||||
|
||||
- name: libmmapi_eas.so
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "built into this app's package only, and the same-named build of another app must not stand in"
|
||||
category: game_data
|
||||
description: "Sonivox EAS synthesizer"
|
||||
note: "Loaded from the static initializer of LibEAS when a sound bank is selected. Links the sonivox wavetable engine statically and reads the bank as a DLS collection. A failure leaves the TinySoundFont plugin or the Android synthesizer."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:69-74, app/src/main/cpp/mmapi_eas/Android.mk:5-25, app/src/main/cpp/sonivox/Android.mk:131"
|
||||
|
||||
- name: libmmapi_tsf.so
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
unsourceable: "built into this app's package only, and the same-named build of another app must not stand in"
|
||||
category: game_data
|
||||
description: "TinySoundFont synthesizer"
|
||||
note: "Loaded from the static initializer of LibTSF when a sound bank is selected. Reads the bank as a SoundFont and plays standard MIDI files and tones. A failure leaves the EAS plugin or the Android synthesizer."
|
||||
source_ref: "app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:69-74, app/src/main/cpp/mmapi_tsf/Android.mk:5-11"
|
||||
|
||||
- name: licenses.html
|
||||
system: j2me
|
||||
@@ -166,6 +218,26 @@ files:
|
||||
note: "Read when the licences dialog is opened and shown as HTML. Emulation never touches it."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/info/LicensesDialogFragment.java:35"
|
||||
|
||||
- name: "<soundbank>.dls"
|
||||
path: "soundbanks/<soundbank>.dls"
|
||||
system: j2me
|
||||
required: false
|
||||
unsourceable: "user supplied, no canonical file"
|
||||
category: game_data
|
||||
description: "DLS sound bank for MIDI playback"
|
||||
note: "The config screen lists every regular file in the sound banks directory with no extension filter, and the selected name is kept as a path when the file exists. EAS_LoadDLSCollection reads it with the header search flag off. A rejected file throws and the plugin is skipped."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:277-301, app/src/main/java/javax/microedition/shell/MicroLoader.java:285-288, app/src/main/cpp/mmapi_eas/eas_player.cpp:112-126, app/src/main/cpp/mmapi_eas/eas_player_jni.cpp:16-28"
|
||||
|
||||
- name: "<soundbank>.sf2"
|
||||
path: "soundbanks/<soundbank>.sf2"
|
||||
system: j2me
|
||||
required: false
|
||||
unsourceable: "user supplied, no canonical file"
|
||||
category: game_data
|
||||
description: "SoundFont sound bank for MIDI playback"
|
||||
note: "Same selection path as the DLS bank. tsf_load_filename parses it, and a null result throws IllegalArgumentException so the plugin is skipped."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:277-301, app/src/main/cpp/mmapi_tsf/tsf_player.cpp:87-94, app/src/main/cpp/mmapi_tsf/tsf_player_jni.cpp:15-27"
|
||||
|
||||
- name: "<shader>.ini"
|
||||
path: "shaders/<shader>.ini"
|
||||
system: j2me
|
||||
@@ -173,8 +245,8 @@ files:
|
||||
unsourceable: "user authored, no canonical file"
|
||||
category: game_data
|
||||
description: "Shader descriptor read from the emulator directory"
|
||||
note: "The config screen creates the shaders directory, lists every file ending in .ini and parses it as sections opened by a bracketed name, keeping the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingMaxValue groups are also read, which is the PPSSPP post-processing descriptor format."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:336-367, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-207, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:207-212"
|
||||
note: "The config screen creates the shaders directory, lists every file ending in .ini and parses it as sections opened by a bracketed name, keeping the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingMaxValue/SettingStep groups are also read, which is the PPSSPP post-processing descriptor format."
|
||||
source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:368-399, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-206, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:156-164"
|
||||
|
||||
- name: "<shader>.vsh"
|
||||
path: "shaders/<shader>.vsh"
|
||||
@@ -184,7 +256,7 @@ files:
|
||||
category: game_data
|
||||
description: "Vertex shader named by a descriptor"
|
||||
note: "Read whole from the shaders directory when the selected filter names it, then compiled in place of the built-in blitter. An unreadable file yields an empty string, the program fails to build and the bundled default is used after a toast."
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58, app/src/main/java/javax/microedition/shell/MicroLoader.java:270-273, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:196-205"
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-57, app/src/main/java/javax/microedition/shell/MicroLoader.java:272-276, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:156-164"
|
||||
|
||||
- name: "<shader>.fsh"
|
||||
path: "shaders/<shader>.fsh"
|
||||
@@ -194,4 +266,4 @@ files:
|
||||
category: game_data
|
||||
description: "Fragment shader named by a descriptor"
|
||||
note: "Paired with the vertex file of the same descriptor. Four float uniforms from the descriptor settings are pushed to it at surface creation."
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58, app/src/main/java/javax/microedition/lcdui/Canvas.java:791-793"
|
||||
source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-57, app/src/main/java/javax/microedition/lcdui/Canvas.java:804-806"
|
||||
Reference in new issue
Block a user