123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Copyright 2012 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.
- #ifndef ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_GL_H_
- #define ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_GL_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- // 1 is L/L MR1
- //
- // 2 starts at M, and added an imperfect workaround for complex clipping by
- // elevating the WebView into an FBO layer. If any transform, clip, or outline
- // clip occurs that would either likely use the stencil buffer for clipping, or
- // require shader based clipping in HWUI, the WebView is drawn into an FBO (if
- // it fits).
- // This is a temporary workaround for a lack of WebView support for stencil/
- // shader based round rect clipping, and should be removed when webview is
- // capable of supporting these clips internally when drawing.
- //
- // 3 starts during development of P, when android defaults from HWUI to skia as
- // the GL renderer. Skia already maintains and restores its GL state, so there
- // is no need for WebView to restore this state. Skia also no longer promises
- // GL state on entering draw, such as no vertex array buffer binding.
- static const int kAwDrawGLInfoVersion = 3;
- // Holds the information required to trigger an OpenGL drawing operation.
- struct AwDrawGLInfo {
- int version; // The AwDrawGLInfo this struct was built with.
- // Input: tells the draw function what action to perform.
- enum Mode {
- kModeDraw = 0,
- kModeProcess = 1,
- kModeProcessNoContext = 2,
- kModeSync = 3,
- } mode;
- // 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;
- // Input: is the View rendered into an independent layer.
- // If false, the surface is likely to hold to the full screen contents, with
- // the scissor box set by the caller to the actual View location and size.
- // Also the transformation matrix will contain at least a translation to the
- // position of the View to render, plus any other transformations required as
- // part of any ongoing View animation. View translucency (alpha) is ignored,
- // although the framework will set is_layer to true for non-opaque cases.
- // Can be requested via the View.setLayerType(View.LAYER_TYPE_NONE, ...)
- // Android API method.
- //
- // If true, the surface is dedicated to the View and should have its size.
- // The viewport and scissor box are set by the caller to the whole surface.
- // Animation transformations are handled by the caller and not reflected in
- // the provided transformation matrix. Translucency works normally.
- // Can be requested via the View.setLayerType(View.LAYER_TYPE_HARDWARE, ...)
- // Android API method.
- bool is_layer;
- // Input: current transformation matrix in surface pixels.
- // Uses the column-based OpenGL matrix format.
- float transform[16];
- };
- // Function to invoke a direct GL draw into the client's pre-configured
- // GL context. Obtained via AwContents.getDrawGLFunction() (static).
- // |view_context| is an opaque identifier that was returned by the corresponding
- // call to AwContents.getAwDrawGLViewContext().
- // |draw_info| carries the in and out parameters for this draw.
- // |spare| ignored; pass NULL.
- typedef void (AwDrawGLFunction)(long view_context,
- AwDrawGLInfo* draw_info,
- void* spare);
- enum AwMapMode {
- MAP_READ_ONLY = 0,
- MAP_WRITE_ONLY = 1,
- MAP_READ_WRITE = 2,
- };
- // Called to create a GraphicBuffer
- typedef long AwCreateGraphicBufferFunction(int w, int h);
- // Called to release a GraphicBuffer
- typedef void AwReleaseGraphicBufferFunction(long buffer_id);
- // Called to map a GraphicBuffer in |mode|.
- typedef int AwMapFunction(long buffer_id, AwMapMode mode, void** vaddr);
- // Called to unmap a GraphicBuffer
- typedef int AwUnmapFunction(long buffer_id);
- // Called to get a native buffer pointer
- typedef void* AwGetNativeBufferFunction(long buffer_id);
- // Called to get the stride of the buffer
- typedef unsigned int AwGetStrideFunction(long buffer_id);
- static const int kAwDrawGLFunctionTableVersion = 1;
- // Set of functions used in rendering in hardware mode
- struct AwDrawGLFunctionTable {
- int version;
- AwCreateGraphicBufferFunction* create_graphic_buffer;
- AwReleaseGraphicBufferFunction* release_graphic_buffer;
- AwMapFunction* map;
- AwUnmapFunction* unmap;
- AwGetNativeBufferFunction* get_native_buffer;
- AwGetStrideFunction* get_stride;
- };
- #ifdef __cplusplus
- } // extern "C"
- #endif
- #endif // ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_GL_H_
|