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_GL_API_IMPLEMENTATION_H_
      6 #define UI_GL_GL_GL_API_IMPLEMENTATION_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "ui/gl/gl_bindings.h"
     10 #include "ui/gl/gl_export.h"
     11 
     12 namespace gpu {
     13 namespace gles2 {
     14 class GLES2Decoder;
     15 }
     16 }
     17 namespace gfx {
     18 
     19 class GLContext;
     20 class GLSurface;
     21 struct GLVersionInfo;
     22 
     23 void InitializeStaticGLBindingsGL();
     24 void InitializeDynamicGLBindingsGL(GLContext* context);
     25 void InitializeDebugGLBindingsGL();
     26 void InitializeNullDrawGLBindingsGL();
     27 // TODO(danakj): Remove this when all test suites are using null-draw.
     28 bool HasInitializedNullDrawGLBindingsGL();
     29 bool SetNullDrawGLBindingsEnabledGL(bool enabled);
     30 void ClearGLBindingsGL();
     31 void SetGLToRealGLApi();
     32 void SetGLApi(GLApi* api);
     33 void SetGLApiToNoContext();
     34 const GLVersionInfo* GetGLVersionInfo();
     35 
     36 class GLApiBase : public GLApi {
     37  public:
     38   // Include the auto-generated part of this class. We split this because
     39   // it means we can easily edit the non-auto generated parts right here in
     40   // this file instead of having to edit some template or the code generator.
     41   #include "gl_bindings_api_autogen_gl.h"
     42 
     43  protected:
     44   GLApiBase();
     45   virtual ~GLApiBase();
     46   void InitializeBase(DriverGL* driver);
     47   void SignalFlush();
     48 
     49   DriverGL* driver_;
     50 };
     51 
     52 // Implemenents the GL API by calling directly into the driver.
     53 class RealGLApi : public GLApiBase {
     54  public:
     55   RealGLApi();
     56   virtual ~RealGLApi();
     57   void Initialize(DriverGL* driver);
     58 
     59  private:
     60   virtual void glFinishFn() OVERRIDE;
     61   virtual void glFlushFn() OVERRIDE;
     62 };
     63 
     64 // Inserts a TRACE for every GL call.
     65 class TraceGLApi : public GLApi {
     66  public:
     67   TraceGLApi(GLApi* gl_api) : gl_api_(gl_api) { }
     68   virtual ~TraceGLApi();
     69 
     70   // Include the auto-generated part of this class. We split this because
     71   // it means we can easily edit the non-auto generated parts right here in
     72   // this file instead of having to edit some template or the code generator.
     73   #include "gl_bindings_api_autogen_gl.h"
     74 
     75  private:
     76   GLApi* gl_api_;
     77 };
     78 
     79 // Catches incorrect usage when GL calls are made without a current context.
     80 class NoContextGLApi : public GLApi {
     81  public:
     82   NoContextGLApi();
     83   virtual ~NoContextGLApi();
     84 
     85   // Include the auto-generated part of this class. We split this because
     86   // it means we can easily edit the non-auto generated parts right here in
     87   // this file instead of having to edit some template or the code generator.
     88   #include "gl_bindings_api_autogen_gl.h"
     89 };
     90 
     91 // Implementents the GL API using co-operative state restoring.
     92 // Assumes there is only one real GL context and that multiple virtual contexts
     93 // are implemented above it. Restores the needed state from the current context.
     94 class VirtualGLApi : public GLApiBase {
     95  public:
     96   VirtualGLApi();
     97   virtual ~VirtualGLApi();
     98   void Initialize(DriverGL* driver, GLContext* real_context);
     99 
    100   // Sets the current virutal context.
    101   bool MakeCurrent(GLContext* virtual_context, GLSurface* surface);
    102 
    103   void OnReleaseVirtuallyCurrent(GLContext* virtual_context);
    104 
    105 private:
    106   // Overridden functions from GLApiBase
    107   virtual const GLubyte* glGetStringFn(GLenum name) OVERRIDE;
    108   virtual void glFinishFn() OVERRIDE;
    109   virtual void glFlushFn() OVERRIDE;
    110 
    111   // The real context we're running on.
    112   GLContext* real_context_;
    113 
    114   // The current virtual context.
    115   GLContext* current_context_;
    116 
    117   // The supported extensions being advertised for this virtual context.
    118   std::string extensions_;
    119 };
    120 
    121 class GL_EXPORT ScopedSetGLToRealGLApi {
    122  public:
    123   ScopedSetGLToRealGLApi();
    124   ~ScopedSetGLToRealGLApi();
    125 
    126  private:
    127   GLApi* old_gl_api_;
    128 };
    129 
    130 }  // namespace gfx
    131 
    132 #endif  // UI_GL_GL_GL_API_IMPLEMENTATION_H_
    133