Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed20ebbd authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "EGL migration to native"

parents 6c6a1164 23b797ab
Loading
Loading
Loading
Loading
+52 −515

File changed.

Preview size limit exceeded, changes collapsed.

+1 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES:= \
	android_view_GLRenderer.cpp \
	android_view_GLES20Canvas.cpp \
	android_view_ThreadedRenderer.cpp \
	android_view_RemoteGLRenderer.cpp \
	android_view_MotionEvent.cpp \
	android_view_PointerIcon.cpp \
	android_view_VelocityTracker.cpp \
+2 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ extern int register_android_view_GraphicBuffer(JNIEnv* env);
extern int register_android_view_GLES20Canvas(JNIEnv* env);
extern int register_android_view_GLRenderer(JNIEnv* env);
extern int register_android_view_ThreadedRenderer(JNIEnv* env);
extern int register_android_view_RemoteGLRenderer(JNIEnv* env);
extern int register_android_view_Surface(JNIEnv* env);
extern int register_android_view_SurfaceControl(JNIEnv* env);
extern int register_android_view_SurfaceSession(JNIEnv* env);
@@ -1129,6 +1130,7 @@ static const RegJNIRec gRegJNI[] = {
    REG_JNI(register_android_view_GLES20Canvas),
    REG_JNI(register_android_view_GLRenderer),
    REG_JNI(register_android_view_ThreadedRenderer),
    REG_JNI(register_android_view_RemoteGLRenderer),
    REG_JNI(register_android_view_Surface),
    REG_JNI(register_android_view_SurfaceControl),
    REG_JNI(register_android_view_SurfaceSession),
+99 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 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.
 */

#define LOG_TAG "RemoteGLRenderer"

#include "jni.h"
#include <nativehelper/JNIHelp.h>

#include <utils/StrongPointer.h>
#include <android_runtime/android_view_Surface.h>
#include <android_runtime/AndroidRuntime.h>
#include <renderthread/CanvasContext.h>
#include <system/window.h>

namespace android {

#ifdef USE_OPENGL_RENDERER

#define CHECK_CONTEXT(c) if (!c) ALOGE("Null context passed to %s!", __func__ )

namespace RT = android::uirenderer::renderthread;

static jlong android_view_RemoteGLRenderer_createContext(JNIEnv* env, jobject clazz) {
    RT::CanvasContext* context = new RT::CanvasContext();
    return reinterpret_cast<jlong>(context);
}

static jboolean android_view_RemoteGLRenderer_usePBufferSurface(JNIEnv* env, jobject clazz) {
    return RT::CanvasContext::useGlobalPBufferSurface();
}

static jboolean android_view_RemoteGLRenderer_setSurface(JNIEnv* env, jobject clazz,
        jlong jcontextptr, jobject jsurface) {
    RT::CanvasContext* context = reinterpret_cast<RT::CanvasContext*>(jcontextptr);
    CHECK_CONTEXT(context);
    sp<ANativeWindow> window;
    if (jsurface) {
        window = android_view_Surface_getNativeWindow(env, jsurface);
    }
    return context->setSurface(window.get());
}

static jboolean android_view_RemoteGLRenderer_swapBuffers(JNIEnv* env, jobject clazz,
        jlong jcontextptr) {
    RT::CanvasContext* context = reinterpret_cast<RT::CanvasContext*>(jcontextptr);
    CHECK_CONTEXT(context);
    return context->swapBuffers();
}

static jboolean android_view_RemoteGLRenderer_makeCurrent(JNIEnv* env, jobject clazz,
        jlong jcontextptr) {
    RT::CanvasContext* context = reinterpret_cast<RT::CanvasContext*>(jcontextptr);
    CHECK_CONTEXT(context);
    return context->makeCurrent();
}

static void android_view_RemoteGLRenderer_destroyContext(JNIEnv* env, jobject clazz,
        jlong jcontextptr) {
    RT::CanvasContext* context = reinterpret_cast<RT::CanvasContext*>(jcontextptr);
    CHECK_CONTEXT(context);
    delete context;
}
#endif

// ----------------------------------------------------------------------------
// JNI Glue
// ----------------------------------------------------------------------------

const char* const kClassPathName = "android/view/RemoteGLRenderer";

static JNINativeMethod gMethods[] = {
#ifdef USE_OPENGL_RENDERER
    { "createContext", "()J",   (void*) android_view_RemoteGLRenderer_createContext },
    { "usePBufferSurface", "()Z",   (void*) android_view_RemoteGLRenderer_usePBufferSurface },
    { "setSurface", "(JLandroid/view/Surface;)Z",   (void*) android_view_RemoteGLRenderer_setSurface },
    { "swapBuffers", "(J)Z",   (void*) android_view_RemoteGLRenderer_swapBuffers },
    { "makeCurrent", "(J)Z",   (void*) android_view_RemoteGLRenderer_makeCurrent },
    { "destroyContext", "(J)V",   (void*) android_view_RemoteGLRenderer_destroyContext },
#endif
};

int register_android_view_RemoteGLRenderer(JNIEnv* env) {
    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
}

}; // namespace android
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

#define LOG_TAG "GLRenderer"
#define LOG_TAG "ThreadedRenderer"

#include "jni.h"
#include <nativehelper/JNIHelp.h>
Loading