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