diff --git a/ndk/platforms/android-9/samples/native-activity/Android.mk b/ndk/platforms/android-9/samples/native-activity/Android.mk index fa4543253..ea961cae4 100644 --- a/ndk/platforms/android-9/samples/native-activity/Android.mk +++ b/ndk/platforms/android-9/samples/native-activity/Android.mk @@ -36,7 +36,7 @@ LOCAL_C_INCLUDES += \ $(TOPDIR)development/ndk/sources/android/native_app_glue LOCAL_SRC_FILES := \ - jni/main.c jni/glutils.c \ + jni/main.c \ ../../../../sources/android/native_app_glue/android_native_app_glue.c LOCAL_NDK_VERSION := 4 diff --git a/ndk/platforms/android-9/samples/native-activity/jni/Android.mk b/ndk/platforms/android-9/samples/native-activity/jni/Android.mk index 60a7fdcb8..9e64d8042 100644 --- a/ndk/platforms/android-9/samples/native-activity/jni/Android.mk +++ b/ndk/platforms/android-9/samples/native-activity/jni/Android.mk @@ -17,7 +17,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := native-activity -LOCAL_SRC_FILES := main.c glutils.c +LOCAL_SRC_FILES := main.c LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM LOCAL_STATIC_LIBRARIES := android_native_app_glue diff --git a/ndk/platforms/android-9/samples/native-activity/jni/glutils.c b/ndk/platforms/android-9/samples/native-activity/jni/glutils.c deleted file mode 100644 index fcd2d880a..000000000 --- a/ndk/platforms/android-9/samples/native-activity/jni/glutils.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "glutils.h" - -#include - -const char *EGLstrerror(EGLint err) { - switch (err) { - case EGL_SUCCESS: return "EGL_SUCCESS"; - case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; - case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; - case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; - case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; - case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; - case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; - case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; - case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; - case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; - case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; - case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; - case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; - case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; - case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; - default: return "UNKNOWN"; - } -} - -int32_t selectConfigForPixelFormat(EGLDisplay dpy, EGLint const* attrs, - int32_t format, EGLConfig* outConfig) { - EGLint numConfigs = -1, n=0; - - if (!attrs) - return -1; - - if (outConfig == NULL) - return -1; - - int fbSzA, fbSzR, fbSzG, fbSzB; - switch (format) { - case WINDOW_FORMAT_RGBA_8888: - fbSzA = fbSzR = fbSzG = fbSzB = 8; - break; - case WINDOW_FORMAT_RGBX_8888: - fbSzA = 0; fbSzR = fbSzG = fbSzB = 8; - break; - case WINDOW_FORMAT_RGB_565: - fbSzA = 0; fbSzR = 5; fbSzG = 6; fbSzB = 5; - break; - default: - LOGW("Unknown format"); - return -1; - } - - // Get all the "potential match" configs... - if (eglGetConfigs(dpy, NULL, 0, &numConfigs) == EGL_FALSE) { - LOGW("eglGetConfigs failed"); - return -1; - } - - EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); - if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { - free(configs); - LOGW("eglChooseConfig failed"); - return -1; - } - - int i; - EGLConfig config = NULL; - for (i=0 ; i -#include - -#include -#include -#include - -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__)) -#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__)) - -extern const char *EGLstrerror(EGLint err); -extern int32_t selectConfigForPixelFormat(EGLDisplay dpy, EGLint const* attrs, - int32_t format, EGLConfig* outConfig); -extern int32_t selectConfigForNativeWindow(EGLDisplay dpy, EGLint const* attrs, - EGLNativeWindowType window, EGLConfig* outConfig); diff --git a/ndk/platforms/android-9/samples/native-activity/jni/main.c b/ndk/platforms/android-9/samples/native-activity/jni/main.c index 919e4122c..2e1963568 100644 --- a/ndk/platforms/android-9/samples/native-activity/jni/main.c +++ b/ndk/platforms/android-9/samples/native-activity/jni/main.c @@ -19,11 +19,15 @@ #include #include -#include +#include +#include +#include +#include #include -#include "glutils.h" +#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__)) +#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__)) /** * Our saved state data. @@ -57,12 +61,21 @@ struct engine { * Initialize an EGL context for the current display. */ static int engine_init_display(struct engine* engine) { - // initialize opengl and egl + // initialize OpenGL ES and EGL + + /* + * Here specify the attributes of the desired configuration. + * Below, we select an EGLConfig with at least 8 bits per color + * component compatible with on-screen windows + */ const EGLint attribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_BLUE_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_RED_SIZE, 8, EGL_NONE }; - EGLint w, h, dummy; + EGLint w, h, dummy, format; EGLint numConfigs; EGLConfig config; EGLSurface surface; @@ -71,7 +84,19 @@ static int engine_init_display(struct engine* engine) { EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(display, 0, 0); - selectConfigForNativeWindow(display, attribs, engine->app->window, &config); + + /* Here, the application chooses the configuration it desires. In this + * sample, we have a very simplified selection process, where we pick + * the first EGLConfig that matches our criteria */ + eglChooseConfig(display, attribs, &config, 1, &numConfigs); + + /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is + * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). + * As soon as we picked a EGLConfig, we can safely reconfigure the + * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ + eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); + + ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format); surface = eglCreateWindowSurface(display, config, engine->app->window, NULL); context = eglCreateContext(display, config, NULL, NULL);