155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li/*
255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** Copyright 2011, The Android Open Source Project
355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li **
455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** Licensed under the Apache License, Version 2.0 (the "License");
555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** you may not use this file except in compliance with the License.
655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** You may obtain a copy of the License at
755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li **
855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li **     http://www.apache.org/licenses/LICENSE-2.0
955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li **
1055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** Unless required by applicable law or agreed to in writing, software
1155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** distributed under the License is distributed on an "AS IS" BASIS,
1255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** See the License for the specific language governing permissions and
1455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li ** limitations under the License.
1555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li */
1655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// auto generated by generate_api_cpp.py
1828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
19ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li#include <utils/Debug.h>
20ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li
215c425f2eafc3d63e475153586edcf12eb6348aadDavid Li#include "src/header.h"
225c425f2eafc3d63e475153586edcf12eb6348aadDavid Li#include "src/api.h"
2328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
24ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Litemplate<typename T> static int ToInt(const T & t)
25ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li{
26ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li    COMPILE_TIME_ASSERT_FUNCTION_SCOPE(sizeof(T) == sizeof(int));
27ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li    return (int &)t;
28ce30eb8a90a1ac458e15e773057a8a73b0918ae6David Li}
2928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
3028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glActiveTexture(GLenum texture)
3128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
3255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
3355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
3455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum texture;
3555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
3755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glActiveTexture(texture);
3855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
3955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
4055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
4155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.texture = texture;
4255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
4355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(texture);
4455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
45fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glActiveTexture);
4628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
4728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
4828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glAttachShader(GLuint program, GLuint shader)
4928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
5055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
5155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
5255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
5355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
5455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
5555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
5655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glAttachShader(program, shader);
5755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
5855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
5955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
6055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
6155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
6255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
6355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
6455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(shader);
6555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
66fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glAttachShader);
6728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
6828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
6928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
7028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
7155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
7255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
7355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
7455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
7555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLchar* name;
7655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
7755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
7855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBindAttribLocation(program, index, name);
7955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
8055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
8155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
8255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
8355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
8455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
8555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
8655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
8755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(index);
8855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(name));
8955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
9055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
9155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
92fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindAttribLocation);
9328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
9428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
9528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBindBuffer(GLenum target, GLuint buffer)
9628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
9755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
9855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
9955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
10055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint buffer;
10155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
10255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
10355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBindBuffer(target, buffer);
1045c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glBindBuffer(target, buffer);
10555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
10655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
10755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
10855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
10955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.buffer = buffer;
11055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
11155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
11255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(buffer);
11355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
114fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindBuffer);
11528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
11628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
11728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBindFramebuffer(GLenum target, GLuint framebuffer)
11828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
11955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
12055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
12155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
12255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint framebuffer;
12355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
12455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
12555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBindFramebuffer(target, framebuffer);
12655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
12755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
12855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
12955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
13055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.framebuffer = framebuffer;
13155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
13255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
13355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(framebuffer);
13455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
135fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindFramebuffer);
13628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
13728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
13828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
13928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
14055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
14155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
14255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
14355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint renderbuffer;
14455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
14555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
14655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBindRenderbuffer(target, renderbuffer);
14755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
14855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
14955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
15055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
15155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffer = renderbuffer;
15255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
15355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
15455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(renderbuffer);
15555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
156fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindRenderbuffer);
15728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
15828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
15928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBindTexture(GLenum target, GLuint texture)
16028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
16155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
16255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
16355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
16455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint texture;
16555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
16655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
16755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBindTexture(target, texture);
16855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
16955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
17055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
17155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
17255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.texture = texture;
17355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
17455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
17555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(texture);
17655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
177fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBindTexture);
17828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
17928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
18028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
18128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
18255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
18355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
18455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf red;
18555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf green;
18655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf blue;
18755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf alpha;
18855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
18955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
19055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBlendColor(red, green, blue, alpha);
19155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
19255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
19355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
19455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.red = red;
19555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.green = green;
19655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.blue = blue;
19755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.alpha = alpha;
19855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
19955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(red));
20055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(green));
20155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(blue));
20255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(alpha));
20355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
204fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendColor);
20528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
20628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
20728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBlendEquation( GLenum mode )
20828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
20955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
21055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
21155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum mode;
21255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
21355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
21455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBlendEquation(mode);
21555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
21655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
21755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
21855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mode = mode;
21955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
22055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(mode);
22155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
222fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendEquation);
22328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
22428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
22528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
22628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
22755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
22855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
22955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum modeRGB;
23055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum modeAlpha;
23155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
23255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
23355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBlendEquationSeparate(modeRGB, modeAlpha);
23455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
23555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
23655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
23755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.modeRGB = modeRGB;
23855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.modeAlpha = modeAlpha;
23955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
24055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(modeRGB);
24155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(modeAlpha);
24255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
243fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendEquationSeparate);
24428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
24528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
24628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBlendFunc(GLenum sfactor, GLenum dfactor)
24728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
24855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
24955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
25055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum sfactor;
25155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum dfactor;
25255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
25355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
25455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBlendFunc(sfactor, dfactor);
25555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
25655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
25755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
25855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.sfactor = sfactor;
25955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.dfactor = dfactor;
26055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
26155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(sfactor);
26255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(dfactor);
26355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
264fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendFunc);
26528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
26628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
26728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
26828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
26955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
27055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
27155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum srcRGB;
27255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum dstRGB;
27355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum srcAlpha;
27455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum dstAlpha;
27555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
27655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
27755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
27855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
27955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
28055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
28155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.srcRGB = srcRGB;
28255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.dstRGB = dstRGB;
28355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.srcAlpha = srcAlpha;
28455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.dstAlpha = dstAlpha;
28555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
28655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(srcRGB);
28755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(dstRGB);
28855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(srcAlpha);
28955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(dstAlpha);
29055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
291fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBlendFuncSeparate);
29228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
29328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
29428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
29528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
29655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
29755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
29855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
29955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizeiptr size;
30055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* data;
30155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum usage;
30255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
30355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
30455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBufferData(target, size, data, usage);
3055c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glBufferData(target, size, data, usage);
30655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
30755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
30855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
30955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
31055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.size = size;
31155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.data = data;
31255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.usage = usage;
31355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
31455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
31555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(size);
31655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(data));
31755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(usage);
31855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
31955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
32055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(data), size * sizeof(char));
321fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBufferData);
32228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
32328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
32428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
32528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
32655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
32755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
32855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
32955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLintptr offset;
33055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizeiptr size;
33155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* data;
33255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
33355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
33455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glBufferSubData(target, offset, size, data);
3355c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glBufferSubData(target, offset, size, data);
33655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
33755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
33855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
33955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
34055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.offset = offset;
34155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.size = size;
34255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.data = data;
34355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
34455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
34555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(offset);
34655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(size);
34755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(data));
34855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
34955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
35055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(data), size * sizeof(char));
351fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glBufferSubData);
35228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
35328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
35428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLenum Debug_glCheckFramebufferStatus(GLenum target)
35528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
35655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
35755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
35855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
35955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
36055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
36155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glCheckFramebufferStatus(target));
36255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
36355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
36455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
36555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
36655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
36755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
36855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
36955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
370fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCheckFramebufferStatus);
37155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<GLenum>(ret);
37228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
37328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
37428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glClear(GLbitfield mask)
37528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
37655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
37755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
37855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLbitfield mask;
37955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
38055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
38155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glClear(mask);
38255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
38355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
38455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
38555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mask = mask;
38655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
38755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(mask);
38855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
389fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClear);
39028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
39128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
39228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
39328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
39455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
39555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
39655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf red;
39755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf green;
39855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf blue;
39955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf alpha;
40055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
40155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
40255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glClearColor(red, green, blue, alpha);
40355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
40455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
40555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
40655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.red = red;
40755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.green = green;
40855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.blue = blue;
40955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.alpha = alpha;
41055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
41155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(red));
41255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(green));
41355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(blue));
41455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(alpha));
41555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
416fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearColor);
41728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
41828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
41928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glClearDepthf(GLclampf depth)
42028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
42155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
42255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
42355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf depth;
42455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
42555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
42655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glClearDepthf(depth);
42755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
42855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
42955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
43055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.depth = depth;
43155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
43255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(depth));
43355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
434fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearDepthf);
43528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
43628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
43728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glClearStencil(GLint s)
43828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
43955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
44055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
44155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint s;
44255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
44355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
44455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glClearStencil(s);
44555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
44655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
44755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
44855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.s = s;
44955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
45055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(s);
45155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
452fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glClearStencil);
45328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
45428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
45528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
45628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
45755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
45855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
45955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean red;
46055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean green;
46155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean blue;
46255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean alpha;
46355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
46455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
46555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glColorMask(red, green, blue, alpha);
46655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
46755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
46855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
46955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.red = red;
47055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.green = green;
47155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.blue = blue;
47255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.alpha = alpha;
47355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
47455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(red);
47555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(green);
47655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(blue);
47755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(alpha);
47855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
479fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glColorMask);
48028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
48128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
48228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCompileShader(GLuint shader)
48328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
48455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
48555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
48655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
48755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
48855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
48955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCompileShader(shader);
49055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
49155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
49255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
49355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
49455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
49555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
49655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
497fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompileShader);
49828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
49928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
50028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
50128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
50228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
50355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
50455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
50555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
50655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint level;
50755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum internalformat;
50855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
50955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
51055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint border;
51155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei imageSize;
51255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* data;
51355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
51455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
51555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
51655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
51755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
51855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
51955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
52055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.level = level;
52155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.internalformat = internalformat;
52255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
52355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
52455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.border = border;
52555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.imageSize = imageSize;
52655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.data = data;
52755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
52855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
52955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(level);
53055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(internalformat);
53155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(width);
53255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(height);
53355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(border);
53455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(imageSize);
53555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg7(ToInt(data));
53655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
53755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
538fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompressedTexImage2D);
53928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
54028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
54128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
54228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
54328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
54455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
54555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
54655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
54755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint level;
54855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint xoffset;
54955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint yoffset;
55055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
55155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
55255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum format;
55355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei imageSize;
55455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* data;
55555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
55655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
55755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
55855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
55955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
56055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
56155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
56255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.level = level;
56355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.xoffset = xoffset;
56455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.yoffset = yoffset;
56555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
56655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
56755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.format = format;
56855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.imageSize = imageSize;
56955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.data = data;
57055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
57155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
57255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(level);
57355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(xoffset);
57455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(yoffset);
57555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(width);
57655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(height);
57755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(format);
57855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg7(imageSize);
57955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg8(ToInt(data));
58055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
58155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
582fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCompressedTexSubImage2D);
58328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
58428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
58528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
58628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
58755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
58855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
58955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
59055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint level;
59155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum internalformat;
59255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
59355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
59455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
59555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
59655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint border;
59755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
59855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
59955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
600e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glCopyTexImage2D
601e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glCopyTexImage2D;
602e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
60355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
60455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
60555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
60655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
60755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.level = level;
60855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.internalformat = internalformat;
60955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
61055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
61155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
61255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
61355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.border = border;
61455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
61555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
61655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(level);
61755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(internalformat);
61855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(x);
61955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(y);
62055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(width);
62155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(height);
62255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg7(border);
62355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
624e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glCopyTexImage2D
6255c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    EXTEND_Debug_glCopyTexImage2D;
626e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
627fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCopyTexImage2D);
62828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
62928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
63028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
63128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
63255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
63355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
63455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
63555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint level;
63655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint xoffset;
63755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint yoffset;
63855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
63955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
64055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
64155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
64255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
64355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
64455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
645e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glCopyTexSubImage2D
646e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glCopyTexSubImage2D;
647e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
64855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
64955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
65055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
65155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
65255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.level = level;
65355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.xoffset = xoffset;
65455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.yoffset = yoffset;
65555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
65655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
65755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
65855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
65955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
66055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
66155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(level);
66255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(xoffset);
66355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(yoffset);
66455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(x);
66555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(y);
66655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(width);
66755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg7(height);
66855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
669e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glCopyTexSubImage2D
6705c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    EXTEND_Debug_glCopyTexSubImage2D;
671e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
672fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCopyTexSubImage2D);
67328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
67428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
67528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLuint Debug_glCreateProgram(void)
67628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
67755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
67855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
67955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
68055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
68155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glCreateProgram());
68255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
68355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
68455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
68555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
68655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
68755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
688fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCreateProgram);
68955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<GLuint>(ret);
69028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
69128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
69228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLuint Debug_glCreateShader(GLenum type)
69328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
69455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
69555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
69655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum type;
69755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
69855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
69955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glCreateShader(type));
70055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
70155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
70255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
70355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
70455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.type = type;
70555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
70655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(type);
70755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
708fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCreateShader);
70955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<GLuint>(ret);
71028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
71128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
71228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCullFace(GLenum mode)
71328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
71455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
71555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
71655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum mode;
71755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
71855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
71955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glCullFace(mode);
72055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
72155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
72255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
72355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mode = mode;
72455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
72555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(mode);
72655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
727fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glCullFace);
72828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
72928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
73028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteBuffers(GLsizei n, const GLuint* buffers)
73128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
73255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
73355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
73455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
73555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLuint* buffers;
73655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
73755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
73855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteBuffers(n, buffers);
7395c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glDeleteBuffers(n, buffers);
74055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
74155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
74255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
74355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
74455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.buffers = buffers;
74555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
74655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
74755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(buffers));
74855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
74955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
75055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(buffers), n * sizeof(GLuint));
751fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteBuffers);
75228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
75328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
75428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
75528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
75655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
75755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
75855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
75955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLuint* framebuffers;
76055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
76155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
76255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteFramebuffers(n, framebuffers);
76355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
76455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
76555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
76655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
76755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.framebuffers = framebuffers;
76855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
76955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
77055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(framebuffers));
77155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
77255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
77355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(framebuffers), n * sizeof(GLuint));
774fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteFramebuffers);
77528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
77628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
77728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteProgram(GLuint program)
77828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
77955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
78055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
78155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
78255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
78355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
78455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteProgram(program);
78555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
78655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
78755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
78855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
78955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
79055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
79155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
792fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteProgram);
79328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
79428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
79528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
79628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
79755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
79855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
79955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
80055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLuint* renderbuffers;
80155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
80255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
80355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteRenderbuffers(n, renderbuffers);
80455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
80555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
80655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
80755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
80855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffers = renderbuffers;
80955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
81055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
81155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(renderbuffers));
81255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
81355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
81455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(renderbuffers), n * sizeof(GLuint));
815fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteRenderbuffers);
81628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
81728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
81828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteShader(GLuint shader)
81928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
82055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
82155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
82255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
82355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
82455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
82555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteShader(shader);
82655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
82755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
82855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
82955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
83055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
83155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
83255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
833fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteShader);
83428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
83528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
83628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDeleteTextures(GLsizei n, const GLuint* textures)
83728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
83855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
83955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
84055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
84155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLuint* textures;
84255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
84355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
84455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDeleteTextures(n, textures);
84555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
84655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
84755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
84855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
84955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.textures = textures;
85055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
85155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
85255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(textures));
85355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
85455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
85555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(textures), n * sizeof(GLuint));
856fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDeleteTextures);
85728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
85828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
85928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDepthFunc(GLenum func)
86028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
86155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
86255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
86355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum func;
86455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
86555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
86655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDepthFunc(func);
86755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
86855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
86955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
87055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.func = func;
87155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
87255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(func);
87355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
874fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthFunc);
87528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
87628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
87728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDepthMask(GLboolean flag)
87828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
87955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
88055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
88155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean flag;
88255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
88355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
88455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDepthMask(flag);
88555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
88655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
88755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
88855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.flag = flag;
88955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
89055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(flag);
89155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
892fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthMask);
89328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
89428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
89528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDepthRangef(GLclampf zNear, GLclampf zFar)
89628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
89755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
89855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
89955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf zNear;
90055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf zFar;
90155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
90255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
90355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDepthRangef(zNear, zFar);
90455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
90555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
90655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
90755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zNear = zNear;
90855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zFar = zFar;
90955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
91055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(zNear));
91155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(zFar));
91255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
913fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDepthRangef);
91428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
91528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
91628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDetachShader(GLuint program, GLuint shader)
91728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
91855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
91955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
92055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
92155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
92255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
92355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
92455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDetachShader(program, shader);
92555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
92655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
92755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
92855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
92955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
93055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
93155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
93255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(shader);
93355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
934fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDetachShader);
93528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
93628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
93728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDisable(GLenum cap)
93828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
93955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
94055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
94155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum cap;
94255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
94355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
94455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDisable(cap);
94555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
94655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
94755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
94855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.cap = cap;
94955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
95055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(cap);
95155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
952fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDisable);
95328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
95428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
95528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glDisableVertexAttribArray(GLuint index)
95628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
95755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
95855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
95955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
96028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
96155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
96255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glDisableVertexAttribArray(index);
9635c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glDisableVertexAttribArray(index);
96455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
96555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
96655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
96755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
96855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
96955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(index);
97055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
971fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glDisableVertexAttribArray);
97228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
97328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
97428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glEnable(GLenum cap)
97528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
97655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
97755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
97855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum cap;
97955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
98055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
98155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glEnable(cap);
98255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
98355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
98455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
98555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.cap = cap;
98655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
98755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(cap);
98855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
989fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glEnable);
99028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
99128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
99228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glEnableVertexAttribArray(GLuint index)
99328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
99455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
99555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
99655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
99755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
99855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
99955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glEnableVertexAttribArray(index);
10005c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glEnableVertexAttribArray(index);
100155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
100255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
100355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
100455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
100555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
100655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(index);
100755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1008fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glEnableVertexAttribArray);
100928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
101028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
101128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glFinish(void)
101228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
101355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
101455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
101555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
101655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
101755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glFinish();
101855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
101955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
102055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
102155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
102255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1023fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFinish);
102428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
102528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
102628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glFlush(void)
102728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
102855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
102955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
103055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
103155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
103255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glFlush();
103355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
103455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
103555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
103655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
103755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1038fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFlush);
103928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
104028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
104128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
104228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
104355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
104455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
104555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
104655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum attachment;
104755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum renderbuffertarget;
104855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint renderbuffer;
104955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
105055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
105155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
105255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
105355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
105455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
105555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
105655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.attachment = attachment;
105755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffertarget = renderbuffertarget;
105855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffer = renderbuffer;
105955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
106055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
106155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(attachment);
106255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(renderbuffertarget);
106355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(renderbuffer);
106455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1065fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFramebufferRenderbuffer);
106628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
106728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
106828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
106928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
107055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
107155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
107255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
107355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum attachment;
107455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum textarget;
107555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint texture;
107655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint level;
107755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
107855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
107955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glFramebufferTexture2D(target, attachment, textarget, texture, level);
108055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
108155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
108255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
108355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
108455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.attachment = attachment;
108555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.textarget = textarget;
108655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.texture = texture;
108755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.level = level;
108855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
108955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
109055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(attachment);
109155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(textarget);
109255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(texture);
109355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(level);
109455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1095fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFramebufferTexture2D);
109628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
109728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
109828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glFrontFace(GLenum mode)
109928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
110055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
110155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
110255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum mode;
110355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
110455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
110555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glFrontFace(mode);
110655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
110755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
110855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
110955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mode = mode;
111055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
111155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(mode);
111255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1113fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glFrontFace);
111428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
111528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
111628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGenBuffers(GLsizei n, GLuint* buffers)
111728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
111855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
111955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
112055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
112155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint* buffers;
112255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
112355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
112455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
112555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGenBuffers(n, buffers);
112655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
112755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(buffers), n * sizeof(GLuint));
112855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
112955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
113055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
113155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
113255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.buffers = buffers;
113355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
113455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
113555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(buffers));
113655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
113755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1138fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenBuffers);
113928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
114028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
114128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGenerateMipmap(GLenum target)
114228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
114355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
114455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
114555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
114655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
114755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
114855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGenerateMipmap(target);
114955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
115055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
115155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
115255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
115355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
115455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
115555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1156fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenerateMipmap);
115728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
115828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
115928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGenFramebuffers(GLsizei n, GLuint* framebuffers)
116028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
116155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
116255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
116355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
116455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint* framebuffers;
116555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
116655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
116755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
116855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGenFramebuffers(n, framebuffers);
116955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
117055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(framebuffers), n * sizeof(GLuint));
117155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
117255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
117355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
117455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
117555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.framebuffers = framebuffers;
117655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
117755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
117855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(framebuffers));
117955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
118055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1181fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenFramebuffers);
118228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
118328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
118428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
118528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
118655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
118755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
118855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
118955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint* renderbuffers;
119055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
119155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
119255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
119355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGenRenderbuffers(n, renderbuffers);
119455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
119555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(renderbuffers), n * sizeof(GLuint));
119655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
119755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
119855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
119955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
120055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffers = renderbuffers;
120155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
120255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
120355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(renderbuffers));
120455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
120555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1206fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenRenderbuffers);
120728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
120828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
120928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGenTextures(GLsizei n, GLuint* textures)
121028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
121155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
121255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
121355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
121455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint* textures;
121555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
121655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
121755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
121855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGenTextures(n, textures);
121955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
122055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(textures), n * sizeof(GLuint));
122155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
122255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
122355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
122455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
122555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.textures = textures;
122655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
122755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
122855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(textures));
122955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
123055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1231fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGenTextures);
123228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
123328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
123428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
123528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
123628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
123755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
123855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
123955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
124055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
124155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei bufsize;
124255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* length;
124355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* size;
124455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum* type;
124555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLchar* name;
124655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
124755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
124855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetActiveAttrib(program, index, bufsize, length, size, type, name);
124955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
125055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
125155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
125255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
125355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
125455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.bufsize = bufsize;
125555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
125655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.size = size;
125755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.type = type;
125855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
125955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
126055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
126155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(index);
126255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(bufsize);
126355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(length));
126455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(ToInt(size));
126555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(ToInt(type));
126655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(ToInt(name));
126755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
126855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
126955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
1270fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetActiveAttrib);
127128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
127228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
127328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
127428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
127528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
127655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
127755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
127855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
127955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
128055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei bufsize;
128155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* length;
128255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* size;
128355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum* type;
128455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLchar* name;
128555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
128655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
128755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetActiveUniform(program, index, bufsize, length, size, type, name);
128855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
128955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
129055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
129155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
129255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
129355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.bufsize = bufsize;
129455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
129555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.size = size;
129655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.type = type;
129755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
129855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
129955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
130055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(index);
130155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(bufsize);
130255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(length));
130355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(ToInt(size));
130455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(ToInt(type));
130555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg6(ToInt(name));
130655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
130755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
130855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
1309fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetActiveUniform);
131028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
131128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
131228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
131328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
131428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
131555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
131655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
131755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
131855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei maxcount;
131955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* count;
132055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint* shaders;
132155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
132255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
132355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetAttachedShaders(program, maxcount, count, shaders);
132455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
132555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
132655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
132755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
132855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.maxcount = maxcount;
132955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
133055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shaders = shaders;
133155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
133255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
133355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(maxcount);
133455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(count));
133555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(shaders));
133655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
133755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1338fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetAttachedShaders);
133928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
134028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
134128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liint Debug_glGetAttribLocation(GLuint program, const GLchar* name)
134228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
134355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
134455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
134555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
134655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLchar* name;
134755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
134855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
134955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glGetAttribLocation(program, name));
135055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
135155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
135255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
135355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
135455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
135555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
135655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
135755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
135855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(name));
135955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
136055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
136155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
1362fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetAttribLocation);
136355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<int>(ret);
136428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
136528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
136628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
136728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetBooleanv(GLenum pname, GLboolean* params)
136828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
136955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
137055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
137155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
137255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean* params;
137355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
137455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
137555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetBooleanv(pname, params);
137655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
137755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
137855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
137955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
138055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
138155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
138255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(pname);
138355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(params));
138455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
138555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1386fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetBooleanv);
138728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
138828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
138928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
139028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
139128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
139255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
139355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
139455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
139555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
139655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
139755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
139855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
139955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetBufferParameteriv(target, pname, params);
140055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
140155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
140255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
140355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
140455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
140555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
140655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
140755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
140855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
140955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
141055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
141155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1412fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetBufferParameteriv);
141328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
141428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
141528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLenum Debug_glGetError(void)
141628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
141755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
141855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
141955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
142055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
142155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glGetError());
142255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
142355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
142455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
142555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
142655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
142755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1428fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetError);
142955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<GLenum>(ret);
143028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
143128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
143228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
143328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetFloatv(GLenum pname, GLfloat* params)
143428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
143555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
143655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
143755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
143855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat* params;
143955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
144055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
144155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetFloatv(pname, params);
144255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
144355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
144455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
144555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
144655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
144755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
144855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(pname);
144955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(params));
145055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
145155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1452fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetFloatv);
145328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
145428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
145528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
145628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
145728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
145855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
145955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
146055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
146155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum attachment;
146255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
146355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
146455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
146555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
146655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
146755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
146855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
146955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
147055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
147155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.attachment = attachment;
147255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
147355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
147455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
147555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
147655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(attachment);
147755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(pname);
147855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(params));
147955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
148055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1481fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetFramebufferAttachmentParameteriv);
148228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
148328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
148428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
148528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetIntegerv(GLenum pname, GLint* params)
148628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
148755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
148855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
148955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
149055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
149155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
149255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
149355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetIntegerv(pname, params);
149455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
149555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
149655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
149755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
149855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
149955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
150055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(pname);
150155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(params));
150255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
150355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1504fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetIntegerv);
150528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
150628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
150728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetProgramiv(GLuint program, GLenum pname, GLint* params)
150828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
150955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
151055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
151155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
151255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
151355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
151455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
151555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
151655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
151755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetProgramiv(program, pname, params);
151855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
151955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(params), 1 * sizeof(GLint));
152055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
152155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
152255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
152355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
152455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
152555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
152655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
152755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
152855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
152955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
153055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
153155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1532fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetProgramiv);
153328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
153428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
153528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
153628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
153728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
153855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
153955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
154055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
154155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei bufsize;
154255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* length;
154355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLchar* infolog;
154455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
154555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
154655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
154755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetProgramInfoLog(program, bufsize, length, infolog);
154855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
154955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(infolog), strlen(infolog) * sizeof(GLchar));
155055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
155155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
155255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
155355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
155455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.bufsize = bufsize;
155555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
155655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.infolog = infolog;
155755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
155855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
155955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(bufsize);
156055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(length));
156155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(infolog));
156255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
156355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1564fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetProgramInfoLog);
156528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
156628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
156728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
156828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
156928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
157055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
157155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
157255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
157355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
157455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
157555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
157655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
157755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetRenderbufferParameteriv(target, pname, params);
157855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
157955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
158055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
158155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
158255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
158355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
158455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
158555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
158655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
158755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
158855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
158955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1590fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetRenderbufferParameteriv);
159128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
159228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
159328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
159428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
159555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
159655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
159755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
159855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
159955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
160055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
160155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
160255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
160355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetShaderiv(shader, pname, params);
160455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
160555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(params), 1 * sizeof(GLint));
160655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
160755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
160855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
160955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
161055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
161155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
161255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
161355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
161455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
161555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
161655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
161755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1618fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderiv);
161928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
162028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
162128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
162228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
162328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
162455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
162555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
162655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
162755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei bufsize;
162855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* length;
162955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLchar* infolog;
163055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
163155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
163255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
163355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetShaderInfoLog(shader, bufsize, length, infolog);
163455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
163555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(infolog), strlen(infolog) * sizeof(GLchar));
163655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
163755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
163855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
163955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
164055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.bufsize = bufsize;
164155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
164255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.infolog = infolog;
164355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
164455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
164555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(bufsize);
164655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(length));
164755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(infolog));
164855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
164955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1650fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderInfoLog);
165128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
165228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
165328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
165428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
165528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
165655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
165755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
165855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum shadertype;
165955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum precisiontype;
166055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* range;
166155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* precision;
166255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
166355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
166455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
166555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
166655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
166755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
166855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shadertype = shadertype;
166955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.precisiontype = precisiontype;
167055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.range = range;
167155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.precision = precision;
167255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
167355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shadertype);
167455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(precisiontype);
167555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(range));
167655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(precision));
167755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
167855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1679fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderPrecisionFormat);
168028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
168128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
168228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
168328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
168428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
168555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
168655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
168755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
168855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei bufsize;
168955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei* length;
169055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLchar* source;
169155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
169255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
169355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            nsecs_t c0 = systemTime(timeMode);
169455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetShaderSource(shader, bufsize, length, source);
169555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_time((systemTime(timeMode) - c0) * 1e-6f);
169655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.mutable_data()->assign(reinterpret_cast<const char *>(source), strlen(source) * sizeof(GLchar));
169755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
169855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
169955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
170055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
170155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.bufsize = bufsize;
170255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
170355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.source = source;
170455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
170555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
170655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(bufsize);
170755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(length));
170855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(source));
170955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
171055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1711fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetShaderSource);
171228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
171328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
171428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
171528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liconst GLubyte* Debug_glGetString(GLenum name)
171628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
171755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
171855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
171955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum name;
172055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
172155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
172255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glGetString(name));
172355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
172455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
172555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
172655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
172755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
172855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
172955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(name);
173055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
173155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1732fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetString);
173355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<const GLubyte*>(ret);
173428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
173528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
173628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
173728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
173828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
173955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
174055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
174155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
174255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
174355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat* params;
174455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
174555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
174655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetTexParameterfv(target, pname, params);
174755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
174855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
174955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
175055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
175155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
175255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
175355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
175455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
175555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
175655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
175755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
175855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1759fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetTexParameterfv);
176028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
176128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
176228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
176328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
176428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
176555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
176655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
176755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
176855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
176955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
177055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
177155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
177255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetTexParameteriv(target, pname, params);
177355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
177455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
177555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
177655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
177755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
177855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
177955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
178055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
178155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
178255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
178355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
178455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1785fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetTexParameteriv);
178628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
178728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
178828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
178928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetUniformfv(GLuint program, GLint location, GLfloat* params)
179028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
179155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
179255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
179355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
179455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
179555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat* params;
179655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
179755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
179855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetUniformfv(program, location, params);
179955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
180055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
180155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
180255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
180355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
180455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
180555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
180655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
180755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(location);
180855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
180955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
181055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1811fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformfv);
181228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
181328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
181428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
181528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetUniformiv(GLuint program, GLint location, GLint* params)
181628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
181755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
181855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
181955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
182055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
182155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
182255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
182355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
182455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetUniformiv(program, location, params);
182555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
182655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
182755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
182855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
182955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
183055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
183155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
183255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
183355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(location);
183455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
183555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
183655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1837fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformiv);
183828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
183928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
184028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liint Debug_glGetUniformLocation(GLuint program, const GLchar* name)
184128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
184255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
184355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
184455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
184555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLchar* name;
184655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
184755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
184855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glGetUniformLocation(program, name));
184955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
185055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
185155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
185255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
185355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
185455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.name = name;
185555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
185655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
185755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(name));
185855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
185955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
186055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(name), strlen(name) * sizeof(GLchar));
1861fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetUniformLocation);
186255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return reinterpret_cast<int>(ret);
186328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
186428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
186528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
186628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
186728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
186855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
186955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
187055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
187155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
187255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat* params;
187355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
187455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
187555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetVertexAttribfv(index, pname, params);
187655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
187755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
187855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
187955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
188055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
188155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
188255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
188355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(index);
188455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
188555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
188655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
188755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1888fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribfv);
188928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
189028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
189128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
189228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
189328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
189455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
189555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
189655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
189755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
189855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint* params;
189955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
190055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
190155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetVertexAttribiv(index, pname, params);
190255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
190355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
190455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
190555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
190655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
190755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
190855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
190955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(index);
191055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
191155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
191255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
191355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1914fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribiv);
191528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
191628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
191728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
191828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
191928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
192055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
192155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
192255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint index;
192355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
192455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLvoid** pointer;
192555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
192655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
192755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glGetVertexAttribPointerv(index, pname, pointer);
192855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
192955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
193055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
193155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.index = index;
193255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
193355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pointer = pointer;
193455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
193555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(index);
193655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
193755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(pointer));
193855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
193955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
1940fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glGetVertexAttribPointerv);
194128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
194228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
194328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glHint(GLenum target, GLenum mode)
194428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
194555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
194655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
194755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
194855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum mode;
194955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
195055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
195155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glHint(target, mode);
195255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
195355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
195455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
195555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
195655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mode = mode;
195755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
195855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
195955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(mode);
196055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1961fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glHint);
196228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
196328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
196428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsBuffer(GLuint buffer)
196528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
196655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
196755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
196855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint buffer;
196955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
197055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
197155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsBuffer(buffer));
197255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
197355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
197455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
197555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
197655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.buffer = buffer;
197755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
197855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(buffer);
197955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
1980fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsBuffer);
198155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
198228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
198328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
198428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsEnabled(GLenum cap)
198528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
198655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
198755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
198855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum cap;
198955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
199055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
199155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsEnabled(cap));
199255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
199355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
199455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
199555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
199655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.cap = cap;
199755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
199855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(cap);
199955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2000fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsEnabled);
200155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
200228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
200328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
200428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsFramebuffer(GLuint framebuffer)
200528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
200655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
200755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
200855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint framebuffer;
200955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
201055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
201155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsFramebuffer(framebuffer));
201255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
201355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
201455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
201555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
201655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.framebuffer = framebuffer;
201755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
201855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(framebuffer);
201955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2020fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsFramebuffer);
202155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
202228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
202328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
202428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsProgram(GLuint program)
202528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
202655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
202755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
202855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
202955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
203055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
203155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsProgram(program));
203255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
203355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
203455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
203555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
203655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
203755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
203855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
203955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2040fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsProgram);
204155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
204228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
204328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
204428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsRenderbuffer(GLuint renderbuffer)
204528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
204655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
204755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
204855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint renderbuffer;
204955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
205055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
205155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsRenderbuffer(renderbuffer));
205255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
205355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
205455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
205555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
205655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.renderbuffer = renderbuffer;
205755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
205855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(renderbuffer);
205955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2060fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsRenderbuffer);
206155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
206228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
206328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
206428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsShader(GLuint shader)
206528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
206655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
206755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
206855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint shader;
206955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
207055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
207155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsShader(shader));
207255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
207355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
207455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
207555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
207655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shader = shader;
207755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
207855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(shader);
207955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2080fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsShader);
208155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
208228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
208328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
208428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David LiGLboolean Debug_glIsTexture(GLuint texture)
208528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
208655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
208755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
208855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint texture;
208955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
209055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
209155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            const int * ret = reinterpret_cast<const int *>(_c->glIsTexture(texture));
209255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            msg.set_ret(ToInt(ret));
209355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return ret;
209455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
209555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
209655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.texture = texture;
209755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
209855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(texture);
209955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2100fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glIsTexture);
210155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    return static_cast<GLboolean>(reinterpret_cast<int>(ret));
210228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
210328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
210428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glLineWidth(GLfloat width)
210528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
210655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
210755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
210855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat width;
210955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
211055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
211155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glLineWidth(width);
211255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
211355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
211455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
211555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
211655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
211755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(width));
211855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2119fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glLineWidth);
212028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
212128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
212228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glLinkProgram(GLuint program)
212328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
212455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
212555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
212655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
212755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
212855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
212955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glLinkProgram(program);
213055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
213155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
213255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
213355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
213455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
213555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
213655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2137fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glLinkProgram);
213828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
213928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
214028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glPixelStorei(GLenum pname, GLint param)
214128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
214255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
214355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
214455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
214555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint param;
214655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
214755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
214855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glPixelStorei(pname, param);
214955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
215055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
215155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
215255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
215355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.param = param;
215455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
215555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(pname);
215655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(param);
215755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2158fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glPixelStorei);
215928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
216028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
216128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glPolygonOffset(GLfloat factor, GLfloat units)
216228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
216355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
216455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
216555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat factor;
216655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat units;
216728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
216855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
216955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glPolygonOffset(factor, units);
217055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
217155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
217255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
217355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.factor = factor;
217455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.units = units;
217555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
217655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(factor));
217755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(units));
217855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2179fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glPolygonOffset);
218028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
218128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
2182e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Livoid Debug_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
2183e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li{
2184e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    glesv2debugger::Message msg;
2185e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    struct : public FunctionCall {
2186e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLint x;
2187e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLint y;
2188e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLsizei width;
2189e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLsizei height;
2190e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLenum format;
2191e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLenum type;
2192e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        GLvoid* pixels;
2193e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li
2194e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
2195e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            _c->glReadPixels(x, y, width, height, format, type, pixels);
2196e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glReadPixels
2197e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glReadPixels;
2198e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2199e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            return 0;
2200e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li        }
2201e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    } caller;
2202e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.x = x;
2203e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.y = y;
2204e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.width = width;
2205e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.height = height;
2206e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.format = format;
2207e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.type = type;
2208e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    caller.pixels = pixels;
2209e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li
2210e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg0(x);
2211e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg1(y);
2212e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg2(width);
2213e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg3(height);
2214e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg4(format);
2215e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg5(type);
2216e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    msg.set_arg6(ToInt(pixels));
2217e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li
2218e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    // FIXME: check for pointer usage
2219e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glReadPixels
2220e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    EXTEND_Debug_glReadPixels;
2221e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2222e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glReadPixels);
2223e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li}
2224e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li
222528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glReleaseShaderCompiler(void)
222628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
222755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
222855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
222955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
223055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
223155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glReleaseShaderCompiler();
223255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
223355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
223455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
223555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
223655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2237fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glReleaseShaderCompiler);
223828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
223928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
224028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
224128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
224255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
224355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
224455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
224555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum internalformat;
224655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
224755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
224855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
224955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
225055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glRenderbufferStorage(target, internalformat, width, height);
225155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
225255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
225355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
225455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
225555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.internalformat = internalformat;
225655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
225755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
225855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
225955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
226055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(internalformat);
226155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(width);
226255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(height);
226355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2264fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glRenderbufferStorage);
226528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
226628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
226728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glSampleCoverage(GLclampf value, GLboolean invert)
226828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
226955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
227055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
227155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLclampf value;
227255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean invert;
227355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
227455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
227555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glSampleCoverage(value, invert);
227655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
227755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
227855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
227955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.value = value;
228055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.invert = invert;
228155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
228255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(ToInt(value));
228355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(invert);
228455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2285fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glSampleCoverage);
228628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
228728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
228828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
228928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
229055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
229155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
229255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
229355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
229455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
229555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
229655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
229755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
229855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glScissor(x, y, width, height);
229955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
230055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
230155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
230255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
230355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
230455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
230555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
230655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
230755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(x);
230855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(y);
230955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(width);
231055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(height);
231155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2312fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glScissor);
231328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
231428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
231528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
231628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
231728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
231855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
231955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
232055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei n;
232155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLuint* shaders;
232255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum binaryformat;
232355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* binary;
232455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei length;
232555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
232655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
232755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glShaderBinary(n, shaders, binaryformat, binary, length);
232855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
232955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
233055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
233155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.n = n;
233255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.shaders = shaders;
233355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.binaryformat = binaryformat;
233455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.binary = binary;
233555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.length = length;
233655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
233755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(n);
233855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(shaders));
233955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(binaryformat);
234055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(binary));
234155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(length);
234255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
234355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
2344fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glShaderBinary);
234528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
234628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
23475c425f2eafc3d63e475153586edcf12eb6348aadDavid Livoid Debug_glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length)
23485c425f2eafc3d63e475153586edcf12eb6348aadDavid Li{
23495c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    glesv2debugger::Message msg;
23505c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    struct : public FunctionCall {
23515c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        GLuint shader;
23525c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        GLsizei count;
23535c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        const GLchar** string;
23545c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        const GLint* length;
23555c425f2eafc3d63e475153586edcf12eb6348aadDavid Li
23565c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
23575c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            _c->glShaderSource(shader, count, string, length);
2358e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glShaderSource
2359e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glShaderSource;
2360e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
23615c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            return 0;
23625c425f2eafc3d63e475153586edcf12eb6348aadDavid Li        }
23635c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    } caller;
23645c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    caller.shader = shader;
23655c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    caller.count = count;
23665c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    caller.string = string;
23675c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    caller.length = length;
23685c425f2eafc3d63e475153586edcf12eb6348aadDavid Li
23695c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    msg.set_arg0(shader);
23705c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    msg.set_arg1(count);
23715c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    msg.set_arg2(ToInt(string));
23725c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    msg.set_arg3(ToInt(length));
23735c425f2eafc3d63e475153586edcf12eb6348aadDavid Li
23745c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    // FIXME: check for pointer usage
2375e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glShaderSource
23765c425f2eafc3d63e475153586edcf12eb6348aadDavid Li    EXTEND_Debug_glShaderSource;
2377e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2378fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glShaderSource);
23795c425f2eafc3d63e475153586edcf12eb6348aadDavid Li}
23805c425f2eafc3d63e475153586edcf12eb6348aadDavid Li
238128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilFunc(GLenum func, GLint ref, GLuint mask)
238228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
238355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
238455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
238555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum func;
238655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint ref;
238755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint mask;
238855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
238955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
239055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilFunc(func, ref, mask);
239155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
239255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
239355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
239455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.func = func;
239555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.ref = ref;
239655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mask = mask;
239755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
239855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(func);
239955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ref);
240055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(mask);
240155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2402fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilFunc);
240328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
240428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
240528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
240628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
240755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
240855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
240955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum face;
241055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum func;
241155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint ref;
241255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint mask;
241355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
241455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
241555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilFuncSeparate(face, func, ref, mask);
241655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
241755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
241855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
241955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.face = face;
242055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.func = func;
242155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.ref = ref;
242255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mask = mask;
242355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
242455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(face);
242555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(func);
242655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ref);
242755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(mask);
242855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2429fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilFuncSeparate);
243028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
243128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
243228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilMask(GLuint mask)
243328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
243455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
243555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
243655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint mask;
243755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
243855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
243955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilMask(mask);
244055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
244155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
244255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
244355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mask = mask;
244455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
244555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(mask);
244655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2447fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilMask);
244828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
244928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
245028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilMaskSeparate(GLenum face, GLuint mask)
245128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
245255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
245355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
245455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum face;
245555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint mask;
245655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
245755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
245855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilMaskSeparate(face, mask);
245955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
246055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
246155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
246255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.face = face;
246355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.mask = mask;
246455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
246555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(face);
246655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(mask);
246755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2468fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilMaskSeparate);
246928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
247028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
247128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
247228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
247355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
247455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
247555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum fail;
247655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum zfail;
247755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum zpass;
247855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
247955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
248055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilOp(fail, zfail, zpass);
248155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
248255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
248355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
248455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.fail = fail;
248555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zfail = zfail;
248655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zpass = zpass;
248755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
248855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(fail);
248955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(zfail);
249055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(zpass);
249155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2492fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilOp);
249328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
249428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
249528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
249628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
249755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
249855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
249955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum face;
250055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum fail;
250155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum zfail;
250255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum zpass;
250355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
250455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
250555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glStencilOpSeparate(face, fail, zfail, zpass);
250655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
250755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
250855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
250955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.face = face;
251055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.fail = fail;
251155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zfail = zfail;
251255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.zpass = zpass;
251355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
251455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(face);
251555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(fail);
251655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(zfail);
251755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(zpass);
251855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2519fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glStencilOpSeparate);
2520fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li}
2521fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2522fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Livoid Debug_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
2523fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li{
2524fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    glesv2debugger::Message msg;
2525fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    struct : public FunctionCall {
2526fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum target;
2527fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint level;
2528fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint internalformat;
2529fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLsizei width;
2530fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLsizei height;
2531fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint border;
2532fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum format;
2533fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum type;
2534fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        const GLvoid* pixels;
2535fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2536fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
2537fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li            _c->glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
2538e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glTexImage2D
2539e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glTexImage2D;
2540e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2541fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li            return 0;
2542fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        }
2543fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    } caller;
2544fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.target = target;
2545fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.level = level;
2546fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.internalformat = internalformat;
2547fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.width = width;
2548fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.height = height;
2549fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.border = border;
2550fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.format = format;
2551fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.type = type;
2552fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.pixels = pixels;
2553fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2554fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg0(target);
2555fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg1(level);
2556fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg2(internalformat);
2557fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg3(width);
2558fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg4(height);
2559fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg5(border);
2560fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg6(format);
2561fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg7(type);
2562fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg8(ToInt(pixels));
2563fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2564fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    // FIXME: check for pointer usage
2565e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glTexImage2D
2566fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    EXTEND_Debug_glTexImage2D;
2567e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2568fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexImage2D);
256928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
257028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
257128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameterf(GLenum target, GLenum pname, GLfloat param)
257228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
257355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
257455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
257555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
257655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
257755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat param;
257855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
257955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
258055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glTexParameterf(target, pname, param);
258155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
258255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
258355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
258455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
258555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
258655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.param = param;
258755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
258855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
258955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
259055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(param));
259155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2592fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameterf);
259328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
259428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
259528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
259628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
259728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
259855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
259955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
260055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
260155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
260255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* params;
260355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
260455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
260555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glTexParameterfv(target, pname, params);
260655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
260755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
260855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
260955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
261055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
261155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
261255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
261355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
261455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
261555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
261655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
261755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
2618fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameterfv);
261928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
262028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
262128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameteri(GLenum target, GLenum pname, GLint param)
262228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
262355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
262455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
262555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
262655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
262755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint param;
262855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
262955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
263055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glTexParameteri(target, pname, param);
263155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
263255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
263355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
263455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
263555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
263655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.param = param;
263755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
263855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
263955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
264055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(param);
264155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2642fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameteri);
264328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
264428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
264528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
264628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
264728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
264855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
264955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
265055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum target;
265155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum pname;
265255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLint* params;
265355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
265455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
265555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glTexParameteriv(target, pname, params);
265655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
265755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
265855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
265955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.target = target;
266055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.pname = pname;
266155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.params = params;
266255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
266355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(target);
266455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(pname);
266555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(params));
266655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
266755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
2668fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexParameteriv);
2669fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li}
2670fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2671fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Livoid Debug_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
2672fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li{
2673fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    glesv2debugger::Message msg;
2674fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    struct : public FunctionCall {
2675fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum target;
2676fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint level;
2677fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint xoffset;
2678fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLint yoffset;
2679fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLsizei width;
2680fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLsizei height;
2681fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum format;
2682fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        GLenum type;
2683fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        const GLvoid* pixels;
2684fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2685fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
2686fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li            _c->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
2687e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_AFTER_CALL_Debug_glTexSubImage2D
2688e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li            EXTEND_AFTER_CALL_Debug_glTexSubImage2D;
2689e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2690fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li            return 0;
2691fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li        }
2692fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    } caller;
2693fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.target = target;
2694fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.level = level;
2695fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.xoffset = xoffset;
2696fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.yoffset = yoffset;
2697fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.width = width;
2698fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.height = height;
2699fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.format = format;
2700fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.type = type;
2701fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    caller.pixels = pixels;
2702fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2703fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg0(target);
2704fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg1(level);
2705fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg2(xoffset);
2706fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg3(yoffset);
2707fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg4(width);
2708fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg5(height);
2709fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg6(format);
2710fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg7(type);
2711fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    msg.set_arg8(ToInt(pixels));
2712fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li
2713fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    // FIXME: check for pointer usage
2714e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#ifdef EXTEND_Debug_glTexSubImage2D
2715fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    EXTEND_Debug_glTexSubImage2D;
2716e2ad4d0e3748c2f0180d24d1b3468aac79adac3aDavid Li#endif
2717fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glTexSubImage2D);
271828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
271928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
272028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform1f(GLint location, GLfloat x)
272128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
272255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
272355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
272455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
272555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
272655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
272755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
272855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform1f(location, x);
272955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
273055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
273155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
273255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
273355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
273455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
273555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
273655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
273755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2738fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1f);
273928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
274028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
274128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
274228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
274355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
274455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
274555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
274655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
274755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* v;
274855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
274955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
275055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform1fv(location, count, v);
275155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
275255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
275355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
275455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
275555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
275655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
275755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
275855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
275955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
276055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
276155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
276255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
276355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 1*count * sizeof(GLfloat));
2764fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1fv);
276528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
276628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
276728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform1i(GLint location, GLint x)
276828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
276955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
277055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
277155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
277255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
277355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
277455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
277555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform1i(location, x);
277655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
277755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
277855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
277955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
278055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
278155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
278255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
278355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(x);
278455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2785fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1i);
278628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
278728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
278828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform1iv(GLint location, GLsizei count, const GLint* v)
278928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
279055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
279155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
279255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
279355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
279455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLint* v;
279555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
279655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
279755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform1iv(location, count, v);
279855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
279955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
280055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
280155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
280255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
280355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
280455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
280555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
280655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
280755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
280855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
280955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
281055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 1*count * sizeof(GLint));
2811fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform1iv);
281228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
281328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
281428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform2f(GLint location, GLfloat x, GLfloat y)
281528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
281655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
281755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
281855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
281955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
282055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
282155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
282255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
282355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform2f(location, x, y);
282455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
282555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
282655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
282755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
282855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
282955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
283055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
283155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
283255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
283355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
283455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2835fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2f);
283628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
283728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
283828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
283928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
284055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
284155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
284255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
284355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
284455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* v;
284555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
284655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
284755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform2fv(location, count, v);
284855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
284955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
285055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
285155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
285255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
285355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
285455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
285555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
285655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
285755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
285855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
285955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
286055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 2*count * sizeof(GLfloat));
2861fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2fv);
286228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
286328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
286428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform2i(GLint location, GLint x, GLint y)
286528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
286655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
286755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
286855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
286955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
287055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
287155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
287255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
287355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform2i(location, x, y);
287455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
287555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
287655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
287755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
287855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
287955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
288055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
288155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
288255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(x);
288355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(y);
288455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2885fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2i);
288628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
288728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
288828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform2iv(GLint location, GLsizei count, const GLint* v)
288928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
289055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
289155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
289255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
289355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
289455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLint* v;
289555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
289655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
289755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform2iv(location, count, v);
289855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
289955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
290055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
290155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
290255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
290355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
290455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
290555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
290655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
290755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
290855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
290955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
291055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 2*count * sizeof(GLint));
2911fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform2iv);
291228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
291328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
291428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
291528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
291655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
291755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
291855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
291955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
292055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
292155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat z;
292255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
292355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
292455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform3f(location, x, y, z);
292555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
292655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
292755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
292855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
292955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
293055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
293155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
293255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
293355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
293455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
293555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
293655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(z));
293755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2938fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3f);
293928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
294028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
294128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
294228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
294355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
294455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
294555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
294655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
294755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* v;
294855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
294955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
295055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform3fv(location, count, v);
295155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
295255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
295355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
295455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
295555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
295655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
295755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
295855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
295955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
296055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
296155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
296255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
296355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 3*count * sizeof(GLfloat));
2964fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3fv);
296528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
296628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
296728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform3i(GLint location, GLint x, GLint y, GLint z)
296828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
296955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
297055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
297155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
297255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
297355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
297455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint z;
297555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
297655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
297755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform3i(location, x, y, z);
297855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
297955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
298055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
298155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
298255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
298355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
298455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
298555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
298655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
298755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(x);
298855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(y);
298955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(z);
299055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
2991fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3i);
299228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
299328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
299428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform3iv(GLint location, GLsizei count, const GLint* v)
299528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
299655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
299755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
299855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
299955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
300055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLint* v;
300155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
300255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
300355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform3iv(location, count, v);
300455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
300555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
300655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
300755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
300855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
300955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
301055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
301155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
301255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
301355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
301455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
301555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
301655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 3*count * sizeof(GLint));
3017fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform3iv);
301828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
301928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
302028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
302128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
302255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
302355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
302455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
302555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
302655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
302755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat z;
302855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat w;
302955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
303055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
303155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform4f(location, x, y, z, w);
303255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
303355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
303455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
303555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
303655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
303755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
303855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
303955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.w = w;
304055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
304155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
304255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
304355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
304455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(z));
304555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(ToInt(w));
304655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3047fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4f);
304828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
304928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
305028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
305128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
305255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
305355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
305455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
305555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
305655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* v;
305755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
305855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
305955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform4fv(location, count, v);
306055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
306155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
306255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
306355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
306455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
306555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
306655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
306755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
306855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
306955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
307055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
307155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
307255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 4*count * sizeof(GLfloat));
3073fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4fv);
307428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
307528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
307628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
307728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
307855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
307955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
308055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
308155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
308255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
308355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint z;
308455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint w;
308555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
308655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
308755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform4i(location, x, y, z, w);
308855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
308955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
309055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
309155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
309255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
309355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
309455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
309555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.w = w;
309655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
309755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
309855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(x);
309955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(y);
310055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(z);
310155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(w);
310255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3103fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4i);
310428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
310528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
310628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniform4iv(GLint location, GLsizei count, const GLint* v)
310728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
310855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
310955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
311055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
311155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
311255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLint* v;
311355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
311455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
311555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniform4iv(location, count, v);
311655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
311755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
311855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
311955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
312055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
312155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.v = v;
312255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
312355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
312455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
312555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(v));
312655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
312755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
312855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(v), 4*count * sizeof(GLint));
3129fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniform4iv);
313028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
313128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
313228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
313328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
313455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
313555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
313655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
313755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
313855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean transpose;
313955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* value;
314055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
314155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
314255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniformMatrix2fv(location, count, transpose, value);
314355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
314455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
314555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
314655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
314755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
314855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.transpose = transpose;
314955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.value = value;
315055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
315155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
315255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
315355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(transpose);
315455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(value));
315555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
315655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
315755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 4*count * sizeof(GLfloat));
3158fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix2fv);
315928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
316028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
316128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
316228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
316355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
316455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
316555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
316655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
316755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean transpose;
316855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* value;
316955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
317055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
317155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniformMatrix3fv(location, count, transpose, value);
317255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
317355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
317455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
317555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
317655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
317755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.transpose = transpose;
317855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.value = value;
317955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
318055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
318155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
318255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(transpose);
318355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(value));
318455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
318555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
318655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 9*count * sizeof(GLfloat));
3187fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix3fv);
318828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
318928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
319028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
319128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
319255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
319355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
319455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint location;
319555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei count;
319655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean transpose;
319755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* value;
319855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
319955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
320055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUniformMatrix4fv(location, count, transpose, value);
320155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
320255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
320355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
320455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.location = location;
320555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.count = count;
320655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.transpose = transpose;
320755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.value = value;
320855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
320955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(location);
321055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(count);
321155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(transpose);
321255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(value));
321355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
321455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
321555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(value), 16*count * sizeof(GLfloat));
3216fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUniformMatrix4fv);
321728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
321828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
321928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glUseProgram(GLuint program)
322028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
322155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
322255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
322355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
322455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
322555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
322655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glUseProgram(program);
32275c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glUseProgram(program);
322855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
322955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
323055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
323155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
323255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
323355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
323455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3235fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glUseProgram);
323628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
323728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
323828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glValidateProgram(GLuint program)
323928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
324055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
324155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
324255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint program;
324355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
324455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
324555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glValidateProgram(program);
324655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
324755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
324855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
324955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.program = program;
325055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
325155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(program);
325255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3253fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glValidateProgram);
325428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
325528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
325628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib1f(GLuint indx, GLfloat x)
325728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
325855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
325955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
326055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
326155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
326255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
326355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
326455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib1f(indx, x);
326555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
326655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
326755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
326855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
326955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
327055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
327155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
327255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
327355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3274fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib1f);
327528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
327628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
327728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib1fv(GLuint indx, const GLfloat* values)
327828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
327955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
328055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
328155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
328255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* values;
328355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
328455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
328555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib1fv(indx, values);
328655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
328755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
328855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
328955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
329055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.values = values;
329155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
329255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
329355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(values));
329455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
329555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
329655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 1 * sizeof(GLfloat));
3297fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib1fv);
329828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
329928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
330028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
330128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
330255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
330355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
330455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
330555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
330655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
330755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
330855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
330955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib2f(indx, x, y);
331055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
331155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
331255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
331355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
331455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
331555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
331655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
331755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
331855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
331955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
332055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3321fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib2f);
332228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
332328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
332428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib2fv(GLuint indx, const GLfloat* values)
332528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
332655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
332755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
332855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
332955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* values;
333055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
333155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
333255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib2fv(indx, values);
333355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
333455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
333555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
333655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
333755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.values = values;
333855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
333955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
334055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(values));
334155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
334255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
334355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 2 * sizeof(GLfloat));
3344fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib2fv);
334528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
334628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
334728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
334828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
334955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
335055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
335155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
335255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
335355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
335455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat z;
335555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
335655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
335755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib3f(indx, x, y, z);
335855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
335955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
336055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
336155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
336255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
336355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
336455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
336555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
336655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
336755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
336855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
336955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(z));
337055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3371fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib3f);
337228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
337328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
337428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib3fv(GLuint indx, const GLfloat* values)
337528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
337655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
337755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
337855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
337955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* values;
338055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
338155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
338255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib3fv(indx, values);
338355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
338455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
338555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
338655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
338755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.values = values;
338855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
338955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
339055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(values));
339155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
339255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
339355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 3 * sizeof(GLfloat));
3394fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib3fv);
339528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
339628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
339728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
339828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
339955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
340055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
340155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
340255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat x;
340355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat y;
340455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat z;
340555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLfloat w;
340655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
340755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
340855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib4f(indx, x, y, z, w);
340955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
341055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
341155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
341255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
341355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
341455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
341555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.z = z;
341655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.w = w;
341755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
341855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
341955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(x));
342055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(ToInt(y));
342155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(ToInt(z));
342255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(ToInt(w));
342355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3424fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib4f);
342528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
342628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
342728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttrib4fv(GLuint indx, const GLfloat* values)
342828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
342955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
343055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
343155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
343255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLfloat* values;
343355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
343455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
343555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttrib4fv(indx, values);
343655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
343755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
343855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
343955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
344055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.values = values;
344155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
344255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
344355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(ToInt(values));
344455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
344555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
344655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.mutable_data()->assign(reinterpret_cast<const char *>(values), 4 * sizeof(GLfloat));
3447fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttrib4fv);
344828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
344928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
345028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: this function has pointers, it should be hand written
345128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
345228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
345355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
345455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
345555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLuint indx;
345655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint size;
345755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLenum type;
345855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLboolean normalized;
345955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei stride;
346055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const GLvoid* ptr;
346155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
346255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
346355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
34645c425f2eafc3d63e475153586edcf12eb6348aadDavid Li            getDbgContextThreadSpecific()->glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
346555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
346655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
346755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
346855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.indx = indx;
346955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.size = size;
347055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.type = type;
347155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.normalized = normalized;
347255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.stride = stride;
347355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.ptr = ptr;
347455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
347555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(indx);
347655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(size);
347755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(type);
347855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(normalized);
347955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg4(stride);
348055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg5(ToInt(ptr));
348155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
348255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    // FIXME: check for pointer usage
3483fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glVertexAttribPointer);
348428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
348528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
348628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
348728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li{
348855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    glesv2debugger::Message msg;
348955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    struct : public FunctionCall {
349055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint x;
349155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLint y;
349255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei width;
349355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        GLsizei height;
349455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
349555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
349655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            _c->glViewport(x, y, width, height);
349755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li            return 0;
349855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li        }
349955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    } caller;
350055c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.x = x;
350155c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.y = y;
350255c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.width = width;
350355c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    caller.height = height;
350455c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
350555c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg0(x);
350655c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg1(y);
350755c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg2(width);
350855c94ccd495aa19784cb4ca9a1fe51fad9631542David Li    msg.set_arg3(height);
350955c94ccd495aa19784cb4ca9a1fe51fad9631542David Li
3510fbfc703c6e77e3441d8833644278a5a79f3ca8e3David Li    int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_glViewport);
351128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li}
351228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li
351328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Li// FIXME: the following functions should be written by hand
351428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
351528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
351628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
351728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
351828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
351928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetBooleanv(GLenum pname, GLboolean* params);
352028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
352128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetFloatv(GLenum pname, GLfloat* params);
352228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
352328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetIntegerv(GLenum pname, GLint* params);
352428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
352528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
352628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
352728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
352828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
352928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Liconst GLubyte* Debug_glGetString(GLenum name);
353028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
353128ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
353228ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetUniformfv(GLuint program, GLint location, GLfloat* params);
353328ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetUniformiv(GLuint program, GLint location, GLint* params);
353428ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
353528ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
353628ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
353728ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
353828ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
353928ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glTexParameteriv(GLenum target, GLenum pname, const GLint* params);
354028ca2abb1ab92b2cc3a5c9119ec2f697ec3401b2David Livoid Debug_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
3541