浏览代码

fix

/siyaoH-1.17-android
siyao 3 年前
当前提交
a9d23021
共有 4 个文件被更改,包括 29 次插入29 次删除
  1. 4
      engine/Build.bee.cs
  2. 1
      engine/src/shell/gpu/gpu_surface_gl.cc
  3. 42
      engine/src/shell/platform/unity/android/uiwidgets_panel.cc
  4. 11
      engine/src/shell/platform/unity/android/unity_surface_manager.cc

4
engine/Build.bee.cs


class AndroidAppToolchain : AndroidNdkToolchain
{
public AndroidAppToolchain(NPath path) : base(new AndroidNdkLocator(Architecture.Armv7).UseSpecific(path).WithForcedApiLevel(28))
public AndroidAppToolchain(NPath path) : base(new AndroidNdkLocator(Architecture.Armv7).UseSpecific(path).WithForcedApiLevel(26))
{
}

"-nostdlib++",
"-Wl,--warn-shared-textrel",
"-nostdlib",
"--sysroot="+ flutterRoot+"/third_party/android_tools/ndk/platforms/android-28/arch-arm",
"--sysroot="+ flutterRoot+"/third_party/android_tools/ndk/platforms/android-26/arch-arm",
"-L"+ flutterRoot + "/third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a",
"-Wl,--build-id=sha1",
"-g",

1
engine/src/shell/gpu/gpu_surface_gl.cc


if (delegate_->GLContextFBOResetAfterPresent()) {
auto current_size =
SkISize::Make(onscreen_surface_->width(), onscreen_surface_->height());
context_->resetContext();
// The FBO has changed, ask the delegate for the new FBO and do a surface
// re-wrap.

42
engine/src/shell/platform/unity/android/uiwidgets_panel.cc


return window_type_ == EditorWindowPanel;
}
GLuint UIWidgetsPanel::OnEnable( size_t width,
size_t height, float device_pixel_ratio,
const char *streaming_assets_path,
const char *settings)
GLuint UIWidgetsPanel::OnEnable(size_t width,
size_t height, float device_pixel_ratio,
const char *streaming_assets_path,
const char *settings)
{
surface_manager_ = std::make_unique<UnitySurfaceManager>(
UIWidgetsSystem::GetInstancePtr()->GetUnityInterfaces());

}
GLuint UIWidgetsPanel::OnRenderTexture(size_t width,
size_t height, float device_pixel_ratio)
size_t height, float device_pixel_ratio)
reinterpret_cast<EmbedderEngine *>(engine_)->PostRenderThreadTask(
[this, width, height]() -> void {
surface_manager_->MakeCurrent(EGL_NO_DISPLAY);
if (fbo_)
{
surface_manager_->DestroyRenderSurface();
fbo_ = 0;
}
fbo_ = surface_manager_->CreateRenderSurface(width, height);
surface_manager_->ClearCurrent();
});
ViewportMetrics metrics;
metrics.physical_width = static_cast<float>(width);

surface_manager_->MakeCurrent(EGL_NO_DISPLAY);
if (fbo_)
{
surface_manager_->DestroyRenderSurface();
fbo_ = 0;
}
fbo_ = surface_manager_->CreateRenderSurface(width, height);
surface_manager_->ClearCurrent();
return surface_manager_->GetTexture();
}

}
}
bool UIWidgetsPanel::ReleaseNativeRenderTexture() {
bool UIWidgetsPanel::ReleaseNativeRenderTexture()
{
// for android this process is done during OnRenderTexture
//surface_manager_->DestroyRenderSurface();
return true;

const char *settings)
{
return panel->OnEnable(width, height, device_pixel_ratio,
streaming_assets_path, settings);
streaming_assets_path, settings);
}
UIWIDGETS_API(void)

return panel->OnRenderTexture(width, height, dpi);
}
UIWIDGETS_API(bool) UIWidgetsPanel_releaseNativeTexture(UIWidgetsPanel* panel) {
UIWIDGETS_API(bool)
UIWidgetsPanel_releaseNativeTexture(UIWidgetsPanel *panel)
{
return panel->ReleaseNativeRenderTexture();
}

11
engine/src/shell/platform/unity/android/unity_surface_manager.cc


image = eglCreateImageKHR(egl_display_, EGL_NO_CONTEXT,
EGL_NATIVE_BUFFER_ANDROID, native_buffer, attrs);
egl_texture_ = 0;
glGenTextures(1, &egl_texture_);
glBindTexture(GL_TEXTURE_2D, egl_texture_);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

GLint old_framebuffer_binding;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_framebuffer_binding);
glGenFramebuffers(1, &fbo_);
glBindFramebuffer(GL_FRAMEBUFFER, fbo_);

// GLuint gltex = (GLuint)(size_t)(native_texture_ptr);
// glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gltex, 0);
FML_CHECK(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
glBindFramebuffer(GL_FRAMEBUFFER, old_framebuffer_binding);
return fbo_;
}

eglDestroyImageKHR(egl_display_, image);
glDeleteTextures(1, &egl_texture_);
egl_texture_ = 0;
}
bool UnitySurfaceManager::ClearCurrent()

正在加载...
取消
保存