| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_GL_GL_SURFACE_H_ | 5 #ifndef UI_GL_GL_SURFACE_H_ |
| 6 #define UI_GL_GL_SURFACE_H_ | 6 #define UI_GL_GL_SURFACE_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
| 14 #include "ui/gfx/geometry/rect.h" | 14 #include "ui/gfx/geometry/rect.h" |
| 15 #include "ui/gfx/geometry/rect_f.h" | 15 #include "ui/gfx/geometry/rect_f.h" |
| 16 #include "ui/gfx/geometry/size.h" | 16 #include "ui/gfx/geometry/size.h" |
| 17 #include "ui/gfx/native_widget_types.h" | 17 #include "ui/gfx/native_widget_types.h" |
| 18 #include "ui/gfx/overlay_transform.h" | 18 #include "ui/gfx/overlay_transform.h" |
| 19 #include "ui/gfx/swap_result.h" | 19 #include "ui/gfx/swap_result.h" |
| 20 #include "ui/gl/gl_export.h" | 20 #include "ui/gl/gl_export.h" |
| 21 #include "ui/gl/gl_implementation.h" | 21 #include "ui/gl/gl_implementation.h" |
| 22 | 22 |
| 23 namespace gl { | 23 namespace gfx { |
| 24 class GLImage; | 24 class Transform; |
| 25 class VSyncProvider; |
| 25 } | 26 } |
| 26 | 27 |
| 27 namespace gfx { | 28 namespace gl { |
| 28 | 29 |
| 29 class GLContext; | 30 class GLContext; |
| 30 class Transform; | 31 class GLImage; |
| 31 class VSyncProvider; | |
| 32 | 32 |
| 33 // Encapsulates a surface that can be rendered to with GL, hiding platform | 33 // Encapsulates a surface that can be rendered to with GL, hiding platform |
| 34 // specific management. | 34 // specific management. |
| 35 class GL_EXPORT GLSurface : public base::RefCounted<GLSurface> { | 35 class GL_EXPORT GLSurface : public base::RefCounted<GLSurface> { |
| 36 public: | 36 public: |
| 37 GLSurface(); | 37 GLSurface(); |
| 38 | 38 |
| 39 // Minimum bit depth of surface. | 39 // Minimum bit depth of surface. |
| 40 enum Format { | 40 enum Format { |
| 41 SURFACE_ARGB8888, | 41 SURFACE_ARGB8888, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 // Returns whether or not the surface supports CommitOverlayPlanes. | 87 // Returns whether or not the surface supports CommitOverlayPlanes. |
| 88 virtual bool SupportsCommitOverlayPlanes(); | 88 virtual bool SupportsCommitOverlayPlanes(); |
| 89 | 89 |
| 90 // Returns whether SwapBuffersAsync() is supported. | 90 // Returns whether SwapBuffersAsync() is supported. |
| 91 virtual bool SupportsAsyncSwap(); | 91 virtual bool SupportsAsyncSwap(); |
| 92 | 92 |
| 93 // Returns the internal frame buffer object name if the surface is backed by | 93 // Returns the internal frame buffer object name if the surface is backed by |
| 94 // FBO. Otherwise returns 0. | 94 // FBO. Otherwise returns 0. |
| 95 virtual unsigned int GetBackingFrameBufferObject(); | 95 virtual unsigned int GetBackingFrameBufferObject(); |
| 96 | 96 |
| 97 typedef base::Callback<void(SwapResult)> SwapCompletionCallback; | 97 typedef base::Callback<void(gfx::SwapResult)> SwapCompletionCallback; |
| 98 // Swaps front and back buffers. This has no effect for off-screen | 98 // Swaps front and back buffers. This has no effect for off-screen |
| 99 // contexts. On some platforms, we want to send SwapBufferAck only after the | 99 // contexts. On some platforms, we want to send SwapBufferAck only after the |
| 100 // surface is displayed on screen. The callback can be used to delay sending | 100 // surface is displayed on screen. The callback can be used to delay sending |
| 101 // SwapBufferAck till that data is available. The callback should be run on | 101 // SwapBufferAck till that data is available. The callback should be run on |
| 102 // the calling thread (i.e. same thread SwapBuffersAsync is called) | 102 // the calling thread (i.e. same thread SwapBuffersAsync is called) |
| 103 virtual void SwapBuffersAsync(const SwapCompletionCallback& callback); | 103 virtual void SwapBuffersAsync(const SwapCompletionCallback& callback); |
| 104 | 104 |
| 105 // Copy part of the backbuffer to the frontbuffer. | 105 // Copy part of the backbuffer to the frontbuffer. |
| 106 virtual gfx::SwapResult PostSubBuffer(int x, int y, int width, int height); | 106 virtual gfx::SwapResult PostSubBuffer(int x, int y, int width, int height); |
| 107 | 107 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 virtual void* GetDisplay(); | 149 virtual void* GetDisplay(); |
| 150 | 150 |
| 151 // Get the platfrom specific configuration for this surface, if available. | 151 // Get the platfrom specific configuration for this surface, if available. |
| 152 virtual void* GetConfig(); | 152 virtual void* GetConfig(); |
| 153 | 153 |
| 154 // Get the GL pixel format of the surface, if available. | 154 // Get the GL pixel format of the surface, if available. |
| 155 virtual GLSurface::Format GetFormat(); | 155 virtual GLSurface::Format GetFormat(); |
| 156 | 156 |
| 157 // Get access to a helper providing time of recent refresh and period | 157 // Get access to a helper providing time of recent refresh and period |
| 158 // of screen refresh. If unavailable, returns NULL. | 158 // of screen refresh. If unavailable, returns NULL. |
| 159 virtual VSyncProvider* GetVSyncProvider(); | 159 virtual gfx::VSyncProvider* GetVSyncProvider(); |
| 160 | 160 |
| 161 // Schedule an overlay plane to be shown at swap time, or on the next | 161 // Schedule an overlay plane to be shown at swap time, or on the next |
| 162 // CommitOverlayPlanes call. | 162 // CommitOverlayPlanes call. |
| 163 // |z_order| specifies the stacking order of the plane relative to the | 163 // |z_order| specifies the stacking order of the plane relative to the |
| 164 // main framebuffer located at index 0. For the case where there is no | 164 // main framebuffer located at index 0. For the case where there is no |
| 165 // main framebuffer, overlays may be scheduled at 0, taking its place. | 165 // main framebuffer, overlays may be scheduled at 0, taking its place. |
| 166 // |transform| specifies how the buffer is to be transformed during | 166 // |transform| specifies how the buffer is to be transformed during |
| 167 // composition. | 167 // composition. |
| 168 // |image| to be presented by the overlay. | 168 // |image| to be presented by the overlay. |
| 169 // |bounds_rect| specify where it is supposed to be on the screen in pixels. | 169 // |bounds_rect| specify where it is supposed to be on the screen in pixels. |
| 170 // |crop_rect| specifies the region within the buffer to be placed inside | 170 // |crop_rect| specifies the region within the buffer to be placed inside |
| 171 // |bounds_rect|. | 171 // |bounds_rect|. |
| 172 virtual bool ScheduleOverlayPlane(int z_order, | 172 virtual bool ScheduleOverlayPlane(int z_order, |
| 173 OverlayTransform transform, | 173 gfx::OverlayTransform transform, |
| 174 gl::GLImage* image, | 174 gl::GLImage* image, |
| 175 const Rect& bounds_rect, | 175 const gfx::Rect& bounds_rect, |
| 176 const RectF& crop_rect); | 176 const gfx::RectF& crop_rect); |
| 177 | 177 |
| 178 // Schedule a CALayer to be shown at swap time. | 178 // Schedule a CALayer to be shown at swap time. |
| 179 // All arguments correspond to their CALayer properties. | 179 // All arguments correspond to their CALayer properties. |
| 180 virtual bool ScheduleCALayer(gl::GLImage* contents_image, | 180 virtual bool ScheduleCALayer(gl::GLImage* contents_image, |
| 181 const RectF& contents_rect, | 181 const gfx::RectF& contents_rect, |
| 182 float opacity, | 182 float opacity, |
| 183 unsigned background_color, | 183 unsigned background_color, |
| 184 unsigned edge_aa_mask, | 184 unsigned edge_aa_mask, |
| 185 const RectF& rect, | 185 const gfx::RectF& rect, |
| 186 bool is_clipped, | 186 bool is_clipped, |
| 187 const RectF& clip_rect, | 187 const gfx::RectF& clip_rect, |
| 188 const Transform& transform, | 188 const gfx::Transform& transform, |
| 189 int sorting_content_id, | 189 int sorting_content_id, |
| 190 unsigned filter); | 190 unsigned filter); |
| 191 | 191 |
| 192 virtual bool IsSurfaceless() const; | 192 virtual bool IsSurfaceless() const; |
| 193 | 193 |
| 194 virtual bool FlipsVertically() const; | 194 virtual bool FlipsVertically() const; |
| 195 | 195 |
| 196 // Returns true if SwapBuffers or PostSubBuffers causes a flip, such that | 196 // Returns true if SwapBuffers or PostSubBuffers causes a flip, such that |
| 197 // the next buffer may be 2 frames old. | 197 // the next buffer may be 2 frames old. |
| 198 virtual bool BuffersFlipped() const; | 198 virtual bool BuffersFlipped() const; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 gfx::Size GetSize() override; | 274 gfx::Size GetSize() override; |
| 275 void* GetHandle() override; | 275 void* GetHandle() override; |
| 276 unsigned int GetBackingFrameBufferObject() override; | 276 unsigned int GetBackingFrameBufferObject() override; |
| 277 bool OnMakeCurrent(GLContext* context) override; | 277 bool OnMakeCurrent(GLContext* context) override; |
| 278 bool SetBackbufferAllocation(bool allocated) override; | 278 bool SetBackbufferAllocation(bool allocated) override; |
| 279 void SetFrontbufferAllocation(bool allocated) override; | 279 void SetFrontbufferAllocation(bool allocated) override; |
| 280 void* GetShareHandle() override; | 280 void* GetShareHandle() override; |
| 281 void* GetDisplay() override; | 281 void* GetDisplay() override; |
| 282 void* GetConfig() override; | 282 void* GetConfig() override; |
| 283 GLSurface::Format GetFormat() override; | 283 GLSurface::Format GetFormat() override; |
| 284 VSyncProvider* GetVSyncProvider() override; | 284 gfx::VSyncProvider* GetVSyncProvider() override; |
| 285 bool ScheduleOverlayPlane(int z_order, | 285 bool ScheduleOverlayPlane(int z_order, |
| 286 OverlayTransform transform, | 286 gfx::OverlayTransform transform, |
| 287 gl::GLImage* image, | 287 gl::GLImage* image, |
| 288 const Rect& bounds_rect, | 288 const gfx::Rect& bounds_rect, |
| 289 const RectF& crop_rect) override; | 289 const gfx::RectF& crop_rect) override; |
| 290 bool IsSurfaceless() const override; | 290 bool IsSurfaceless() const override; |
| 291 bool FlipsVertically() const override; | 291 bool FlipsVertically() const override; |
| 292 bool BuffersFlipped() const override; | 292 bool BuffersFlipped() const override; |
| 293 | 293 |
| 294 GLSurface* surface() const { return surface_.get(); } | 294 GLSurface* surface() const { return surface_.get(); } |
| 295 | 295 |
| 296 protected: | 296 protected: |
| 297 ~GLSurfaceAdapter() override; | 297 ~GLSurfaceAdapter() override; |
| 298 | 298 |
| 299 private: | 299 private: |
| 300 scoped_refptr<GLSurface> surface_; | 300 scoped_refptr<GLSurface> surface_; |
| 301 | 301 |
| 302 DISALLOW_COPY_AND_ASSIGN(GLSurfaceAdapter); | 302 DISALLOW_COPY_AND_ASSIGN(GLSurfaceAdapter); |
| 303 }; | 303 }; |
| 304 | 304 |
| 305 } // namespace gfx | 305 } // namespace gl |
| 306 | 306 |
| 307 #endif // UI_GL_GL_SURFACE_H_ | 307 #endif // UI_GL_GL_SURFACE_H_ |
| OLD | NEW |