diff options
Diffstat (limited to 'native/webview')
-rw-r--r-- | native/webview/plat_support/draw_fn.h | 15 | ||||
-rw-r--r-- | native/webview/plat_support/draw_functor.cpp | 16 |
2 files changed, 28 insertions, 3 deletions
diff --git a/native/webview/plat_support/draw_fn.h b/native/webview/plat_support/draw_fn.h index 0490e650a7a4..5b3e496be81a 100644 --- a/native/webview/plat_support/draw_fn.h +++ b/native/webview/plat_support/draw_fn.h @@ -20,7 +20,8 @@ extern "C" { // android to chromium are versioned. // // 1 is Android Q. This matches kAwDrawGLInfoVersion version 3. -static const int kAwDrawFnVersion = 1; +// 2 Adds transfer_function_* and color_space_toXYZD50 to AwDrawFn_DrawGLParams. +static const int kAwDrawFnVersion = 2; struct AwDrawFn_OnSyncParams { int version; @@ -64,6 +65,16 @@ struct AwDrawFn_DrawGLParams { // Input: current transformation matrix in surface pixels. // Uses the column-based OpenGL matrix format. float transform[16]; + + // Input: Color space parameters. + float transfer_function_g; + float transfer_function_a; + float transfer_function_b; + float transfer_function_c; + float transfer_function_d; + float transfer_function_e; + float transfer_function_f; + float color_space_toXYZD50[9]; }; struct AwDrawFn_InitVkParams { @@ -73,7 +84,7 @@ struct AwDrawFn_InitVkParams { VkDevice device; VkQueue queue; uint32_t graphics_queue_index; - uint32_t instance_version; + uint32_t api_version; const char* const* enabled_instance_extension_names; uint32_t enabled_instance_extension_names_length; const char* const* enabled_device_extension_names; diff --git a/native/webview/plat_support/draw_functor.cpp b/native/webview/plat_support/draw_functor.cpp index af2d0c850965..e43a60c3f396 100644 --- a/native/webview/plat_support/draw_functor.cpp +++ b/native/webview/plat_support/draw_functor.cpp @@ -55,6 +55,8 @@ void onDestroyed(int functor, void* data) { void draw_gl(int functor, void* data, const uirenderer::DrawGlInfo& draw_gl_params) { + float gabcdef[7]; + draw_gl_params.color_space_ptr->transferFn(gabcdef); AwDrawFn_DrawGLParams params = { .version = kAwDrawFnVersion, .clip_left = draw_gl_params.clipLeft, @@ -64,12 +66,24 @@ void draw_gl(int functor, void* data, .width = draw_gl_params.width, .height = draw_gl_params.height, .is_layer = draw_gl_params.isLayer, + .transfer_function_g = gabcdef[0], + .transfer_function_a = gabcdef[1], + .transfer_function_b = gabcdef[2], + .transfer_function_c = gabcdef[3], + .transfer_function_d = gabcdef[4], + .transfer_function_e = gabcdef[5], + .transfer_function_f = gabcdef[6], }; COMPILE_ASSERT(NELEM(params.transform) == NELEM(draw_gl_params.transform), mismatched_transform_matrix_sizes); for (int i = 0; i < NELEM(params.transform); ++i) { params.transform[i] = draw_gl_params.transform[i]; } + COMPILE_ASSERT(sizeof(params.color_space_toXYZD50) == sizeof(skcms_Matrix3x3), + gamut_transform_size_mismatch); + draw_gl_params.color_space_ptr->toXYZD50( + reinterpret_cast<skcms_Matrix3x3*>(¶ms.color_space_toXYZD50)); + SupportData* support = static_cast<SupportData*>(data); support->callbacks.draw_gl(functor, support->data, ¶ms); } @@ -88,7 +102,7 @@ void initializeVk(int functor, void* data, .device = init_vk_params.device, .queue = init_vk_params.queue, .graphics_queue_index = init_vk_params.graphics_queue_index, - .instance_version = init_vk_params.instance_version, + .api_version = init_vk_params.api_version, .enabled_instance_extension_names = init_vk_params.enabled_instance_extension_names, .enabled_instance_extension_names_length = |