mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-14 15:28:13 +00:00
Fixed bug 3250 - Wrong backbuffer pixel format on Android, keep getting RGB_565
Use the egl format to reconfigure java SurfaceView holder format. If there is a change, it triggers a surfaceDestroyed/Created/Change sequence.
This commit is contained in:
@@ -222,6 +222,7 @@ static jclass mActivityClass;
|
||||
|
||||
/* method signatures */
|
||||
static jmethodID midGetNativeSurface;
|
||||
static jmethodID midSetSurfaceViewFormat;
|
||||
static jmethodID midSetActivityTitle;
|
||||
static jmethodID midSetWindowStyle;
|
||||
static jmethodID midSetOrientation;
|
||||
@@ -327,6 +328,8 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
||||
|
||||
midGetNativeSurface = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
"getNativeSurface","()Landroid/view/Surface;");
|
||||
midSetSurfaceViewFormat = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
"setSurfaceViewFormat","(I)V");
|
||||
midSetActivityTitle = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
"setActivityTitle","(Ljava/lang/String;)Z");
|
||||
midSetWindowStyle = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
@@ -374,7 +377,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
||||
midSetRelativeMouseEnabled = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "setRelativeMouseEnabled", "(Z)Z");
|
||||
|
||||
|
||||
if (!midGetNativeSurface ||
|
||||
if (!midGetNativeSurface || !midSetSurfaceViewFormat ||
|
||||
!midSetActivityTitle || !midSetWindowStyle || !midSetOrientation || !midGetContext || !midIsTablet || !midIsAndroidTV || !midInputGetInputDeviceIds ||
|
||||
!midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown ||
|
||||
!midClipboardSetText || !midClipboardGetText || !midClipboardHasText ||
|
||||
@@ -964,6 +967,26 @@ ANativeWindow* Android_JNI_GetNativeWindow(void)
|
||||
return anw;
|
||||
}
|
||||
|
||||
void Android_JNI_SetSurfaceViewFormat(int format)
|
||||
{
|
||||
JNIEnv *mEnv = Android_JNI_GetEnv();
|
||||
int new_format = 0;
|
||||
|
||||
/* Format from android/native_window.h,
|
||||
* convert to temporary arbitrary values,
|
||||
* then to java PixelFormat */
|
||||
if (format == WINDOW_FORMAT_RGBA_8888) {
|
||||
new_format = 1;
|
||||
} else if (format == WINDOW_FORMAT_RGBX_8888) {
|
||||
new_format = 2;
|
||||
} else if (format == WINDOW_FORMAT_RGB_565) {
|
||||
/* Default */
|
||||
new_format = 0;
|
||||
}
|
||||
|
||||
(*mEnv)->CallStaticVoidMethod(mEnv, mActivityClass, midSetSurfaceViewFormat, new_format);
|
||||
}
|
||||
|
||||
void Android_JNI_SetActivityTitle(const char *title)
|
||||
{
|
||||
JNIEnv *mEnv = Android_JNI_GetEnv();
|
||||
|
Reference in New Issue
Block a user