Add Discord community version (64-bit only)

- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
This commit is contained in:
2026-02-18 15:48:36 -08:00
parent c19eb3d7ff
commit c080f0d97f
26930 changed files with 2529574 additions and 0 deletions

View File

@@ -0,0 +1,331 @@
package com.firemint.realracing;
import android.annotation.TargetApi;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.Log;
import android.view.MotionEvent;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
/* loaded from: classes2.dex */
public class GLView extends GLSurfaceView {
private static final int EGL_CONTEXT_CLIENT_VERSION = 12440;
private static final int EGL_COVERAGE_BUFFERS_NV = 12512;
private static final int EGL_COVERAGE_SAMPLES_NV = 12513;
private static final int EGL_DEPTH_ENCODING_NONLINEAR_NV = 12515;
private static final int EGL_DEPTH_ENCODING_NV = 12514;
private static final int EGL_OPENGL_ES2_BIT = 4;
private EGLContext m_glContext;
public EGLContext getGLContext() {
return this.m_glContext;
}
/* JADX WARN: Multi-variable type inference failed */
@TargetApi(11)
public GLView(Context context) {
super(context);
this.m_glContext = null;
setImportantForAccessibility(2);
setPreserveEGLContextOnPause(true);
setFocusable(true);
setFocusableInTouchMode(true);
setEGLConfigChooser(new ConfigChooser());
setEGLContextFactory(new ContextFactory());
setRenderer(new GLRenderer());
}
public class ConfigChooser implements GLSurfaceView.EGLConfigChooser {
static final /* synthetic */ boolean $assertionsDisabled = false;
private ConfigChooser() {
}
@Override // android.opengl.GLSurfaceView.EGLConfigChooser
public EGLConfig chooseConfig(EGL10 egl10, EGLDisplay eGLDisplay) {
ConfigAttribs configAttribs = GLView.this.new ConfigAttribs();
configAttribs.redBits = 8;
configAttribs.greenBits = 8;
configAttribs.blueBits = 8;
configAttribs.alphaBits = 0;
configAttribs.stencilBits = 8;
configAttribs.depthBits = 24;
configAttribs.samples = 0;
configAttribs.nvSamples = 0;
int[] iArr = new int[1];
egl10.eglGetConfigs(eGLDisplay, null, 0, iArr);
int i = iArr[0];
if (i > 0) {
EGLConfig[] eGLConfigArr = new EGLConfig[i];
egl10.eglGetConfigs(eGLDisplay, eGLConfigArr, i, iArr);
int i2 = -1;
int i3 = -1;
for (int i4 = 0; i4 < i; i4++) {
ConfigAttribs configAttribs2 = GLView.this.new ConfigAttribs(egl10, eGLDisplay, eGLConfigArr[i4]);
configAttribs2.print(false);
int scoreConfig = scoreConfig(configAttribs2, configAttribs);
if (scoreConfig != -1 && (scoreConfig < i3 || i3 == -1)) {
i2 = i4;
i3 = scoreConfig;
}
}
StringBuilder sb = new StringBuilder();
sb.append("found config = ");
sb.append(i2);
if (i2 == -1) {
configAttribs.depthBits = 16;
for (int i5 = 0; i5 < i; i5++) {
ConfigAttribs configAttribs3 = GLView.this.new ConfigAttribs(egl10, eGLDisplay, eGLConfigArr[i5]);
configAttribs3.print(false);
int scoreConfig2 = scoreConfig(configAttribs3, configAttribs);
if (scoreConfig2 != -1 && (scoreConfig2 < i3 || i3 == -1)) {
i2 = i5;
i3 = scoreConfig2;
}
}
}
GLView.this.new ConfigAttribs(egl10, eGLDisplay, eGLConfigArr[i2]).print(true);
return eGLConfigArr[i2];
}
Log.e("GLView", "Failed to find acceptable EGLConfig!");
return null;
}
private int scoreConfig(ConfigAttribs configAttribs, ConfigAttribs configAttribs2) {
int i;
int i2;
if ((configAttribs.surfaceType & 4) == 0 || (configAttribs.renderableType & 4) == 0 || configAttribs.redBits < configAttribs2.redBits || configAttribs.greenBits < configAttribs2.greenBits || configAttribs.blueBits < configAttribs2.blueBits || configAttribs.stencilBits < configAttribs2.stencilBits || (i = configAttribs.depthBits) < (i2 = configAttribs2.depthBits)) {
return -1;
}
int abs = Math.abs(i - i2);
int abs2 = Math.abs(configAttribs.redBits - configAttribs2.redBits);
int i3 = (abs * abs) + (abs2 * abs2);
int abs3 = Math.abs(configAttribs.greenBits - configAttribs2.greenBits);
int i4 = i3 + (abs3 * abs3);
int abs4 = Math.abs(configAttribs.blueBits - configAttribs2.blueBits);
int i5 = i4 + (abs4 * abs4);
int abs5 = Math.abs(configAttribs.alphaBits - configAttribs2.alphaBits);
int i6 = i5 + (abs5 * abs5);
int abs6 = Math.abs(configAttribs.stencilBits - configAttribs2.stencilBits);
int i7 = i6 + (abs6 * abs6);
int abs7 = Math.abs(configAttribs.samples - configAttribs2.samples);
int i8 = i7 + (abs7 * abs7);
int abs8 = Math.abs(configAttribs.nvSamples - configAttribs2.nvSamples);
int i9 = i8 + (abs8 * abs8);
if (configAttribs.nv_depthEncoding != GLView.EGL_DEPTH_ENCODING_NONLINEAR_NV) {
i9++;
}
return (configAttribs2.nvSamples <= 0 || configAttribs.nvSamples <= 0) ? i9 : i9 + 1;
}
}
public class ConfigAttribs {
int alphaBits;
int blueBits;
int caveat;
int depthBits;
int greenBits;
int level;
int nvSamples;
int nv_depthEncoding;
int redBits;
int renderableType;
int samples;
int stencilBits;
int surfaceType;
int transparentType;
public ConfigAttribs() {
this.redBits = 0;
this.greenBits = 0;
this.blueBits = 0;
this.alphaBits = 0;
this.depthBits = 0;
this.stencilBits = 0;
this.samples = 0;
this.nvSamples = 0;
this.level = 0;
this.caveat = 0;
this.surfaceType = 0;
this.renderableType = 0;
this.transparentType = 0;
this.nv_depthEncoding = 0;
}
public ConfigAttribs(EGL10 egl10, EGLDisplay eGLDisplay, EGLConfig eGLConfig) {
this.redBits = 0;
this.greenBits = 0;
this.blueBits = 0;
this.alphaBits = 0;
this.depthBits = 0;
this.stencilBits = 0;
this.samples = 0;
this.nvSamples = 0;
this.level = 0;
this.caveat = 0;
this.surfaceType = 0;
this.renderableType = 0;
this.transparentType = 0;
this.nv_depthEncoding = 0;
this.redBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12324);
this.greenBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12323);
this.blueBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12322);
this.alphaBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12321);
this.depthBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12325);
this.stencilBits = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12326);
this.samples = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12337);
this.nvSamples = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, GLView.EGL_COVERAGE_SAMPLES_NV);
this.level = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12329);
this.caveat = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12327);
this.surfaceType = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12339);
this.renderableType = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12352);
this.transparentType = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, 12340);
this.nv_depthEncoding = getEGLConfigAttrib(egl10, eGLDisplay, eGLConfig, GLView.EGL_DEPTH_ENCODING_NV);
}
private int getEGLConfigAttrib(EGL10 egl10, EGLDisplay eGLDisplay, EGLConfig eGLConfig, int i) {
int[] iArr = {0};
egl10.eglGetConfigAttrib(eGLDisplay, eGLConfig, i, iArr);
return iArr[0];
}
/* JADX INFO: Access modifiers changed from: private */
public void print(boolean z) {
String str = (this.surfaceType & 4) != 0 ? "true" : "false";
String str2 = (this.renderableType & 4) != 0 ? "true" : "false";
int i = this.caveat;
String str3 = i != 12368 ? i != 12369 ? "none" : "bad" : "slow";
String str4 = this.nv_depthEncoding == GLView.EGL_DEPTH_ENCODING_NONLINEAR_NV ? "nonlinear" : "none";
String str5 = this.transparentType == 12370 ? "rgb" : "none";
if (z) {
StringBuilder sb = new StringBuilder();
sb.append("EGL_RED_SIZE: ");
sb.append(this.redBits);
StringBuilder sb2 = new StringBuilder();
sb2.append("EGL_GREEN_SIZE: ");
sb2.append(this.greenBits);
StringBuilder sb3 = new StringBuilder();
sb3.append("EGL_BLUE_SIZE: ");
sb3.append(this.blueBits);
StringBuilder sb4 = new StringBuilder();
sb4.append("EGL_ALPHA_SIZE: ");
sb4.append(this.alphaBits);
StringBuilder sb5 = new StringBuilder();
sb5.append("EGL_DEPTH_SIZE: ");
sb5.append(this.depthBits);
StringBuilder sb6 = new StringBuilder();
sb6.append("EGL_STENCIL_SIZE: ");
sb6.append(this.stencilBits);
StringBuilder sb7 = new StringBuilder();
sb7.append("EGL_SAMPLES: ");
sb7.append(this.samples);
StringBuilder sb8 = new StringBuilder();
sb8.append("EGL_COVERAGE_SAMPLES_NV: ");
sb8.append(this.nvSamples);
StringBuilder sb9 = new StringBuilder();
sb9.append("EGL_LEVEL: ");
sb9.append(this.level);
StringBuilder sb10 = new StringBuilder();
sb10.append("EGL_TRANSPARENT_TYPE: ");
sb10.append(str5);
StringBuilder sb11 = new StringBuilder();
sb11.append("EGL_WINDOW_BIT: ");
sb11.append(str);
StringBuilder sb12 = new StringBuilder();
sb12.append("EGL_OPENGL_ES2_BIT: ");
sb12.append(str2);
StringBuilder sb13 = new StringBuilder();
sb13.append("EGL_CONFIG_CAVEAT: ");
sb13.append(str3);
StringBuilder sb14 = new StringBuilder();
sb14.append("EGL_DEPTH_ENCODING_NV: ");
sb14.append(str4);
return;
}
String.format("EGLConfig r:%d g:%d b:%d a:%d d:%d s:%d aa:%d nvaa:%d level:%d trans:%s gles2:%s window:%s caveat:%s nvDepthEnc:%s", Integer.valueOf(this.redBits), Integer.valueOf(this.greenBits), Integer.valueOf(this.blueBits), Integer.valueOf(this.alphaBits), Integer.valueOf(this.depthBits), Integer.valueOf(this.stencilBits), Integer.valueOf(this.samples), Integer.valueOf(this.nvSamples), Integer.valueOf(this.level), str5, str2, str, str3, str4);
}
}
public class ContextFactory implements GLSurfaceView.EGLContextFactory {
private ContextFactory() {
}
@Override // android.opengl.GLSurfaceView.EGLContextFactory
public EGLContext createContext(EGL10 egl10, EGLDisplay eGLDisplay, EGLConfig eGLConfig) {
Log.w("RealRacing3", "creating OpenGL ES 2.0 context");
int[] iArr = {GLView.EGL_CONTEXT_CLIENT_VERSION, 2, 12344};
GLView.this.m_glContext = egl10.eglCreateContext(eGLDisplay, eGLConfig, EGL10.EGL_NO_CONTEXT, iArr);
GLView.this.new ConfigAttribs(egl10, eGLDisplay, eGLConfig).print(true);
return GLView.this.m_glContext;
}
@Override // android.opengl.GLSurfaceView.EGLContextFactory
public void destroyContext(EGL10 egl10, EGLDisplay eGLDisplay, EGLContext eGLContext) {
egl10.eglDestroyContext(eGLDisplay, eGLContext);
GLView.this.m_glContext = null;
}
}
@Override // android.view.View
public boolean onTouchEvent(MotionEvent motionEvent) {
if (MainActivity.instance.getPaused()) {
return true;
}
int actionMasked = motionEvent.getActionMasked();
if (actionMasked == 0 || actionMasked == 5) {
int actionIndex = motionEvent.getActionIndex();
queueEvent(new TouchEvent(actionMasked, motionEvent.getPointerId(actionIndex), motionEvent.getX(actionIndex), motionEvent.getY(actionIndex), false));
} else if (actionMasked == 2) {
for (int i = 0; i < motionEvent.getPointerCount(); i++) {
queueEvent(new TouchEvent(actionMasked, motionEvent.getPointerId(i), motionEvent.getX(i), motionEvent.getY(i), false));
}
} else if (actionMasked == 1 || actionMasked == 6) {
int actionIndex2 = motionEvent.getActionIndex();
queueEvent(new TouchEvent(actionMasked, motionEvent.getPointerId(actionIndex2), motionEvent.getX(actionIndex2), motionEvent.getY(actionIndex2), motionEvent.getActionMasked() == 1));
} else if (actionMasked == 3) {
queueEvent(new TouchEvent(actionMasked, 0, 0.0f, 0.0f, false));
}
return true;
}
public class TouchEvent implements Runnable {
int m_action;
int m_id;
boolean m_last;
float m_x;
float m_y;
public TouchEvent(int i, int i2, float f, float f2, boolean z) {
this.m_action = i;
this.m_id = i2;
this.m_x = f;
this.m_y = f2;
this.m_last = z;
}
@Override // java.lang.Runnable
public void run() {
try {
int i = this.m_action;
if (i != 0 && i != 5) {
if (i == 2) {
MainActivity.instance.onTouchMoveJNI(this.m_id, this.m_x, this.m_y);
} else {
if (i != 1 && i != 6) {
if (i == 3) {
MainActivity.instance.onTouchCancelJNI();
}
}
MainActivity.instance.onTouchEndJNI(this.m_id, this.m_x, this.m_y, this.m_last);
}
}
MainActivity.instance.onTouchBeginJNI(this.m_id, this.m_x, this.m_y);
} catch (UnsatisfiedLinkError e) {
Log.e("RealRacing3", "UnsatisfiedLinkError when processing touch input: " + e.getMessage());
}
}
}
}