Skip to content

Commit

Permalink
Migrate to the new GpuSurfaceTexture API (#338)
Browse files Browse the repository at this point in the history
  • Loading branch information
swift-kim authored Sep 5, 2022
1 parent 0a90dda commit aa0b834
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 47 deletions.
28 changes: 14 additions & 14 deletions shell/platform/tizen/external_texture_surface_egl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace flutter {

ExternalTextureSurfaceEGL::ExternalTextureSurfaceEGL(
ExternalTextureExtensionType gl_extension,
FlutterDesktopGpuBufferTextureCallback texture_callback,
FlutterDesktopGpuSurfaceTextureCallback texture_callback,
void* user_data)
: ExternalTexture(gl_extension),
texture_callback_(texture_callback),
Expand All @@ -48,28 +48,28 @@ bool ExternalTextureSurfaceEGL::PopulateTexture(
if (!texture_callback_) {
return false;
}
const FlutterDesktopGpuBuffer* gpu_buffer =
const FlutterDesktopGpuSurfaceDescriptor* gpu_surface =
texture_callback_(width, height, user_data_);
if (!gpu_buffer) {
FT_LOG(Info) << "gpu_buffer is null for texture ID: " << texture_id_;
if (!gpu_surface) {
FT_LOG(Info) << "gpu_surface is null for texture ID: " << texture_id_;
return false;
}

if (!gpu_buffer->buffer) {
if (!gpu_surface->handle) {
FT_LOG(Info) << "tbm_surface is null for texture ID: " << texture_id_;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
const tbm_surface_h tbm_surface =
reinterpret_cast<tbm_surface_h>(const_cast<void*>(gpu_buffer->buffer));
reinterpret_cast<tbm_surface_h>(gpu_surface->handle);

tbm_surface_info_s info;
if (tbm_surface_get_info(tbm_surface, &info) != TBM_SURFACE_ERROR_NONE) {
FT_LOG(Info) << "tbm_surface is invalid for texture ID: " << texture_id_;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
Expand Down Expand Up @@ -131,8 +131,8 @@ bool ExternalTextureSurfaceEGL::PopulateTexture(
FT_LOG(Error) << "Either EGL_TIZEN_image_native_surface or "
"EGL_EXT_image_dma_buf_import shoule be supported.";
}
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
Expand Down Expand Up @@ -169,8 +169,8 @@ bool ExternalTextureSurfaceEGL::PopulateTexture(
opengl_texture->user_data = nullptr;
opengl_texture->width = width;
opengl_texture->height = height;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions shell/platform/tizen/external_texture_surface_egl.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class ExternalTextureSurfaceEGL : public ExternalTexture {
public:
ExternalTextureSurfaceEGL(
ExternalTextureExtensionType gl_extension,
FlutterDesktopGpuBufferTextureCallback texture_callback,
FlutterDesktopGpuSurfaceTextureCallback texture_callback,
void* user_data);

virtual ~ExternalTextureSurfaceEGL();
Expand All @@ -32,7 +32,7 @@ class ExternalTextureSurfaceEGL : public ExternalTexture {
FlutterOpenGLTexture* opengl_texture) override;

private:
FlutterDesktopGpuBufferTextureCallback texture_callback_ = nullptr;
FlutterDesktopGpuSurfaceTextureCallback texture_callback_ = nullptr;
void* user_data_ = nullptr;
};

Expand Down
32 changes: 16 additions & 16 deletions shell/platform/tizen/external_texture_surface_evas_gl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace flutter {

ExternalTextureSurfaceEvasGL::ExternalTextureSurfaceEvasGL(
ExternalTextureExtensionType gl_extension,
FlutterDesktopGpuBufferTextureCallback texture_callback,
FlutterDesktopGpuSurfaceTextureCallback texture_callback,
void* user_data)
: ExternalTexture(gl_extension),
texture_callback_(texture_callback),
Expand All @@ -36,28 +36,28 @@ bool ExternalTextureSurfaceEvasGL::PopulateTexture(
if (!texture_callback_) {
return false;
}
const FlutterDesktopGpuBuffer* gpu_buffer =
const FlutterDesktopGpuSurfaceDescriptor* gpu_surface =
texture_callback_(width, height, user_data_);
if (!gpu_buffer) {
FT_LOG(Info) << "gpu_buffer is null for texture ID: " << texture_id_;
if (!gpu_surface) {
FT_LOG(Info) << "gpu_surface is null for texture ID: " << texture_id_;
return false;
}

if (!gpu_buffer->buffer) {
if (!gpu_surface->handle) {
FT_LOG(Info) << "tbm_surface is null for texture ID: " << texture_id_;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
const tbm_surface_h tbm_surface =
reinterpret_cast<tbm_surface_h>(const_cast<void*>(gpu_buffer->buffer));
reinterpret_cast<tbm_surface_h>(gpu_surface->handle);

tbm_surface_info_s info;
if (tbm_surface_get_info(tbm_surface, &info) != TBM_SURFACE_ERROR_NONE) {
FT_LOG(Info) << "tbm_surface is invalid for texture ID: " << texture_id_;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
Expand All @@ -71,14 +71,14 @@ bool ExternalTextureSurfaceEvasGL::PopulateTexture(
} else if (state_->gl_extension == ExternalTextureExtensionType::kDmaBuffer) {
FT_LOG(Error)
<< "EGL_EXT_image_dma_buf_import is not supported this renderer.";
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
if (!evasgl_src_image) {
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return false;
}
Expand Down Expand Up @@ -110,8 +110,8 @@ bool ExternalTextureSurfaceEvasGL::PopulateTexture(
opengl_texture->user_data = nullptr;
opengl_texture->width = width;
opengl_texture->height = height;
if (gpu_buffer->release_callback) {
gpu_buffer->release_callback(gpu_buffer->release_context);
if (gpu_surface->release_callback) {
gpu_surface->release_callback(gpu_surface->release_context);
}
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions shell/platform/tizen/external_texture_surface_evas_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class ExternalTextureSurfaceEvasGL : public ExternalTexture {
public:
ExternalTextureSurfaceEvasGL(
ExternalTextureExtensionType gl_extension,
FlutterDesktopGpuBufferTextureCallback texture_callback,
FlutterDesktopGpuSurfaceTextureCallback texture_callback,
void* user_data);

virtual ~ExternalTextureSurfaceEvasGL();
Expand All @@ -32,7 +32,7 @@ class ExternalTextureSurfaceEvasGL : public ExternalTexture {
FlutterOpenGLTexture* opengl_texture) override;

private:
FlutterDesktopGpuBufferTextureCallback texture_callback_ = nullptr;
FlutterDesktopGpuSurfaceTextureCallback texture_callback_ = nullptr;
void* user_data_ = nullptr;
};

Expand Down
20 changes: 10 additions & 10 deletions shell/platform/tizen/flutter_tizen_texture_registrar.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ FlutterTizenTextureRegistrar::FlutterTizenTextureRegistrar(
int64_t FlutterTizenTextureRegistrar::RegisterTexture(
const FlutterDesktopTextureInfo* texture_info) {
if (texture_info->type != kFlutterDesktopPixelBufferTexture &&
texture_info->type != kFlutterDesktopGpuBufferTexture) {
FT_LOG(Error) << "Attempted to register texture of unsupport type.";
texture_info->type != kFlutterDesktopGpuSurfaceTexture) {
FT_LOG(Error) << "Attempted to register texture of unsupported type.";
return -1;
}

Expand All @@ -37,9 +37,9 @@ int64_t FlutterTizenTextureRegistrar::RegisterTexture(
}
}

if (texture_info->type == kFlutterDesktopGpuBufferTexture) {
if (!texture_info->gpu_buffer_config.callback) {
FT_LOG(Error) << "Invalid GPU buffer texture callback.";
if (texture_info->type == kFlutterDesktopGpuSurfaceTexture) {
if (!texture_info->gpu_surface_config.callback) {
FT_LOG(Error) << "Invalid GPU surface texture callback.";
return -1;
}
}
Expand Down Expand Up @@ -116,7 +116,7 @@ FlutterTizenTextureRegistrar::CreateExternalTexture(
#else
return nullptr;
#endif
case kFlutterDesktopGpuBufferTexture:
case kFlutterDesktopGpuSurfaceTexture:
ExternalTextureExtensionType gl_extension =
ExternalTextureExtensionType::kNone;
if (engine_->renderer() && engine_->renderer()->IsSupportedExtension(
Expand All @@ -129,13 +129,13 @@ FlutterTizenTextureRegistrar::CreateExternalTexture(
}
if (renderer_type == FlutterDesktopRendererType::kEvasGL) {
return std::make_unique<ExternalTextureSurfaceEvasGL>(
gl_extension, texture_info->gpu_buffer_config.callback,
texture_info->gpu_buffer_config.user_data);
gl_extension, texture_info->gpu_surface_config.callback,
texture_info->gpu_surface_config.user_data);
}
#ifndef WEARABLE_PROFILE
return std::make_unique<ExternalTextureSurfaceEGL>(
gl_extension, texture_info->gpu_buffer_config.callback,
texture_info->gpu_buffer_config.user_data);
gl_extension, texture_info->gpu_surface_config.callback,
texture_info->gpu_surface_config.user_data);
#else
return nullptr;
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,12 @@ TEST_F(FlutterTizenTextureRegistrarTest, RegisterUnregisterTexture) {
FlutterTizenTextureRegistrar registrar(engine_);

FlutterDesktopTextureInfo texture_info = {};
texture_info.type = kFlutterDesktopGpuBufferTexture;
texture_info.gpu_buffer_config.callback =
texture_info.type = kFlutterDesktopGpuSurfaceTexture;
texture_info.gpu_surface_config.callback =
[](size_t width, size_t height,
void* user_data) -> const FlutterDesktopGpuBuffer* { return nullptr; };
void* user_data) -> const FlutterDesktopGpuSurfaceDescriptor* {
return nullptr;
};

int64_t registered_texture_id = 0;
bool register_called = false;
Expand Down

0 comments on commit aa0b834

Please sign in to comment.