| 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_SURFACE_ACCELERATED_SURFACE_MAC_H_ | 5 #ifndef UI_SURFACE_ACCELERATED_SURFACE_MAC_H_ |
| 6 #define UI_SURFACE_ACCELERATED_SURFACE_MAC_H_ | 6 #define UI_SURFACE_ACCELERATED_SURFACE_MAC_H_ |
| 7 | 7 |
| 8 #include <CoreFoundation/CoreFoundation.h> | 8 #include <CoreFoundation/CoreFoundation.h> |
| 9 #include <IOSurface/IOSurface.h> | 9 #include <IOSurface/IOSurface.h> |
| 10 #include <stdint.h> |
| 10 | 11 |
| 11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 12 #include "base/mac/scoped_cftyperef.h" | 13 #include "base/mac/scoped_cftyperef.h" |
| 13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 14 #include "ui/gfx/geometry/rect.h" | 15 #include "ui/gfx/geometry/rect.h" |
| 15 #include "ui/gfx/geometry/size.h" | 16 #include "ui/gfx/geometry/size.h" |
| 16 #include "ui/gl/gl_context.h" | 17 #include "ui/gl/gl_context.h" |
| 17 #include "ui/gl/gl_surface.h" | 18 #include "ui/gl/gl_surface.h" |
| 18 #include "ui/gl/gpu_preference.h" | 19 #include "ui/gl/gpu_preference.h" |
| 19 #include "ui/surface/surface_export.h" | 20 #include "ui/surface/surface_export.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 gfx::GpuPreference gpu_preference); | 55 gfx::GpuPreference gpu_preference); |
| 55 // Tear down. Must be called before destructor to prevent leaks. | 56 // Tear down. Must be called before destructor to prevent leaks. |
| 56 void Destroy(); | 57 void Destroy(); |
| 57 | 58 |
| 58 // These methods are used only once the accelerated surface is initialized. | 59 // These methods are used only once the accelerated surface is initialized. |
| 59 | 60 |
| 60 // Sets the accelerated surface to the given size, creating a new one if | 61 // Sets the accelerated surface to the given size, creating a new one if |
| 61 // the height or width changes. Returns a unique id of the IOSurface to | 62 // the height or width changes. Returns a unique id of the IOSurface to |
| 62 // which the surface is bound, or 0 if no changes were made or an error | 63 // which the surface is bound, or 0 if no changes were made or an error |
| 63 // occurred. MakeCurrent() will have been called on the new surface. | 64 // occurred. MakeCurrent() will have been called on the new surface. |
| 64 uint32 SetSurfaceSize(const gfx::Size& size); | 65 uint32_t SetSurfaceSize(const gfx::Size& size); |
| 65 | 66 |
| 66 // Returns the id of this surface's IOSurface. | 67 // Returns the id of this surface's IOSurface. |
| 67 uint32 GetSurfaceId(); | 68 uint32_t GetSurfaceId(); |
| 68 | 69 |
| 69 // Sets the GL context to be the current one for drawing. Returns true if | 70 // Sets the GL context to be the current one for drawing. Returns true if |
| 70 // it succeeded. | 71 // it succeeded. |
| 71 bool MakeCurrent(); | 72 bool MakeCurrent(); |
| 72 // Clear the surface to be transparent. Assumes the caller has already called | 73 // Clear the surface to be transparent. Assumes the caller has already called |
| 73 // MakeCurrent(). | 74 // MakeCurrent(). |
| 74 void Clear(const gfx::Rect& rect); | 75 void Clear(const gfx::Rect& rect); |
| 75 // Call after making changes to the surface which require a visual update. | 76 // Call after making changes to the surface which require a visual update. |
| 76 // Makes the rendering show up in other processes. Assumes the caller has | 77 // Makes the rendering show up in other processes. Assumes the caller has |
| 77 // already called MakeCurrent(). | 78 // already called MakeCurrent(). |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 116 |
| 116 gfx::Size ClampToValidDimensions(const gfx::Size& size); | 117 gfx::Size ClampToValidDimensions(const gfx::Size& size); |
| 117 | 118 |
| 118 // The OpenGL context, and pbuffer drawable, used to transfer data | 119 // The OpenGL context, and pbuffer drawable, used to transfer data |
| 119 // to the shared region (IOSurface). | 120 // to the shared region (IOSurface). |
| 120 scoped_refptr<gfx::GLSurface> gl_surface_; | 121 scoped_refptr<gfx::GLSurface> gl_surface_; |
| 121 scoped_refptr<gfx::GLContext> gl_context_; | 122 scoped_refptr<gfx::GLContext> gl_context_; |
| 122 base::ScopedCFTypeRef<IOSurfaceRef> io_surface_; | 123 base::ScopedCFTypeRef<IOSurfaceRef> io_surface_; |
| 123 | 124 |
| 124 // The id of |io_surface_| or 0 if that's NULL. | 125 // The id of |io_surface_| or 0 if that's NULL. |
| 125 uint32 io_surface_id_; | 126 uint32_t io_surface_id_; |
| 126 | 127 |
| 127 gfx::Size surface_size_; | 128 gfx::Size surface_size_; |
| 128 // It's important to avoid allocating zero-width or zero-height | 129 // It's important to avoid allocating zero-width or zero-height |
| 129 // IOSurfaces and textures on the Mac, so we clamp each to a minimum | 130 // IOSurfaces and textures on the Mac, so we clamp each to a minimum |
| 130 // of 1. This is the real size of the surface; surface_size_ is what | 131 // of 1. This is the real size of the surface; surface_size_ is what |
| 131 // the user requested. | 132 // the user requested. |
| 132 gfx::Size real_surface_size_; | 133 gfx::Size real_surface_size_; |
| 133 // TODO(kbr): the FBO management should not be in this class at all. | 134 // TODO(kbr): the FBO management should not be in this class at all. |
| 134 // However, if it is factored out, care needs to be taken to not | 135 // However, if it is factored out, care needs to be taken to not |
| 135 // introduce another copy of the color data on the GPU; the direct | 136 // introduce another copy of the color data on the GPU; the direct |
| 136 // binding of the internal texture to the IOSurface saves a copy. | 137 // binding of the internal texture to the IOSurface saves a copy. |
| 137 bool allocate_fbo_; | 138 bool allocate_fbo_; |
| 138 // This texture object is always allocated, regardless of whether | 139 // This texture object is always allocated, regardless of whether |
| 139 // the user requests an FBO be allocated. | 140 // the user requests an FBO be allocated. |
| 140 GLuint texture_; | 141 GLuint texture_; |
| 141 // The FBO and renderbuffer are only allocated if allocate_fbo_ is | 142 // The FBO and renderbuffer are only allocated if allocate_fbo_ is |
| 142 // true. | 143 // true. |
| 143 GLuint fbo_; | 144 GLuint fbo_; |
| 144 }; | 145 }; |
| 145 | 146 |
| 146 #endif // UI_SURFACE_ACCELERATED_SURFACE_MAC_H_ | 147 #endif // UI_SURFACE_ACCELERATED_SURFACE_MAC_H_ |
| OLD | NEW |