mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Revert "Apply transform to textures on android (#4486)" (flutter/engine#4502)
This reverts commit b4c5318c5f414aa28a3b6a6d21766106b7fb387d. Original commit caused external_ui integration test failure on Android.
This commit is contained in:
parent
84d6c3f9b6
commit
efc621079d
@ -4,6 +4,7 @@
|
||||
|
||||
#include "flutter/shell/platform/android/android_external_texture_gl.h"
|
||||
|
||||
// #include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
#include "flutter/common/threads.h"
|
||||
#include "flutter/shell/platform/android/platform_view_android_jni.h"
|
||||
@ -14,7 +15,7 @@ namespace shell {
|
||||
AndroidExternalTextureGL::AndroidExternalTextureGL(
|
||||
int64_t id,
|
||||
const fml::jni::JavaObjectWeakGlobalRef& surfaceTexture)
|
||||
: Texture(id), surface_texture_(surfaceTexture), transform(SkMatrix::I()) {}
|
||||
: Texture(id), surface_texture_(surfaceTexture) {}
|
||||
|
||||
AndroidExternalTextureGL::~AndroidExternalTextureGL() = default;
|
||||
|
||||
@ -43,42 +44,16 @@ void AndroidExternalTextureGL::Paint(SkCanvas& canvas, const SkRect& bounds) {
|
||||
new_frame_ready_ = false;
|
||||
}
|
||||
GrGLTextureInfo textureInfo = {GL_TEXTURE_EXTERNAL_OES, texture_name_};
|
||||
GrBackendTexture backendTexture(1, 1, kRGBA_8888_GrPixelConfig, textureInfo);
|
||||
GrBackendTexture backendTexture(bounds.width(), bounds.height(),
|
||||
kRGBA_8888_GrPixelConfig, textureInfo);
|
||||
sk_sp<SkImage> image = SkImage::MakeFromTexture(
|
||||
canvas.getGrContext(), backendTexture, kTopLeft_GrSurfaceOrigin,
|
||||
SkAlphaType::kPremul_SkAlphaType, nullptr);
|
||||
if (image) {
|
||||
SkAutoCanvasRestore autoRestore(&canvas, true);
|
||||
canvas.translate(bounds.x(), bounds.y());
|
||||
canvas.scale(bounds.width(), bounds.height());
|
||||
if (!transform.isIdentity()) {
|
||||
SkMatrix transformAroundCenter(transform);
|
||||
|
||||
transformAroundCenter.preTranslate(-0.5, -0.5);
|
||||
transformAroundCenter.postScale(1, -1);
|
||||
transformAroundCenter.postTranslate(0.5, 0.5);
|
||||
canvas.concat(transformAroundCenter);
|
||||
}
|
||||
canvas.drawImage(image, 0, 0);
|
||||
canvas.drawImage(image, bounds.x(), bounds.y());
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidExternalTextureGL::UpdateTransform() {
|
||||
JNIEnv* env = fml::jni::AttachCurrentThread();
|
||||
fml::jni::ScopedJavaLocalRef<jobject> surfaceTexture =
|
||||
surface_texture_.get(env);
|
||||
jfloatArray transformMatrix = env->NewFloatArray(16);
|
||||
SurfaceTextureGetTransformMatrix(env, surfaceTexture.obj(), transformMatrix);
|
||||
float* m = env->GetFloatArrayElements(transformMatrix, nullptr);
|
||||
SkScalar matrix3[] = {
|
||||
m[0], m[1], m[2], //
|
||||
m[4], m[5], m[6], //
|
||||
m[8], m[9], m[10], //
|
||||
};
|
||||
env->ReleaseFloatArrayElements(transformMatrix, m, JNI_ABORT);
|
||||
transform.set9(matrix3);
|
||||
}
|
||||
|
||||
void AndroidExternalTextureGL::OnGrContextDestroyed() {
|
||||
ASSERT_IS_GPU_THREAD;
|
||||
if (state_ == AttachmentState::attached) {
|
||||
@ -102,7 +77,6 @@ void AndroidExternalTextureGL::Update() {
|
||||
surface_texture_.get(env);
|
||||
if (!surfaceTexture.is_null()) {
|
||||
SurfaceTextureUpdateTexImage(env, surfaceTexture.obj());
|
||||
UpdateTransform();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -35,8 +35,6 @@ class AndroidExternalTextureGL : public flow::Texture {
|
||||
|
||||
void Detach();
|
||||
|
||||
void UpdateTransform();
|
||||
|
||||
enum class AttachmentState { uninitialized, attached, detached };
|
||||
|
||||
fml::jni::JavaObjectWeakGlobalRef surface_texture_;
|
||||
@ -47,8 +45,6 @@ class AndroidExternalTextureGL : public flow::Texture {
|
||||
|
||||
GLuint texture_name_ = 0;
|
||||
|
||||
SkMatrix transform;
|
||||
|
||||
FXL_DISALLOW_COPY_AND_ASSIGN(AndroidExternalTextureGL);
|
||||
};
|
||||
|
||||
|
||||
@ -90,15 +90,6 @@ void SurfaceTextureUpdateTexImage(JNIEnv* env, jobject obj) {
|
||||
FXL_CHECK(CheckException(env));
|
||||
}
|
||||
|
||||
static jmethodID g_get_transform_matrix_method = nullptr;
|
||||
void SurfaceTextureGetTransformMatrix(JNIEnv* env,
|
||||
jobject obj,
|
||||
jfloatArray result) {
|
||||
ASSERT_IS_GPU_THREAD;
|
||||
env->CallVoidMethod(obj, g_get_transform_matrix_method, result);
|
||||
FXL_CHECK(CheckException(env));
|
||||
}
|
||||
|
||||
static jmethodID g_detach_from_gl_context_method = nullptr;
|
||||
void SurfaceTextureDetachFromGLContext(JNIEnv* env, jobject obj) {
|
||||
ASSERT_IS_GPU_THREAD;
|
||||
@ -511,13 +502,6 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_get_transform_matrix_method = env->GetMethodID(
|
||||
g_surface_texture_class->obj(), "getTransformMatrix", "([F)V");
|
||||
|
||||
if (g_get_transform_matrix_method == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_detach_from_gl_context_method = env->GetMethodID(
|
||||
g_surface_texture_class->obj(), "detachFromGLContext", "()V");
|
||||
|
||||
|
||||
@ -33,10 +33,6 @@ void SurfaceTextureAttachToGLContext(JNIEnv* env, jobject obj, jint textureId);
|
||||
|
||||
void SurfaceTextureUpdateTexImage(JNIEnv* env, jobject obj);
|
||||
|
||||
void SurfaceTextureGetTransformMatrix(JNIEnv* env,
|
||||
jobject obj,
|
||||
jfloatArray result);
|
||||
|
||||
void SurfaceTextureDetachFromGLContext(JNIEnv* env, jobject obj);
|
||||
|
||||
} // namespace shell
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user