Merge Zink renderer to upstream (#1585)

* OSMesa EGLBridge

* It renders a gray screen with Zink!

* Image

* Added missing file: gl/glext.h

* Added jniLibs/arm64-v8a/libOSMesa_8.so

* Load built-in libOSMesa when dev lib not available

* Added jniLibs/x86_64/libOSMesa_8.so

* Start trying to use Android's internal APIs to manage framebuffers

* Automatic stride to un-broke the image

* DMA

* Update lwjgl3 version

* Update LauncherPreferences.java

Temporary force set, to fix #1121

* Remove ndk.abiFilters

* Re-add ndk.abiFilters but for 64bit archs only

* Fixed x86_64 libOSMesa_8.so

* Fix buffer size

* [WIP] Force enable VK ext for GL 3.0

* WIP force ext

* Attempt get Zink GL 3.0 by force enable some exts

* Just missing ;;

* Mesa3D: set OpenGL version to 4.6

* Added Zink to renderer list

* Fixed the renderer check

* Maybe correct the switch between gl4es and zink

* Update JREUtils.java

fixes from https://github.com/sp614x/optifine/issues/420

* also set glsl version

* [NOT TESTED] (DO NOT TRY DEVS ONLY) upstream mesa to staging mesa branch

* upstream mesa once again

* Revert "upstream mesa once again"

This reverts commit ccb0f429b707c6fed1376809bb978e7eb8230222.

* add arm32

* Enable building for arm32

* Attempt fix auto change to libname libOSMesa

* Attempt fix (2/2)?

* Added missed `break`, should fix gl4es crashes

* Update JREUtils.java

* Support OpenJDK 17 runtime environment (internal)

* Update JREUtils.java

* [zink] use RGBA instead of RGB

Some mobile GPUs does not support RGB format, so switching to RGBA is necessary. However, native window is set to RGBX to ignore alpha channel.

* Move jreReleaseList to here

* Update BaseMainActivity.java

* Fixes (#1525)

* import java.util.Map
* fix: String cannot be converted to boolean
* Fixes
* Put readJREReleaseProperties to try catch

* Remove loading libtinyiconv.so (statically linked)

* lets do this

* upsteam to the staging branch of 21.0

* [zink] exports OpenGL 4.6 again

Limit OpenGL version does nothing other than deny the game to use it, so limiting is probably useless. Also, this is a lie that user see "export OpenGL 4.6" in renderer list but see "OpenGL 3.2" when enter game. Therefore, change back to OpenGL 4.6.

* New string: mcn_check_fail_vulkan_support

* [not yet finish] error if GPU doesn’t have Vulkan

* [not yet finished] error if vulkan is unsupported

* Additional checks for Vulkan support state

* Changes about gl4es renderers

* Define new renderer: opengles2_5 g4es 1.1.4

Also, change how gl4es renderers works

* Filter out "_5"

* Don’t allow custom OpenGL libname from jvm args

* Update strings.xml

* Update headings_array.xml

* Update headings_array.xml

* Update strings.xml

* Unreachable code

* Enable build for 32-bit x86 (zink not added!)

* Changes from upstream and security changes (#1575)

* import java.util.Map

* fix: String cannot be converted to boolean

* Fixes

* Put readJREReleaseProperties to try catch

* Attempt to redirect signal handler to JVM

* @artdeell: missed \n in printf

* Missed include errno.h

* Comment out last changes

* try and optimise gl4es with flags

* corect format

* dont shrink textures

* does notting

* Fix issue #1199

* Filter out Session ID on new log pipe

* int index

* Debug: print all env vars to latestlog.txt

Co-authored-by: artdeell
Co-authored-by: rhjdvsgsgks
Co-authored-by: LegacyGamerHD
Co-authored-by: Boulay Mathias
This commit is contained in:
Duy Tran Khanh 2021-06-24 19:51:56 +07:00 committed by GitHub
parent 76b185e3b5
commit 4a90c8f124
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 16217 additions and 177 deletions

View file

@ -1 +1 @@
20210131
20210328

View file

@ -2,6 +2,7 @@ package net.kdt.pojavlaunch;
import android.app.*;
import android.content.*;
import android.content.pm.PackageManager;
import android.graphics.*;
import android.os.*;
import android.util.*;
@ -65,6 +66,7 @@ public class BaseMainActivity extends LoggableActivity {
}
}
};
private MinecraftGLView minecraftGLView;
private int guiScale;
private DisplayMetrics displayMetrics;
@ -893,6 +895,10 @@ public class BaseMainActivity extends LoggableActivity {
*/
appendlnToLog("--------- beggining with launcher debug");
appendlnToLog("Info: Launcher version: " + BuildConfig.VERSION_NAME);
if (LauncherPreferences.PREF_RENDERER.equals("vulkan_zink")) {
checkVulkanZinkIsSupported();
}
checkLWJGL3Installed();
jreReleaseList = JREUtils.readJREReleaseProperties();
@ -953,6 +959,16 @@ public class BaseMainActivity extends LoggableActivity {
appendlnToLog("Info: LWJGL3 directory: " + Arrays.toString(lwjgl3dir.list()));
}
}
private void checkVulkanZinkIsSupported() {
if (Tools.CURRENT_ARCHITECTURE.equals("x86")
|| Build.VERSION.SDK_INT < 25
|| !getPackageManager().hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_LEVEL)
|| !getPackageManager().hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION)) {
appendlnToLog("Error: Vulkan Zink renderer is not supported!");
throw new RuntimeException(getString(R.string. mcn_check_fail_vulkan_support));
}
}
public void printStream(InputStream stream) {
try {

View file

@ -7,7 +7,7 @@ import androidx.appcompat.app.*;
import android.util.*;
import androidx.appcompat.app.AlertDialog;
public class FatalErrorActivity extends BaseActivity
public class FatalErrorActivity extends AppCompatActivity
{
public static void showError(Context ctx, String savePath, boolean storageAllow, /* boolean isFatalErr, */ Throwable th) {
Intent ferrorIntent = new Intent(ctx, FatalErrorActivity.class);

View file

@ -34,7 +34,8 @@ public class PojavApplication extends Application
crashStream.append(" - Time: " + DateFormat.getDateTimeInstance().format(new Date()) + "\n");
crashStream.append(" - Device: " + Build.PRODUCT + " " + Build.MODEL + "\n");
crashStream.append(" - Android version: " + Build.VERSION.RELEASE + "\n");
crashStream.append(" - Crash stack trace:\n");
crashStream.append(" - Crash stack trace:\n");
crashStream.append(" - Launcher version: " + BuildConfig.VERSION_NAME + "\n");
crashStream.append(Log.getStackTraceString(th));
crashStream.close();
} catch (Throwable th2) {

View file

@ -173,7 +173,7 @@ public final class Tools
// javaArgList.add("-Dorg.lwjgl.libname=liblwjgl3.so");
// javaArgList.add("-Dorg.lwjgl.system.jemalloc.libname=libjemalloc.so");
overrideableArgList.add("-Dorg.lwjgl.opengl.libname=libgl4es_114.so");
overrideableArgList.add("-Dorg.lwjgl.opengl.libname=" + LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME);
// overrideableArgList.add("-Dorg.lwjgl.opengl.libname=libgl4es_115.so");
// javaArgList.add("-Dorg.lwjgl.opengl.libname=libRegal.so");

View file

@ -57,8 +57,8 @@ public class LauncherPreferences
String DEFAULT_JAVA_ARGS =
"-Xms" + (androidHeap > 800 ? 800 : androidHeap) + "m " +
// (32bit) More than 800mb may make JVM not allocateable and crash
"-Xmx" + (doubleAndroidHeap > 800 ? 800 : doubleAndroidHeap) + "m"; /* "m " +
"-Xmx" + (doubleAndroidHeap > 800 ? 800 : doubleAndroidHeap) + "m";
/* "m " +
"-XX:+UseG1GC " +
"-XX:+ParallelRefProcEnabled " +
"-XX:MaxGCPauseMillis=200 " +
@ -81,11 +81,28 @@ public class LauncherPreferences
PREF_CUSTOM_JAVA_ARGS = DEFAULT_JAVA_ARGS;
DEFAULT_PREF.edit().putString("javaArgs", DEFAULT_JAVA_ARGS).commit();
}
switch (PREF_RENDERER) {
case "opengles2":
case "opengles2_5":
PREF_CUSTOM_OPENGL_LIBNAME = "libgl4es_114.so";
break;
case "opengles3":
PREF_CUSTOM_OPENGL_LIBNAME = "libgl4es_115.so";
break;
case "vulkan_zink":
PREF_CUSTOM_OPENGL_LIBNAME = "libOSMesa_8.so";
break;
default:
throw new RuntimeException("Undefined renderer: " + PREF_RENDERER);
}
String argLwjglLibname = "-Dorg.lwjgl.opengl.libname=";
for (String arg : PREF_CUSTOM_JAVA_ARGS.split(" ")) {
if (arg.startsWith(argLwjglLibname)) {
PREF_CUSTOM_OPENGL_LIBNAME = arg.substring(argLwjglLibname.length());
// purge arg
DEFAULT_PREF.edit().putString("javaArgs",
PREF_CUSTOM_JAVA_ARGS.replace(arg, "")).commit();
}
}
}

View file

@ -68,7 +68,6 @@ public class JREUtils
return ret;
}
public static void initJavaRuntime() {
dlopen(findInLdLibPath("libtinyiconv.so"));
dlopen(findInLdLibPath("libjli.so"));
dlopen(findInLdLibPath("libjvm.so"));
dlopen(findInLdLibPath("libverify.so"));
@ -221,12 +220,21 @@ public class JREUtils
envMap.put("LIBGL_NOTEXMAT", "1");
envMap.put("MESA_GLSL_CACHE_DIR", ctx.getCacheDir().getAbsolutePath());
envMap.put("MESA_GL_VERSION_OVERRIDE", "4.6");
envMap.put("MESA_GLSL_VERSION_OVERRIDE", "460");
envMap.put("force_glsl_extensions_warn", "true");
envMap.put("allow_higher_compat_version", "true");
envMap.put("allow_glsl_extension_directive_midshader", "true");
envMap.put("MESA_LOADER_DRIVER_OVERRIDE", "zink");
envMap.put("LD_LIBRARY_PATH", LD_LIBRARY_PATH);
envMap.put("PATH", Tools.DIR_HOME_JRE + "/bin:" + Os.getenv("PATH"));
envMap.put("REGAL_GL_VENDOR", "Android");
envMap.put("REGAL_GL_RENDERER", "Regal");
envMap.put("REGAL_GL_VERSION", "4.5");
envMap.put("POJAV_RENDERER", LauncherPreferences.PREF_RENDERER);
envMap.put("AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth > 0 ? CallbackBridge.windowWidth : CallbackBridge.physicalWidth));
envMap.put("AWTSTUB_HEIGHT", Integer.toString(CallbackBridge.windowHeight > 0 ? CallbackBridge.windowHeight : CallbackBridge.physicalHeight));
@ -245,11 +253,12 @@ public class JREUtils
if(!envMap.containsKey("LIBGL_ES")) {
int glesMajor = getDetectedVersion();
Log.i("glesDetect","GLES version detected: "+glesMajor);
if (glesMajor < 3) {
//fallback to 2 since it's the minimum for the entire app
envMap.put("LIBGL_ES","2");
} else if (LauncherPreferences.PREF_RENDERER.startsWith("opengles")) {
envMap.put("LIBGL_ES", LauncherPreferences.PREF_RENDERER.replace("opengles", ""));
envMap.put("LIBGL_ES", LauncherPreferences.PREF_RENDERER.replace("opengles", "").replace("_5", ""));
} else {
// TODO if can: other backends such as Vulkan.
// Sure, they should provide GLES 3 support.
@ -257,6 +266,7 @@ public class JREUtils
}
}
for (Map.Entry<String, String> env : envMap.entrySet()) {
ctx.appendlnToLog("Added custom env: " + env.getKey() + "=" + env.getValue());
Os.setenv(env.getKey(), env.getValue(), true);
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,332 @@
/*
* Mesa 3-D graphics library
*
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Mesa Off-Screen rendering interface.
*
* This is an operating system and window system independent interface to
* Mesa which allows one to render images into a client-supplied buffer in
* main memory. Such images may manipulated or saved in whatever way the
* client wants.
*
* These are the API functions:
* OSMesaCreateContext - create a new Off-Screen Mesa rendering context
* OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer
* and make the specified context the current one.
* OSMesaDestroyContext - destroy an OSMesaContext
* OSMesaGetCurrentContext - return thread's current context ID
* OSMesaPixelStore - controls how pixels are stored in image buffer
* OSMesaGetIntegerv - return OSMesa state parameters
*
*
* The limits on the width and height of an image buffer can be retrieved
* via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT).
*/
#ifndef OSMESA_H
#define OSMESA_H
#ifdef __cplusplus
extern "C" {
#endif
#include <GL/gl.h>
#define OSMESA_MAJOR_VERSION 11
#define OSMESA_MINOR_VERSION 2
#define OSMESA_PATCH_VERSION 0
/*
* Values for the format parameter of OSMesaCreateContext()
* New in version 2.0.
*/
#define OSMESA_COLOR_INDEX GL_COLOR_INDEX
#define OSMESA_RGBA GL_RGBA
#define OSMESA_BGRA 0x1
#define OSMESA_ARGB 0x2
#define OSMESA_RGB GL_RGB
#define OSMESA_BGR 0x4
#define OSMESA_RGB_565 0x5
/*
* OSMesaPixelStore() parameters:
* New in version 2.0.
*/
#define OSMESA_ROW_LENGTH 0x10
#define OSMESA_Y_UP 0x11
/*
* Accepted by OSMesaGetIntegerv:
*/
#define OSMESA_WIDTH 0x20
#define OSMESA_HEIGHT 0x21
#define OSMESA_FORMAT 0x22
#define OSMESA_TYPE 0x23
#define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */
#define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */
/*
* Accepted in OSMesaCreateContextAttrib's attribute list.
*/
#define OSMESA_DEPTH_BITS 0x30
#define OSMESA_STENCIL_BITS 0x31
#define OSMESA_ACCUM_BITS 0x32
#define OSMESA_PROFILE 0x33
#define OSMESA_CORE_PROFILE 0x34
#define OSMESA_COMPAT_PROFILE 0x35
#define OSMESA_CONTEXT_MAJOR_VERSION 0x36
#define OSMESA_CONTEXT_MINOR_VERSION 0x37
typedef struct osmesa_context *OSMesaContext;
/*
* Create an Off-Screen Mesa rendering context. The only attribute needed is
* an RGBA vs Color-Index mode flag.
*
* Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA,
* OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR.
* sharelist - specifies another OSMesaContext with which to share
* display lists. NULL indicates no sharing.
* Return: an OSMesaContext or 0 if error
*/
GLAPI OSMesaContext GLAPIENTRY
OSMesaCreateContext( GLenum format, OSMesaContext sharelist );
/*
* Create an Off-Screen Mesa rendering context and specify desired
* size of depth buffer, stencil buffer and accumulation buffer.
* If you specify zero for depthBits, stencilBits, accumBits you
* can save some memory.
*
* New in Mesa 3.5
*/
GLAPI OSMesaContext GLAPIENTRY
OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
GLint accumBits, OSMesaContext sharelist);
/*
* Create an Off-Screen Mesa rendering context with attribute list.
* The list is composed of (attribute, value) pairs and terminated with
* attribute==0. Supported Attributes:
*
* Attributes Values
* --------------------------------------------------------------------------
* OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc.
* OSMESA_DEPTH_BITS 0*, 16, 24, 32
* OSMESA_STENCIL_BITS 0*, 8
* OSMESA_ACCUM_BITS 0*, 16
* OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE
* OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3
* OSMESA_CONTEXT_MINOR_VERSION 0+
*
* Note: * = default value
*
* We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/
* MINOR_VERSION for the given profile. For example, if you request a GL 1.4
* compat profile, you might get a GL 3.0 compat profile.
* Otherwise, null is returned if the version/profile is not supported.
*
* New in Mesa 11.2
*/
GLAPI OSMesaContext GLAPIENTRY
OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist );
/*
* Destroy an Off-Screen Mesa rendering context.
*
* Input: ctx - the context to destroy
*/
GLAPI void GLAPIENTRY
OSMesaDestroyContext( OSMesaContext ctx );
/*
* Bind an OSMesaContext to an image buffer. The image buffer is just a
* block of memory which the client provides. Its size must be at least
* as large as width*height*sizeof(type). Its address should be a multiple
* of 4 if using RGBA mode.
*
* Image data is stored in the order of glDrawPixels: row-major order
* with the lower-left image pixel stored in the first array position
* (ie. bottom-to-top).
*
* Since the only type initially supported is GL_UNSIGNED_BYTE, if the
* context is in RGBA mode, each pixel will be stored as a 4-byte RGBA
* value. If the context is in color indexed mode, each pixel will be
* stored as a 1-byte value.
*
* If the context's viewport hasn't been initialized yet, it will now be
* initialized to (0,0,width,height).
*
* Input: ctx - the rendering context
* buffer - the image buffer memory
* type - data type for pixel components, only GL_UNSIGNED_BYTE
* supported now
* width, height - size of image buffer in pixels, at least 1
* Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx,
* invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1,
* width>internal limit or height>internal limit.
*/
GLAPI GLboolean GLAPIENTRY
OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type,
GLsizei width, GLsizei height );
/*
* Return the current Off-Screen Mesa rendering context handle.
*/
GLAPI OSMesaContext GLAPIENTRY
OSMesaGetCurrentContext( void );
/*
* Set pixel store/packing parameters for the current context.
* This is similar to glPixelStore.
* Input: pname - OSMESA_ROW_LENGTH
* specify actual pixels per row in image buffer
* 0 = same as image width (default)
* OSMESA_Y_UP
* zero = Y coordinates increase downward
* non-zero = Y coordinates increase upward (default)
* value - the value for the parameter pname
*
* New in version 2.0.
*/
GLAPI void GLAPIENTRY
OSMesaPixelStore( GLint pname, GLint value );
/*
* Return an integer value like glGetIntegerv.
* Input: pname -
* OSMESA_WIDTH return current image width
* OSMESA_HEIGHT return current image height
* OSMESA_FORMAT return image format
* OSMESA_TYPE return color component data type
* OSMESA_ROW_LENGTH return row length in pixels
* OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction
* value - pointer to integer in which to return result.
*/
GLAPI void GLAPIENTRY
OSMesaGetIntegerv( GLint pname, GLint *value );
/*
* Return the depth buffer associated with an OSMesa context.
* Input: c - the OSMesa context
* Output: width, height - size of buffer in pixels
* bytesPerValue - bytes per depth value (2 or 4)
* buffer - pointer to depth buffer values
* Return: GL_TRUE or GL_FALSE to indicate success or failure.
*
* New in Mesa 2.4.
*/
GLAPI GLboolean GLAPIENTRY
OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height,
GLint *bytesPerValue, void **buffer );
/*
* Return the color buffer associated with an OSMesa context.
* Input: c - the OSMesa context
* Output: width, height - size of buffer in pixels
* format - buffer format (OSMESA_FORMAT)
* buffer - pointer to depth buffer values
* Return: GL_TRUE or GL_FALSE to indicate success or failure.
*
* New in Mesa 3.3.
*/
GLAPI GLboolean GLAPIENTRY
OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height,
GLint *format, void **buffer );
/**
* This typedef is new in Mesa 6.3.
*/
typedef void (*OSMESAproc)();
/*
* Return pointer to the named function.
* New in Mesa 4.1
* Return OSMESAproc in 6.3.
*/
GLAPI OSMESAproc GLAPIENTRY
OSMesaGetProcAddress( const char *funcName );
/**
* Enable/disable color clamping, off by default.
* New in Mesa 6.4.2
*/
GLAPI void GLAPIENTRY
OSMesaColorClamp(GLboolean enable);
/**
* Enable/disable Gallium post-process filters.
* This should be called after a context is created, but before it is
* made current for the first time. After a context has been made
* current, this function has no effect.
* If the enable_value param is zero, the filter is disabled. Otherwise
* the filter is enabled, and the value may control the filter's quality.
* New in Mesa 10.0
*/
GLAPI void GLAPIENTRY
OSMesaPostprocess(OSMesaContext osmesa, const char *filter,
unsigned enable_value);
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load diff

View file

@ -8,12 +8,16 @@
</string-array>
<string-array name="renderer">
<item name="2">@string/mcl_setting_renderer_gles2</item>
<item name="3">@string/mcl_setting_renderer_gles3</item>
<item name="2">@string/mcl_setting_renderer_gles2_4</item>
<item name="3">@string/mcl_setting_renderer_gles2_5</item>
<item name="3">@string/mcl_setting_renderer_gles3_5</item>
<item name="4">@string/mcl_setting_renderer_vulkan_zink</item>
</string-array>
<string-array name="renderer_values">
<item>opengles2</item>
<item>opengles3</item>
<item>opengles2</item> <!-- gl4es 1.1.4 with OpenGL ES 2 -->
<item>opengles2_5</item> <!-- gl4es 1.1.5 with OpenGL ES 2 -->
<item>opengles3</item> <!-- gl4es 1.1.5 with OpenGL ES 3 -->
<item>vulkan_zink</item>
</string-array>
</resources>

View file

@ -99,8 +99,10 @@
<string name="mcl_setting_category_general">General settings</string>
<string name="mcl_setting_category_scaling">Scaling settings</string>
<string name="mcl_setting_category_renderer">Renderer</string>
<string name="mcl_setting_renderer_gles2">OpenGL ES 2</string>
<string name="mcl_setting_renderer_gles3">OpenGL ES 3</string>
<string name="mcl_setting_renderer_gles2_4">gl4es 1.1.4 (OpenGL ES 2): exports OpenGL 2.1</string>
<string name="mcl_setting_renderer_gles2_5">gl4es 1.1.5 (OpenGL ES 2): exports OpenGL 2.1</string>
<string name="mcl_setting_renderer_gles3_5">gl4es 1.1.5 (OpenGL ES 3): exports OpenGL 2.1 + partial 3.2 (no 1.17 supported yet)</string>
<string name="mcl_setting_renderer_vulkan_zink">zink (Vulkan): exports OpenGL 4.6</string>
<string name="mcl_setting_category_veroption">Version type will be in version list</string>
<string name="mcl_setting_veroption_release">Release</string>
<string name="mcl_setting_veroption_snapshot">Snapshot</string>
@ -121,30 +123,13 @@
<string name="global_error_field_empty">This field can\'t be empty</string>
<string name="global_waiting">Wait</string>
<!--
<string name="mcl_about">
%1$s BETA (Minecraft Java launcher for Android), version " + PathTools.usingVerName + "\n" +
" - by Khanh Duy Tran (based from \"Boardwalk\" app)\n" +
"Using libraries:\n" +
" • LWJGL " + org.lwjgl.Sys.getVersion() + "\n" +
//" • Boardwalk memory manager (not used now).\n" +
" • gl4es: OpenGL for OpenGL ES devices by lunixbochs and ptitSeb.\n" +
" • OpenJDK" +
"\n" +
"* Notes:\n" +
" - This app is currently BETA, it will not be stable.\n" +
//"* This app will unstable on Android 7.0 or higher devices.\n" +
" - This app only use LWJGL2 and don't have a JRE8 desugar, so doesn't support 1.13 or higher versions.\n" +
" - This app is not affiliated with Minecraft, Mojang or Microsoft.\n")
</string>
-->
<!-- MainActivity: strings -->
<string name="mcn_exit_title">Application/Game exited with code %d</string>
<string name="mcn_exit_call">Exit</string>
<string name="mcn_exit_confirm">Are you sure want to force close?</string>
<string name="mcn_check_fail_lwjgl">LWJGL3 was not installed!</string>
<string name="mcn_check_fail_incompatiblearch">Architecture %1$s is incompatible with Java Runtime %2$s.</string>
<string name="mcn_check_fail_vulkan_support">Vulkan Zink renderer is not supported on this device!</string>
<!-- MainActivity: Control buttons -->
<string name="control_toggle">GUI</string>

View file

@ -330,7 +330,8 @@ public final class GL {
public static GLCapabilities createCapabilities() {
return createCapabilities(false);
}
private static native long getGraphicsBufferAddr();
private static native int[] getNativeWidthHeight();
/**
* Creates a new {@link GLCapabilities} instance for the OpenGL context that is current in the current thread.
*
@ -345,12 +346,6 @@ public final class GL {
*/
@SuppressWarnings("AssignmentToMethodParameter")
public static GLCapabilities createCapabilities(boolean forwardCompatible) {
// This fixed framebuffer issue on 1.13+ 64-bit by another making current
GLFW.nativeEglMakeCurrent(GLFW.mainContext);
if (isUsingRegal /* && Long.parseLong(System.getProperty("glfwstub.internal.glthreadid", "-1")) != Thread.currentThread().getId() */) {
nativeRegalMakeCurrent();
}
// System.setProperty("glfwstub.internal.glthreadid", Long.toString(Thread.currentThread().getId()));
FunctionProvider functionProvider = GL.functionProvider;
@ -361,6 +356,17 @@ public final class GL {
GLCapabilities caps = null;
try {
if (System.getenv("POJAV_RENDERER").startsWith("opengles")) {
// This fixed framebuffer issue on 1.13+ 64-bit by another making current
GLFW.nativeEglMakeCurrent(GLFW.mainContext);
if (isUsingRegal /* && Long.parseLong(System.getProperty("glfwstub.internal.glthreadid", "-1")) != Thread.currentThread().getId() */) {
nativeRegalMakeCurrent();
}
} else if (System.getenv("POJAV_RENDERER").equals("vulkan_zink")) {
int[] dims = getNativeWidthHeight();
callJPI(GLFW.glfwGetCurrentContext(),getGraphicsBufferAddr(),GL_UNSIGNED_BYTE,dims[0],dims[1],functionProvider.getFunctionAddress("OSMesaMakeCurrent"));
}
// We don't have a current ContextCapabilities when this method is called
// so we have to use the native bindings directly.
long GetError = functionProvider.getFunctionAddress("glGetError");