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#ifndef MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_THUNKS_H_ 6#define MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_THUNKS_H_ 7 8#include <stddef.h> 9 10#include "mojo/public/c/gles2/gles2.h" 11 12// Like MojoGLES2ControlThunks, but specifies the frozen GLES2 API. Separated 13// out as MojoGLES2ControlThunks may be modified and added to, but this 14// interface is frozen. 15#pragma pack(push, 8) 16struct MojoGLES2ImplThunks { 17 size_t size; // Should be set to sizeof(MojoGLES2ImplThunks). 18 19#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \ 20 ReturnType(*Function) PARAMETERS; 21#include "mojo/public/c/gles2/gles2_call_visitor_autogen.h" 22#undef VISIT_GL_CALL 23}; 24#pragma pack(pop) 25 26// Intended to be called from the embedder to get the embedder's implementation 27// of GLES2. 28inline MojoGLES2ImplThunks MojoMakeGLES2ImplThunks() { 29 MojoGLES2ImplThunks gles2_impl_thunks = { 30 sizeof(MojoGLES2ImplThunks), 31#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) gl##Function, 32#include "mojo/public/c/gles2/gles2_call_visitor_autogen.h" 33#undef VISIT_GL_CALL 34 }; 35 36 return gles2_impl_thunks; 37} 38 39// Use this type for the function found by dynamically discovering it in 40// a DSO linked with mojo_system. For example: 41// MojoSetGLES2ImplThunksFn mojo_set_gles2_impl_thunks_fn = 42// reinterpret_cast<MojoSetGLES2ImplThunksFn>( 43// app_library.GetFunctionPointer("MojoSetGLES2ImplThunks")); 44// The expected size of |gles2_impl_thunks| is returned. 45// The contents of |gles2_impl_thunks| are copied. 46typedef size_t (*MojoSetGLES2ImplThunksFn)( 47 const MojoGLES2ImplThunks* gles2_impl_thunks); 48 49#endif // MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_THUNKS_H_ 50