Home | History | Annotate | Download | only in gles2
      1 // Copyright 2014 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 #include "mojo/public/gles2/gles2_private.h"
      6 
      7 #include <assert.h>
      8 #include <stddef.h>
      9 
     10 #include "mojo/public/c/gles2/gles2.h"
     11 #include "mojo/public/gles2/gles2_interface.h"
     12 
     13 static mojo::GLES2Support* g_gles2_support = NULL;
     14 static mojo::GLES2Interface* g_gles2_interface = NULL;
     15 
     16 extern "C" {
     17 
     18 void MojoGLES2Initialize(const MojoAsyncWaiter* async_waiter) {
     19   assert(g_gles2_support);
     20   return g_gles2_support->Initialize(async_waiter);
     21 }
     22 
     23 void MojoGLES2Terminate() {
     24   assert(g_gles2_support);
     25   return g_gles2_support->Terminate();
     26 }
     27 
     28 MojoGLES2Context MojoGLES2CreateContext(
     29     MojoHandle handle,
     30     MojoGLES2ContextLost lost_callback,
     31     MojoGLES2DrawAnimationFrame animation_callback,
     32     void* closure) {
     33   return g_gles2_support->CreateContext(mojo::MessagePipeHandle(handle),
     34                                         lost_callback,
     35                                         animation_callback,
     36                                         closure);
     37 }
     38 
     39 void MojoGLES2DestroyContext(MojoGLES2Context context) {
     40   return g_gles2_support->DestroyContext(context);
     41 }
     42 
     43 void MojoGLES2MakeCurrent(MojoGLES2Context context) {
     44   assert(g_gles2_support);
     45   g_gles2_support->MakeCurrent(context);
     46   g_gles2_interface = g_gles2_support->GetGLES2InterfaceForCurrentContext();
     47 }
     48 
     49 void MojoGLES2SwapBuffers() {
     50   assert(g_gles2_support);
     51   return g_gles2_support->SwapBuffers();
     52 }
     53 
     54 void MojoGLES2RequestAnimationFrames(MojoGLES2Context context) {
     55   assert(g_gles2_support);
     56   return g_gles2_support->RequestAnimationFrames(context);
     57 }
     58 
     59 void MojoGLES2CancelAnimationFrames(MojoGLES2Context context) {
     60   assert(g_gles2_support);
     61   return g_gles2_support->CancelAnimationFrames(context);
     62 }
     63 
     64 void* MojoGLES2GetGLES2Interface(MojoGLES2Context context) {
     65   assert(g_gles2_support);
     66   return g_gles2_support->GetGLES2Interface(context);
     67 }
     68 
     69 void* MojoGLES2GetContextSupport(MojoGLES2Context context) {
     70   assert(g_gles2_support);
     71   return g_gles2_support->GetContextSupport(context);
     72 }
     73 
     74 #define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \
     75   ReturnType gl##Function PARAMETERS {                             \
     76     return g_gles2_interface->Function ARGUMENTS;                  \
     77   }
     78 #include "mojo/public/c/gles2/gles2_call_visitor_autogen.h"
     79 #undef VISIT_GL_CALL
     80 
     81 }  // extern "C"
     82 
     83 namespace mojo {
     84 
     85 GLES2Support::~GLES2Support() {}
     86 
     87 void GLES2Support::Init(GLES2Support* gles2_support) {
     88   assert(!g_gles2_support);
     89   g_gles2_support = gles2_support;
     90 }
     91 
     92 }  // namespace mojo
     93