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 3 // found in the LICENSE file. 4 5 #ifndef UI_GL_GL_IMAGE_H_ 6 #define UI_GL_GL_IMAGE_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "ui/gfx/gpu_memory_buffer.h" 10 #include "ui/gfx/native_widget_types.h" 11 #include "ui/gfx/size.h" 12 #include "ui/gl/gl_export.h" 13 14 namespace gfx { 15 16 class GLSurface; 17 18 // Encapsulates an image that can be bound to a texture, hiding platform 19 // specific management. 20 class GL_EXPORT GLImage : public base::RefCounted<GLImage> { 21 public: 22 GLImage(); 23 24 // Destroys the image. 25 virtual void Destroy() = 0; 26 27 // Get the size of the image. 28 virtual gfx::Size GetSize() = 0; 29 30 // Bind image to texture currently bound to |target|. 31 virtual bool BindTexImage(unsigned target) = 0; 32 33 // Release image from texture currently bound to |target|. 34 virtual void ReleaseTexImage(unsigned target) = 0; 35 36 // Called before the texture is used for drawing. 37 virtual void WillUseTexImage() = 0; 38 39 // Called after the texture has been used for drawing. 40 virtual void DidUseTexImage() = 0; 41 42 // Called before the texture image data will be modified. 43 virtual void WillModifyTexImage() = 0; 44 45 // Called after the texture image data has been modified. 46 virtual void DidModifyTexImage() = 0; 47 48 // Indicate that image should be released after use. 49 // (For an Android work-around only). 50 virtual void SetReleaseAfterUse(); 51 52 // Create a GL image for a window. 53 static scoped_refptr<GLImage> CreateGLImage(gfx::PluginWindowHandle window); 54 55 // Create a GL image for a GPU Memory buffer. 56 static scoped_refptr<GLImage> CreateGLImageForGpuMemoryBuffer( 57 gfx::GpuMemoryBufferHandle buffer, 58 gfx::Size size, 59 unsigned internalformat); 60 61 protected: 62 virtual ~GLImage(); 63 64 private: 65 friend class base::RefCounted<GLImage>; 66 67 DISALLOW_COPY_AND_ASSIGN(GLImage); 68 }; 69 70 } // namespace gfx 71 72 #endif // UI_GL_GL_IMAGE_H_ 73