Home | History | Annotate | Download | only in gl
      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);
     32 
     33   // Release image from texture currently bound to |target|.
     34   virtual void ReleaseTexImage(unsigned target);
     35 
     36   // Called before the texture is used for drawing.
     37   virtual void WillUseTexImage();
     38 
     39   // Called after the texture has been used for drawing.
     40   virtual void DidUseTexImage();
     41 
     42   // Called before the texture image data will be modified.
     43   virtual void WillModifyTexImage();
     44 
     45   // Called after the texture image data has been modified.
     46   virtual void DidModifyTexImage();
     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