| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| //****************************************************************************** |
| // This is a copy of the coresponding android_webview/public/browser header. |
| // Any changes to the interface should be made there as well. |
| //****************************************************************************** |
| |
| #ifndef ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_FN_H_ |
| #define ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_FN_H_ |
| |
| #include <android/surface_control.h> |
| #include <vulkan/vulkan.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // In order to make small changes backwards compatible, all structs passed from |
| // android to chromium are versioned. |
| // |
| // 1 is Android Q. This matches kAwDrawGLInfoVersion version 3. |
| // 2 Adds transfer_function_* and color_space_toXYZD50 to AwDrawFn_DrawGLParams. |
| // 3 Adds SurfaceControl related functions. |
| static const int kAwDrawFnVersion = 3; |
| |
| // Returns parent ASurfaceControl for WebView overlays. It will be have same |
| // geometry as the surface we draw into and positioned below it (underlay). |
| // This does not pass ownership to webview, but guaranteed to be alive until |
| // transaction from next removeOverlays call or functor destruction will be |
| // finished. |
| typedef ASurfaceControl* AwDrawFn_GetSurfaceControl(); |
| |
| // Merges WebView transaction to be applied synchronously with current draw. |
| // This doesn't pass ownership of the transaction, changes will be copied and |
| // webview can free transaction right after the call. |
| typedef void AwDrawFn_MergeTransaction(ASurfaceTransaction* transaction); |
| |
| enum AwDrawFnOverlaysMode { |
| // Indicated that webview should not promote anything to overlays this draw |
| // and remove all visible overlays. |
| // Added in version 3. |
| AW_DRAW_FN_OVERLAYS_MODE_DISABLED = 0, |
| |
| // Indicates that webview can use overlays. |
| // Added in version 3. |
| AW_DRAW_FN_OVERLAYS_MODE_ENABLED = 1, |
| }; |
| |
| struct AwDrawFn_OnSyncParams { |
| int version; |
| |
| bool apply_force_dark; |
| }; |
| |
| struct AwDrawFn_DrawGLParams { |
| int version; |
| |
| // Input: current clip rect in surface coordinates. Reflects the current state |
| // of the OpenGL scissor rect. Both the OpenGL scissor rect and viewport are |
| // set by the caller of the draw function and updated during View animations. |
| int clip_left; |
| int clip_top; |
| int clip_right; |
| int clip_bottom; |
| |
| // Input: current width/height of destination surface. |
| int width; |
| int height; |
| |
| // Used to be is_layer. |
| bool deprecated_0; |
| |
| // 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]; |
| |
| // Input: Indicates how webview should use overlays for this draw. |
| // Added in version 3. |
| AwDrawFnOverlaysMode overlays_mode; |
| |
| // Input: WebView can call it to obtain parent surface control for overlays. |
| // Added in version 3. |
| AwDrawFn_GetSurfaceControl* get_surface_control; |
| |
| // Input: WebView call this to apply ASurfaceTransaction synchronously with |
| // the draw. |
| // Added in version 3. |
| AwDrawFn_MergeTransaction* merge_transaction; |
| }; |
| |
| struct AwDrawFn_InitVkParams { |
| int version; |
| VkInstance instance; |
| VkPhysicalDevice physical_device; |
| VkDevice device; |
| VkQueue queue; |
| uint32_t graphics_queue_index; |
| 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; |
| uint32_t enabled_device_extension_names_length; |
| // Only one of device_features and device_features_2 should be non-null. |
| // If both are null then no features are enabled. |
| VkPhysicalDeviceFeatures* device_features; |
| VkPhysicalDeviceFeatures2* device_features_2; |
| }; |
| |
| struct AwDrawFn_DrawVkParams { |
| int version; |
| |
| // Input: current width/height of destination surface. |
| int width; |
| int height; |
| |
| bool deprecated_0; |
| |
| // Input: current transform matrix |
| float transform[16]; |
| |
| // Input WebView should do its main compositing draws into this. It cannot do |
| // anything that would require stopping the render pass. |
| VkCommandBuffer secondary_command_buffer; |
| |
| // Input: The main color attachment index where secondary_command_buffer will |
| // eventually be submitted. |
| uint32_t color_attachment_index; |
| |
| // Input: A render pass which will be compatible to the one which the |
| // secondary_command_buffer will be submitted into. |
| VkRenderPass compatible_render_pass; |
| |
| // Input: Format of the destination surface. |
| VkFormat format; |
| |
| // 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]; |
| |
| // Input: current clip rect |
| int clip_left; |
| int clip_top; |
| int clip_right; |
| int clip_bottom; |
| |
| // Input: Indicates how webview should use overlays for this draw. |
| // Added in version 3. |
| AwDrawFnOverlaysMode overlays_mode; |
| |
| // Input: WebView can call it to obtain parent surface control for overlays. |
| // Added in version 3. |
| AwDrawFn_GetSurfaceControl* get_surface_control; |
| |
| // Input: WebView call this to apply ASurfaceTransaction synchronously with |
| // the draw. |
| // Added in version 3. |
| AwDrawFn_MergeTransaction* merge_transaction; |
| }; |
| |
| struct AwDrawFn_PostDrawVkParams { |
| int version; |
| }; |
| |
| struct AwDrawFn_RemoveOverlaysParams { |
| int version; |
| // Input: WebView call this to apply ASurfaceTransaction synchronously with |
| // the draw. |
| // Added in version 3. |
| AwDrawFn_MergeTransaction* merge_transaction; |
| }; |
| |
| // Called on render thread while UI thread is blocked. Called for both GL and |
| // VK. |
| typedef void AwDrawFn_OnSync(int functor, |
| void* data, |
| AwDrawFn_OnSyncParams* params); |
| |
| // Called on render thread when either the context is destroyed _or_ when the |
| // functor's last reference goes away. Will always be called with an active |
| // context. Called for both GL and VK. |
| typedef void AwDrawFn_OnContextDestroyed(int functor, void* data); |
| |
| // Called on render thread when the last reference to the handle goes away and |
| // the handle is considered irrevocably destroyed. Will always be preceded by |
| // a call to OnContextDestroyed if this functor had ever been drawn. Called for |
| // both GL and VK. |
| typedef void AwDrawFn_OnDestroyed(int functor, void* data); |
| |
| // Only called for GL. |
| typedef void AwDrawFn_DrawGL(int functor, |
| void* data, |
| AwDrawFn_DrawGLParams* params); |
| |
| // Initialize vulkan state. Needs to be called again after any |
| // OnContextDestroyed. Only called for Vulkan. |
| typedef void AwDrawFn_InitVk(int functor, |
| void* data, |
| AwDrawFn_InitVkParams* params); |
| |
| // Only called for Vulkan. |
| typedef void AwDrawFn_DrawVk(int functor, |
| void* data, |
| AwDrawFn_DrawVkParams* params); |
| |
| // Only called for Vulkan. |
| typedef void AwDrawFn_PostDrawVk(int functor, |
| void* data, |
| AwDrawFn_PostDrawVkParams* params); |
| |
| // Can be called to make webview hide all overlays and stop updating them until |
| // next draw. WebView must obtain new ASurfaceControl after this call to use as |
| // parent for the overlays on next draw. |
| typedef void AwDrawFn_RemoveOverlays(int functor, |
| void* data, |
| AwDrawFn_RemoveOverlaysParams* params); |
| |
| struct AwDrawFnFunctorCallbacks { |
| // version is passed in CreateFunctor call. |
| AwDrawFn_OnSync* on_sync; |
| AwDrawFn_OnContextDestroyed* on_context_destroyed; |
| AwDrawFn_OnDestroyed* on_destroyed; |
| AwDrawFn_DrawGL* draw_gl; |
| AwDrawFn_InitVk* init_vk; |
| AwDrawFn_DrawVk* draw_vk; |
| AwDrawFn_PostDrawVk* post_draw_vk; |
| // Added in version 3. |
| AwDrawFn_RemoveOverlays* remove_overlays; |
| }; |
| |
| enum AwDrawFnRenderMode { |
| AW_DRAW_FN_RENDER_MODE_OPENGL_ES = 0, |
| AW_DRAW_FN_RENDER_MODE_VULKAN = 1, |
| }; |
| |
| // Get the render mode. Result is static for the process. |
| typedef AwDrawFnRenderMode AwDrawFn_QueryRenderMode(void); |
| |
| // This available up to version 3, use the one below. |
| typedef int AwDrawFn_CreateFunctor(void* data, |
| AwDrawFnFunctorCallbacks* functor_callbacks); |
| |
| // Create a functor. |functor_callbacks| should be valid until OnDestroyed. |
| typedef int AwDrawFn_CreateFunctor_v3( |
| void* data, |
| int version, |
| AwDrawFnFunctorCallbacks* functor_callbacks); |
| |
| // May be called on any thread to signal that the functor should be destroyed. |
| // The functor will receive an onDestroyed when the last usage of it is |
| // released, and it should be considered alive & active until that point. |
| typedef void AwDrawFn_ReleaseFunctor(int functor); |
| |
| struct AwDrawFnFunctionTable { |
| int version; |
| AwDrawFn_QueryRenderMode* query_render_mode; |
| // Available up to version 3. |
| AwDrawFn_CreateFunctor* create_functor; |
| AwDrawFn_ReleaseFunctor* release_functor; |
| // Added in version 3. |
| AwDrawFn_CreateFunctor_v3* create_functor_v3; |
| }; |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_FN_H_ |