/* * Copyright (C) 2021 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 #include #include #include #include #include struct MyWrapper { MyWrapper(ANativeWindow* parent) { surfaceControl = ASurfaceControl_createFromWindow(parent, "PenLayer"); } ~MyWrapper() { ASurfaceControl_release(surfaceControl); } void setBuffer(AHardwareBuffer* buffer) { ASurfaceTransaction* transaction = ASurfaceTransaction_create(); ASurfaceTransaction_setBuffer(transaction, surfaceControl, buffer); ASurfaceTransaction_setVisibility(transaction, surfaceControl, ASURFACE_TRANSACTION_VISIBILITY_SHOW); ASurfaceTransaction_apply(transaction); ASurfaceTransaction_delete(transaction); } ASurfaceControl* surfaceControl = nullptr; }; extern "C" JNIEXPORT jlong JNICALL Java_com_android_test_hwui_FrontBufferedLayer_nCreate(JNIEnv* env, jclass, jobject jSurface) { ANativeWindow* window = ANativeWindow_fromSurface(env, jSurface); MyWrapper* wrapper = new MyWrapper(window); ANativeWindow_release(window); return reinterpret_cast(wrapper); } extern "C" JNIEXPORT void JNICALL Java_com_android_test_hwui_FrontBufferedLayer_nDestroy(JNIEnv*, jclass, jlong ptr) { MyWrapper* wrapper = reinterpret_cast(ptr); delete wrapper; } extern "C" JNIEXPORT void JNICALL Java_com_android_test_hwui_FrontBufferedLayer_nUpdateBuffer( JNIEnv* env, jclass, jlong ptr, jobject jbuffer) { MyWrapper* wrapper = reinterpret_cast(ptr); AHardwareBuffer* buffer = AHardwareBuffer_fromHardwareBuffer(env, jbuffer); wrapper->setBuffer(buffer); }