// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// frame_capture_replay_autogen.cpp:
//   Util function to dispatch captured GL calls through Context and replay them.

#include "angle_gl.h"

#include "common/debug.h"
#include "libANGLE/Context.h"
#include "libANGLE/Context.inl.h"
#include "libANGLE/FrameCapture.h"

using namespace gl;

namespace angle
{

void FrameCapture::ReplayCall(gl::Context *context,
                              ReplayContext *replayContext,
                              const CallCapture &call)
{
    const ParamBuffer &params = call.params;
    switch (call.entryPoint)
    {
        case gl::EntryPoint::ActiveShaderProgram:
            context->activeShaderProgram(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal,
                params.getParam("programPacked", ParamType::TShaderProgramID, 1)
                    .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::ActiveTexture:
            context->activeTexture(
                params.getParam("texture", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::AlphaFunc:
            context->alphaFunc(
                params.getParam("funcPacked", ParamType::TAlphaTestFunc, 0).value.AlphaTestFuncVal,
                params.getParam("ref", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::AlphaFuncx:
            context->alphaFuncx(
                params.getParam("funcPacked", ParamType::TAlphaTestFunc, 0).value.AlphaTestFuncVal,
                params.getParam("ref", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::AttachShader:
            context->attachShader(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal,
                                  params.getParam("shaderPacked", ParamType::TShaderProgramID, 1)
                                      .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::BeginQuery:
            context->beginQuery(
                params.getParam("targetPacked", ParamType::TQueryType, 0).value.QueryTypeVal,
                params.getParam("idPacked", ParamType::TQueryID, 1).value.QueryIDVal);
            break;
        case gl::EntryPoint::BeginTransformFeedback:
            context->beginTransformFeedback(
                params.getParam("primitiveModePacked", ParamType::TPrimitiveMode, 0)
                    .value.PrimitiveModeVal);
            break;
        case gl::EntryPoint::BindAttribLocation:
            context->bindAttribLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::BindBuffer:
            context->bindBuffer(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 1).value.BufferIDVal);
            break;
        case gl::EntryPoint::BindBufferBase:
            context->bindBufferBase(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 2).value.BufferIDVal);
            break;
        case gl::EntryPoint::BindBufferRange:
            context->bindBufferRange(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 2).value.BufferIDVal,
                params.getParam("offset", ParamType::TGLintptr, 3).value.GLintptrVal,
                params.getParam("size", ParamType::TGLsizeiptr, 4).value.GLsizeiptrVal);
            break;
        case gl::EntryPoint::BindFragDataLocation:
            context->bindFragDataLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("color", ParamType::TGLuint, 1).value.GLuintVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::BindFragDataLocationIndexed:
            context->bindFragDataLocationIndexed(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("colorNumber", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("index", ParamType::TGLuint, 2).value.GLuintVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 3)));
            break;
        case gl::EntryPoint::BindFramebuffer:
            context->bindFramebuffer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("framebufferPacked", ParamType::TFramebufferID, 1)
                    .value.FramebufferIDVal);
            break;
        case gl::EntryPoint::BindImageTexture:
            context->bindImageTexture(
                params.getParam("unit", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("texturePacked", ParamType::TTextureID, 1).value.TextureIDVal,
                params.getParam("level", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("layered", ParamType::TGLboolean, 3).value.GLbooleanVal,
                params.getParam("layer", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("access", ParamType::TGLenum, 5).value.GLenumVal,
                params.getParam("format", ParamType::TGLenum, 6).value.GLenumVal);
            break;
        case gl::EntryPoint::BindProgramPipeline:
            context->bindProgramPipeline(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal);
            break;
        case gl::EntryPoint::BindRenderbuffer:
            context->bindRenderbuffer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("renderbufferPacked", ParamType::TRenderbufferID, 1)
                    .value.RenderbufferIDVal);
            break;
        case gl::EntryPoint::BindSampler:
            context->bindSampler(
                params.getParam("unit", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("samplerPacked", ParamType::TSamplerID, 1).value.SamplerIDVal);
            break;
        case gl::EntryPoint::BindTexture:
            context->bindTexture(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("texturePacked", ParamType::TTextureID, 1).value.TextureIDVal);
            break;
        case gl::EntryPoint::BindTransformFeedback:
            context->bindTransformFeedback(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("idPacked", ParamType::TTransformFeedbackID, 1)
                    .value.TransformFeedbackIDVal);
            break;
        case gl::EntryPoint::BindVertexArray:
            context->bindVertexArray(params.getParam("arrayPacked", ParamType::TVertexArrayID, 0)
                                         .value.VertexArrayIDVal);
            break;
        case gl::EntryPoint::BindVertexBuffer:
            context->bindVertexBuffer(
                params.getParam("bindingindex", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 1).value.BufferIDVal,
                params.getParam("offset", ParamType::TGLintptr, 2).value.GLintptrVal,
                params.getParam("stride", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::BlendBarrier:
            context->blendBarrier();
            break;
        case gl::EntryPoint::BlendColor:
            context->blendColor(params.getParam("red", ParamType::TGLfloat, 0).value.GLfloatVal,
                                params.getParam("green", ParamType::TGLfloat, 1).value.GLfloatVal,
                                params.getParam("blue", ParamType::TGLfloat, 2).value.GLfloatVal,
                                params.getParam("alpha", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::BlendEquation:
            context->blendEquation(params.getParam("mode", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendEquationSeparate:
            context->blendEquationSeparate(
                params.getParam("modeRGB", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("modeAlpha", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendEquationSeparatei:
            context->blendEquationSeparatei(
                params.getParam("buf", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("modeRGB", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("modeAlpha", ParamType::TGLenum, 2).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendEquationi:
            context->blendEquationi(params.getParam("buf", ParamType::TGLuint, 0).value.GLuintVal,
                                    params.getParam("mode", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendFunc:
            context->blendFunc(params.getParam("sfactor", ParamType::TGLenum, 0).value.GLenumVal,
                               params.getParam("dfactor", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendFuncSeparate:
            context->blendFuncSeparate(
                params.getParam("sfactorRGB", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("dfactorRGB", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("sfactorAlpha", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("dfactorAlpha", ParamType::TGLenum, 3).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendFuncSeparatei:
            context->blendFuncSeparatei(
                params.getParam("buf", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("srcRGB", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("dstRGB", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("srcAlpha", ParamType::TGLenum, 3).value.GLenumVal,
                params.getParam("dstAlpha", ParamType::TGLenum, 4).value.GLenumVal);
            break;
        case gl::EntryPoint::BlendFunci:
            context->blendFunci(params.getParam("buf", ParamType::TGLuint, 0).value.GLuintVal,
                                params.getParam("src", ParamType::TGLenum, 1).value.GLenumVal,
                                params.getParam("dst", ParamType::TGLenum, 2).value.GLenumVal);
            break;
        case gl::EntryPoint::BlitFramebuffer:
            context->blitFramebuffer(
                params.getParam("srcX0", ParamType::TGLint, 0).value.GLintVal,
                params.getParam("srcY0", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("srcX1", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("srcY1", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("dstX0", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("dstY0", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("dstX1", ParamType::TGLint, 6).value.GLintVal,
                params.getParam("dstY1", ParamType::TGLint, 7).value.GLintVal,
                params.getParam("mask", ParamType::TGLbitfield, 8).value.GLbitfieldVal,
                params.getParam("filter", ParamType::TGLenum, 9).value.GLenumVal);
            break;
        case gl::EntryPoint::BufferData:
            context->bufferData(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("size", ParamType::TGLsizeiptr, 1).value.GLsizeiptrVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 2)),
                params.getParam("usagePacked", ParamType::TBufferUsage, 3).value.BufferUsageVal);
            break;
        case gl::EntryPoint::BufferStorage:
            context->bufferStorage(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("size", ParamType::TGLsizeiptr, 1).value.GLsizeiptrVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 2)),
                params.getParam("flags", ParamType::TGLbitfield, 3).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::BufferSubData:
            context->bufferSubData(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("offset", ParamType::TGLintptr, 1).value.GLintptrVal,
                params.getParam("size", ParamType::TGLsizeiptr, 2).value.GLsizeiptrVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 3)));
            break;
        case gl::EntryPoint::CheckFramebufferStatus:
            context->checkFramebufferStatus(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::Clear:
            context->clear(params.getParam("mask", ParamType::TGLbitfield, 0).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::ClearBufferfi:
            context->clearBufferfi(
                params.getParam("buffer", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("drawbuffer", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("depth", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("stencil", ParamType::TGLint, 3).value.GLintVal);
            break;
        case gl::EntryPoint::ClearBufferfv:
            context->clearBufferfv(
                params.getParam("buffer", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("drawbuffer", ParamType::TGLint, 1).value.GLintVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::ClearBufferiv:
            context->clearBufferiv(
                params.getParam("buffer", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("drawbuffer", ParamType::TGLint, 1).value.GLintVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("value", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::ClearBufferuiv:
            context->clearBufferuiv(
                params.getParam("buffer", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("drawbuffer", ParamType::TGLint, 1).value.GLintVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("value", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::ClearColor:
            context->clearColor(params.getParam("red", ParamType::TGLfloat, 0).value.GLfloatVal,
                                params.getParam("green", ParamType::TGLfloat, 1).value.GLfloatVal,
                                params.getParam("blue", ParamType::TGLfloat, 2).value.GLfloatVal,
                                params.getParam("alpha", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::ClearColorx:
            context->clearColorx(params.getParam("red", ParamType::TGLfixed, 0).value.GLfixedVal,
                                 params.getParam("green", ParamType::TGLfixed, 1).value.GLfixedVal,
                                 params.getParam("blue", ParamType::TGLfixed, 2).value.GLfixedVal,
                                 params.getParam("alpha", ParamType::TGLfixed, 3).value.GLfixedVal);
            break;
        case gl::EntryPoint::ClearDepthf:
            context->clearDepthf(params.getParam("d", ParamType::TGLfloat, 0).value.GLfloatVal);
            break;
        case gl::EntryPoint::ClearDepthx:
            context->clearDepthx(params.getParam("depth", ParamType::TGLfixed, 0).value.GLfixedVal);
            break;
        case gl::EntryPoint::ClearStencil:
            context->clearStencil(params.getParam("s", ParamType::TGLint, 0).value.GLintVal);
            break;
        case gl::EntryPoint::ClientActiveTexture:
            context->clientActiveTexture(
                params.getParam("texture", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::ClientWaitSync:
            context->clientWaitSync(
                params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal,
                params.getParam("flags", ParamType::TGLbitfield, 1).value.GLbitfieldVal,
                params.getParam("timeout", ParamType::TGLuint64, 2).value.GLuint64Val);
            break;
        case gl::EntryPoint::ClipPlanef:
            context->clipPlanef(params.getParam("p", ParamType::TGLenum, 0).value.GLenumVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("eqn", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::ClipPlanex:
            context->clipPlanex(params.getParam("plane", ParamType::TGLenum, 0).value.GLenumVal,
                                replayContext->getAsConstPointer<const GLfixed *>(params.getParam(
                                    "equation", ParamType::TGLfixedConstPointer, 1)));
            break;
        case gl::EntryPoint::Color4f:
            context->color4f(params.getParam("red", ParamType::TGLfloat, 0).value.GLfloatVal,
                             params.getParam("green", ParamType::TGLfloat, 1).value.GLfloatVal,
                             params.getParam("blue", ParamType::TGLfloat, 2).value.GLfloatVal,
                             params.getParam("alpha", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::Color4ub:
            context->color4ub(params.getParam("red", ParamType::TGLubyte, 0).value.GLubyteVal,
                              params.getParam("green", ParamType::TGLubyte, 1).value.GLubyteVal,
                              params.getParam("blue", ParamType::TGLubyte, 2).value.GLubyteVal,
                              params.getParam("alpha", ParamType::TGLubyte, 3).value.GLubyteVal);
            break;
        case gl::EntryPoint::Color4x:
            context->color4x(params.getParam("red", ParamType::TGLfixed, 0).value.GLfixedVal,
                             params.getParam("green", ParamType::TGLfixed, 1).value.GLfixedVal,
                             params.getParam("blue", ParamType::TGLfixed, 2).value.GLfixedVal,
                             params.getParam("alpha", ParamType::TGLfixed, 3).value.GLfixedVal);
            break;
        case gl::EntryPoint::ColorMask:
            context->colorMask(
                params.getParam("red", ParamType::TGLboolean, 0).value.GLbooleanVal,
                params.getParam("green", ParamType::TGLboolean, 1).value.GLbooleanVal,
                params.getParam("blue", ParamType::TGLboolean, 2).value.GLbooleanVal,
                params.getParam("alpha", ParamType::TGLboolean, 3).value.GLbooleanVal);
            break;
        case gl::EntryPoint::ColorMaski:
            context->colorMaski(params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                                params.getParam("r", ParamType::TGLboolean, 1).value.GLbooleanVal,
                                params.getParam("g", ParamType::TGLboolean, 2).value.GLbooleanVal,
                                params.getParam("b", ParamType::TGLboolean, 3).value.GLbooleanVal,
                                params.getParam("a", ParamType::TGLboolean, 4).value.GLbooleanVal);
            break;
        case gl::EntryPoint::ColorPointer:
            context->colorPointer(
                params.getParam("size", ParamType::TGLint, 0).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 1)
                    .value.VertexAttribTypeVal,
                params.getParam("stride", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 3)));
            break;
        case gl::EntryPoint::CompileShader:
            context->compileShader(params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                                       .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::CompressedTexImage2D:
            context->compressedTexImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("border", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("imageSize", ParamType::TGLsizei, 6).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 7)));
            break;
        case gl::EntryPoint::CompressedTexImage3D:
            context->compressedTexImage3D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("border", ParamType::TGLint, 6).value.GLintVal,
                params.getParam("imageSize", ParamType::TGLsizei, 7).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 8)));
            break;
        case gl::EntryPoint::CompressedTexSubImage2D:
            context->compressedTexSubImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("format", ParamType::TGLenum, 6).value.GLenumVal,
                params.getParam("imageSize", ParamType::TGLsizei, 7).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 8)));
            break;
        case gl::EntryPoint::CompressedTexSubImage3D:
            context->compressedTexSubImage3D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("zoffset", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 6).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 7).value.GLsizeiVal,
                params.getParam("format", ParamType::TGLenum, 8).value.GLenumVal,
                params.getParam("imageSize", ParamType::TGLsizei, 9).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("data", ParamType::TvoidConstPointer, 10)));
            break;
        case gl::EntryPoint::CopyBufferSubData:
            context->copyBufferSubData(
                params.getParam("readTargetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("writeTargetPacked", ParamType::TBufferBinding, 1)
                    .value.BufferBindingVal,
                params.getParam("readOffset", ParamType::TGLintptr, 2).value.GLintptrVal,
                params.getParam("writeOffset", ParamType::TGLintptr, 3).value.GLintptrVal,
                params.getParam("size", ParamType::TGLsizeiptr, 4).value.GLsizeiptrVal);
            break;
        case gl::EntryPoint::CopyImageSubData:
            context->copyImageSubData(
                params.getParam("srcName", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("srcTarget", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("srcLevel", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("srcX", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("srcY", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("srcZ", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("dstName", ParamType::TGLuint, 6).value.GLuintVal,
                params.getParam("dstTarget", ParamType::TGLenum, 7).value.GLenumVal,
                params.getParam("dstLevel", ParamType::TGLint, 8).value.GLintVal,
                params.getParam("dstX", ParamType::TGLint, 9).value.GLintVal,
                params.getParam("dstY", ParamType::TGLint, 10).value.GLintVal,
                params.getParam("dstZ", ParamType::TGLint, 11).value.GLintVal,
                params.getParam("srcWidth", ParamType::TGLsizei, 12).value.GLsizeiVal,
                params.getParam("srcHeight", ParamType::TGLsizei, 13).value.GLsizeiVal,
                params.getParam("srcDepth", ParamType::TGLsizei, 14).value.GLsizeiVal);
            break;
        case gl::EntryPoint::CopyTexImage2D:
            context->copyTexImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("x", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 6).value.GLsizeiVal,
                params.getParam("border", ParamType::TGLint, 7).value.GLintVal);
            break;
        case gl::EntryPoint::CopyTexSubImage2D:
            context->copyTexSubImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("x", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 6).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 7).value.GLsizeiVal);
            break;
        case gl::EntryPoint::CopyTexSubImage3D:
            context->copyTexSubImage3D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("zoffset", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("x", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 6).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 7).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 8).value.GLsizeiVal);
            break;
        case gl::EntryPoint::CreateProgram:
            context->createProgram();
            break;
        case gl::EntryPoint::CreateShader:
            context->createShader(
                params.getParam("typePacked", ParamType::TShaderType, 0).value.ShaderTypeVal);
            break;
        case gl::EntryPoint::CreateShaderProgramv:
            context->createShaderProgramv(
                params.getParam("typePacked", ParamType::TShaderType, 0).value.ShaderTypeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsPointerConstPointer<const GLchar *const *>(
                    params.getParam("strings", ParamType::TGLcharConstPointerPointer, 2)));
            break;
        case gl::EntryPoint::CullFace:
            context->cullFace(
                params.getParam("modePacked", ParamType::TCullFaceMode, 0).value.CullFaceModeVal);
            break;
        case gl::EntryPoint::DebugMessageCallback:
            context->debugMessageCallback(
                params.getParam("callback", ParamType::TGLDEBUGPROC, 0).value.GLDEBUGPROCVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("userParam", ParamType::TvoidConstPointer, 1)));
            break;
        case gl::EntryPoint::DebugMessageControl:
            context->debugMessageControl(
                params.getParam("source", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("severity", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("count", ParamType::TGLsizei, 3).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("ids", ParamType::TGLuintConstPointer, 4)),
                params.getParam("enabled", ParamType::TGLboolean, 5).value.GLbooleanVal);
            break;
        case gl::EntryPoint::DebugMessageInsert:
            context->debugMessageInsert(
                params.getParam("source", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("id", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("severity", ParamType::TGLenum, 3).value.GLenumVal,
                params.getParam("length", ParamType::TGLsizei, 4).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("buf", ParamType::TGLcharConstPointer, 5)));
            break;
        case gl::EntryPoint::DeleteBuffers:
            context->deleteBuffers(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const BufferID *>(
                    params.getParam("buffersPacked", ParamType::TBufferIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteFencesNV:
            context->deleteFencesNV(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const FenceNVID *>(
                    params.getParam("fencesPacked", ParamType::TFenceNVIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteFramebuffers:
            context->deleteFramebuffers(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const FramebufferID *>(params.getParam(
                    "framebuffersPacked", ParamType::TFramebufferIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteProgram:
            context->deleteProgram(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                       .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::DeleteProgramPipelines:
            context->deleteProgramPipelines(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const ProgramPipelineID *>(params.getParam(
                    "pipelinesPacked", ParamType::TProgramPipelineIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteQueries:
            context->deleteQueries(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const QueryID *>(
                    params.getParam("idsPacked", ParamType::TQueryIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteRenderbuffers:
            context->deleteRenderbuffers(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const RenderbufferID *>(params.getParam(
                    "renderbuffersPacked", ParamType::TRenderbufferIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteSamplers:
            context->deleteSamplers(
                params.getParam("count", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const SamplerID *>(
                    params.getParam("samplersPacked", ParamType::TSamplerIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteShader:
            context->deleteShader(params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::DeleteSync:
            context->deleteSync(params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal);
            break;
        case gl::EntryPoint::DeleteTextures:
            context->deleteTextures(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const TextureID *>(
                    params.getParam("texturesPacked", ParamType::TTextureIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteTransformFeedbacks:
            context->deleteTransformFeedbacks(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const TransformFeedbackID *>(
                    params.getParam("idsPacked", ParamType::TTransformFeedbackIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DeleteVertexArrays:
            context->deleteVertexArrays(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const VertexArrayID *>(
                    params.getParam("arraysPacked", ParamType::TVertexArrayIDConstPointer, 1)));
            break;
        case gl::EntryPoint::DepthFunc:
            context->depthFunc(params.getParam("func", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::DepthMask:
            context->depthMask(
                params.getParam("flag", ParamType::TGLboolean, 0).value.GLbooleanVal);
            break;
        case gl::EntryPoint::DepthRangef:
            context->depthRangef(params.getParam("n", ParamType::TGLfloat, 0).value.GLfloatVal,
                                 params.getParam("f", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::DepthRangex:
            context->depthRangex(params.getParam("n", ParamType::TGLfixed, 0).value.GLfixedVal,
                                 params.getParam("f", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::DetachShader:
            context->detachShader(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal,
                                  params.getParam("shaderPacked", ParamType::TShaderProgramID, 1)
                                      .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::Disable:
            context->disable(params.getParam("cap", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::DisableClientState:
            context->disableClientState(
                params.getParam("arrayPacked", ParamType::TClientVertexArrayType, 0)
                    .value.ClientVertexArrayTypeVal);
            break;
        case gl::EntryPoint::DisableVertexAttribArray:
            context->disableVertexAttribArray(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal);
            break;
        case gl::EntryPoint::Disablei:
            context->disablei(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                              params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::DispatchCompute:
            context->dispatchCompute(
                params.getParam("num_groups_x", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("num_groups_y", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("num_groups_z", ParamType::TGLuint, 2).value.GLuintVal);
            break;
        case gl::EntryPoint::DispatchComputeIndirect:
            context->dispatchComputeIndirect(
                params.getParam("indirect", ParamType::TGLintptr, 0).value.GLintptrVal);
            break;
        case gl::EntryPoint::DrawArrays:
            context->drawArrays(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("first", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal);
            break;
        case gl::EntryPoint::DrawArraysIndirect:
            context->drawArraysIndirect(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indirect", ParamType::TvoidConstPointer, 1)));
            break;
        case gl::EntryPoint::DrawArraysInstanced:
            context->drawArraysInstanced(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("first", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("instancecount", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::DrawArraysInstancedBaseInstance:
            context->drawArraysInstancedBaseInstance(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("first", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("instancecount", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("baseinstance", ParamType::TGLuint, 4).value.GLuintVal);
            break;
        case gl::EntryPoint::DrawBuffers:
            context->drawBuffers(params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                 replayContext->getAsConstPointer<const GLenum *>(
                                     params.getParam("bufs", ParamType::TGLenumConstPointer, 1)));
            break;
        case gl::EntryPoint::DrawElements:
            context->drawElements(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 3)));
            break;
        case gl::EntryPoint::DrawElementsBaseVertex:
            context->drawElementsBaseVertex(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 3)),
                params.getParam("basevertex", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::DrawElementsIndirect:
            context->drawElementsIndirect(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 1)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indirect", ParamType::TvoidConstPointer, 2)));
            break;
        case gl::EntryPoint::DrawElementsInstanced:
            context->drawElementsInstanced(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 3)),
                params.getParam("instancecount", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::DrawElementsInstancedBaseVertex:
            context->drawElementsInstancedBaseVertex(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 3)),
                params.getParam("instancecount", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("basevertex", ParamType::TGLint, 5).value.GLintVal);
            break;
        case gl::EntryPoint::DrawElementsInstancedBaseVertexBaseInstance:
            context->drawElementsInstancedBaseVertexBaseInstance(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 3)),
                params.getParam("instancecount", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("basevertex", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("baseinstance", ParamType::TGLuint, 6).value.GLuintVal);
            break;
        case gl::EntryPoint::DrawRangeElements:
            context->drawRangeElements(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("start", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("end", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("count", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 4)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 5)));
            break;
        case gl::EntryPoint::DrawRangeElementsBaseVertex:
            context->drawRangeElementsBaseVertex(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                params.getParam("start", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("end", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("count", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("typePacked", ParamType::TDrawElementsType, 4)
                    .value.DrawElementsTypeVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("indices", ParamType::TvoidConstPointer, 5)),
                params.getParam("basevertex", ParamType::TGLint, 6).value.GLintVal);
            break;
        case gl::EntryPoint::Enable:
            context->enable(params.getParam("cap", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::EnableClientState:
            context->enableClientState(
                params.getParam("arrayPacked", ParamType::TClientVertexArrayType, 0)
                    .value.ClientVertexArrayTypeVal);
            break;
        case gl::EntryPoint::EnableVertexAttribArray:
            context->enableVertexAttribArray(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal);
            break;
        case gl::EntryPoint::Enablei:
            context->enablei(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                             params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::EndQuery:
            context->endQuery(
                params.getParam("targetPacked", ParamType::TQueryType, 0).value.QueryTypeVal);
            break;
        case gl::EntryPoint::EndTransformFeedback:
            context->endTransformFeedback();
            break;
        case gl::EntryPoint::FenceSync:
            context->fenceSync(
                params.getParam("condition", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("flags", ParamType::TGLbitfield, 1).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::Finish:
            context->finish();
            break;
        case gl::EntryPoint::FinishFenceNV:
            context->finishFenceNV(
                params.getParam("fencePacked", ParamType::TFenceNVID, 0).value.FenceNVIDVal);
            break;
        case gl::EntryPoint::Flush:
            context->flush();
            break;
        case gl::EntryPoint::FlushMappedBufferRange:
            context->flushMappedBufferRange(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("offset", ParamType::TGLintptr, 1).value.GLintptrVal,
                params.getParam("length", ParamType::TGLsizeiptr, 2).value.GLsizeiptrVal);
            break;
        case gl::EntryPoint::Fogf:
            context->fogf(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                          params.getParam("param", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::Fogfv:
            context->fogfv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                           replayContext->getAsConstPointer<const GLfloat *>(
                               params.getParam("params", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::Fogx:
            context->fogx(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                          params.getParam("param", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::Fogxv:
            context->fogxv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                           replayContext->getAsConstPointer<const GLfixed *>(
                               params.getParam("param", ParamType::TGLfixedConstPointer, 1)));
            break;
        case gl::EntryPoint::FramebufferParameteri:
            context->framebufferParameteri(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::FramebufferRenderbuffer:
            context->framebufferRenderbuffer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("renderbuffertarget", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("renderbufferPacked", ParamType::TRenderbufferID, 3)
                    .value.RenderbufferIDVal);
            break;
        case gl::EntryPoint::FramebufferTexture:
            context->framebufferTexture(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("texturePacked", ParamType::TTextureID, 2).value.TextureIDVal,
                params.getParam("level", ParamType::TGLint, 3).value.GLintVal);
            break;
        case gl::EntryPoint::FramebufferTexture2D:
            context->framebufferTexture2D(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("textargetPacked", ParamType::TTextureTarget, 2)
                    .value.TextureTargetVal,
                params.getParam("texturePacked", ParamType::TTextureID, 3).value.TextureIDVal,
                params.getParam("level", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::FramebufferTexture3D:
            context->framebufferTexture3D(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("textargetPacked", ParamType::TTextureTarget, 2)
                    .value.TextureTargetVal,
                params.getParam("texturePacked", ParamType::TTextureID, 3).value.TextureIDVal,
                params.getParam("level", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("zoffset", ParamType::TGLint, 5).value.GLintVal);
            break;
        case gl::EntryPoint::FramebufferTextureLayer:
            context->framebufferTextureLayer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("texturePacked", ParamType::TTextureID, 2).value.TextureIDVal,
                params.getParam("level", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("layer", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::FrontFace:
            context->frontFace(params.getParam("mode", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::Frustumf:
            context->frustumf(params.getParam("l", ParamType::TGLfloat, 0).value.GLfloatVal,
                              params.getParam("r", ParamType::TGLfloat, 1).value.GLfloatVal,
                              params.getParam("b", ParamType::TGLfloat, 2).value.GLfloatVal,
                              params.getParam("t", ParamType::TGLfloat, 3).value.GLfloatVal,
                              params.getParam("n", ParamType::TGLfloat, 4).value.GLfloatVal,
                              params.getParam("f", ParamType::TGLfloat, 5).value.GLfloatVal);
            break;
        case gl::EntryPoint::Frustumx:
            context->frustumx(params.getParam("l", ParamType::TGLfixed, 0).value.GLfixedVal,
                              params.getParam("r", ParamType::TGLfixed, 1).value.GLfixedVal,
                              params.getParam("b", ParamType::TGLfixed, 2).value.GLfixedVal,
                              params.getParam("t", ParamType::TGLfixed, 3).value.GLfixedVal,
                              params.getParam("n", ParamType::TGLfixed, 4).value.GLfixedVal,
                              params.getParam("f", ParamType::TGLfixed, 5).value.GLfixedVal);
            break;
        case gl::EntryPoint::GenBuffers:
            context->genBuffers(params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                replayContext->getReadBufferPointer<BufferID *>(params.getParam(
                                    "buffersPacked", ParamType::TBufferIDPointer, 1)));
            break;
        case gl::EntryPoint::GenFencesNV:
            context->genFencesNV(params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                 replayContext->getReadBufferPointer<FenceNVID *>(params.getParam(
                                     "fencesPacked", ParamType::TFenceNVIDPointer, 1)));
            break;
        case gl::EntryPoint::GenFramebuffers:
            context->genFramebuffers(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getReadBufferPointer<FramebufferID *>(
                    params.getParam("framebuffersPacked", ParamType::TFramebufferIDPointer, 1)));
            break;
        case gl::EntryPoint::GenProgramPipelines:
            context->genProgramPipelines(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getReadBufferPointer<ProgramPipelineID *>(
                    params.getParam("pipelinesPacked", ParamType::TProgramPipelineIDPointer, 1)));
            break;
        case gl::EntryPoint::GenQueries:
            context->genQueries(params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                replayContext->getReadBufferPointer<QueryID *>(
                                    params.getParam("idsPacked", ParamType::TQueryIDPointer, 1)));
            break;
        case gl::EntryPoint::GenRenderbuffers:
            context->genRenderbuffers(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getReadBufferPointer<RenderbufferID *>(
                    params.getParam("renderbuffersPacked", ParamType::TRenderbufferIDPointer, 1)));
            break;
        case gl::EntryPoint::GenSamplers:
            context->genSamplers(params.getParam("count", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                 replayContext->getReadBufferPointer<SamplerID *>(params.getParam(
                                     "samplersPacked", ParamType::TSamplerIDPointer, 1)));
            break;
        case gl::EntryPoint::GenTextures:
            context->genTextures(params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                                 replayContext->getReadBufferPointer<TextureID *>(params.getParam(
                                     "texturesPacked", ParamType::TTextureIDPointer, 1)));
            break;
        case gl::EntryPoint::GenTransformFeedbacks:
            context->genTransformFeedbacks(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getReadBufferPointer<TransformFeedbackID *>(
                    params.getParam("idsPacked", ParamType::TTransformFeedbackIDPointer, 1)));
            break;
        case gl::EntryPoint::GenVertexArrays:
            context->genVertexArrays(
                params.getParam("n", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getReadBufferPointer<VertexArrayID *>(
                    params.getParam("arraysPacked", ParamType::TVertexArrayIDPointer, 1)));
            break;
        case gl::EntryPoint::GenerateMipmap:
            context->generateMipmap(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal);
            break;
        case gl::EntryPoint::GetActiveAttrib:
            context->getActiveAttrib(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("size", ParamType::TGLintPointer, 4)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("type", ParamType::TGLenumPointer, 5)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("name", ParamType::TGLcharPointer, 6)));
            break;
        case gl::EntryPoint::GetActiveUniform:
            context->getActiveUniform(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("size", ParamType::TGLintPointer, 4)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("type", ParamType::TGLenumPointer, 5)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("name", ParamType::TGLcharPointer, 6)));
            break;
        case gl::EntryPoint::GetActiveUniformBlockName:
            context->getActiveUniformBlockName(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("uniformBlockIndex", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("uniformBlockName", ParamType::TGLcharPointer, 4)));
            break;
        case gl::EntryPoint::GetActiveUniformBlockiv:
            context->getActiveUniformBlockiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("uniformBlockIndex", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetActiveUniformsiv:
            context->getActiveUniformsiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("uniformCount", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("uniformIndices", ParamType::TGLuintConstPointer, 2)),
                params.getParam("pname", ParamType::TGLenum, 3).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 4)));
            break;
        case gl::EntryPoint::GetAttachedShaders:
            context->getAttachedShaders(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("maxCount", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("count", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<ShaderProgramID *>(
                    params.getParam("shadersPacked", ParamType::TShaderProgramIDPointer, 3)));
            break;
        case gl::EntryPoint::GetAttribLocation:
            context->getAttribLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 1)));
            break;
        case gl::EntryPoint::GetBooleani_v:
            context->getBooleani_v(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                                   params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                                   replayContext->getReadBufferPointer<GLboolean *>(
                                       params.getParam("data", ParamType::TGLbooleanPointer, 2)));
            break;
        case gl::EntryPoint::GetBooleanv:
            context->getBooleanv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 replayContext->getReadBufferPointer<GLboolean *>(
                                     params.getParam("data", ParamType::TGLbooleanPointer, 1)));
            break;
        case gl::EntryPoint::GetBufferParameteri64v:
            context->getBufferParameteri64v(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint64 *>(
                    params.getParam("params", ParamType::TGLint64Pointer, 2)));
            break;
        case gl::EntryPoint::GetBufferParameteriv:
            context->getBufferParameteriv(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetBufferPointerv:
            context->getBufferPointerv(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<void **>(
                    params.getParam("params", ParamType::TvoidPointerPointer, 2)));
            break;
        case gl::EntryPoint::GetClipPlanef:
            context->getClipPlanef(params.getParam("plane", ParamType::TGLenum, 0).value.GLenumVal,
                                   replayContext->getReadBufferPointer<GLfloat *>(
                                       params.getParam("equation", ParamType::TGLfloatPointer, 1)));
            break;
        case gl::EntryPoint::GetClipPlanex:
            context->getClipPlanex(params.getParam("plane", ParamType::TGLenum, 0).value.GLenumVal,
                                   replayContext->getReadBufferPointer<GLfixed *>(
                                       params.getParam("equation", ParamType::TGLfixedPointer, 1)));
            break;
        case gl::EntryPoint::GetDebugMessageLog:
            context->getDebugMessageLog(
                params.getParam("count", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("sources", ParamType::TGLenumPointer, 2)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("types", ParamType::TGLenumPointer, 3)),
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("ids", ParamType::TGLuintPointer, 4)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("severities", ParamType::TGLenumPointer, 5)),
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("lengths", ParamType::TGLsizeiPointer, 6)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("messageLog", ParamType::TGLcharPointer, 7)));
            break;
        case gl::EntryPoint::GetError:
            context->getError();
            break;
        case gl::EntryPoint::GetFenceivNV:
            context->getFenceivNV(
                params.getParam("fencePacked", ParamType::TFenceNVID, 0).value.FenceNVIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetFixedv:
            context->getFixedv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                               replayContext->getReadBufferPointer<GLfixed *>(
                                   params.getParam("params", ParamType::TGLfixedPointer, 1)));
            break;
        case gl::EntryPoint::GetFloatv:
            context->getFloatv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                               replayContext->getReadBufferPointer<GLfloat *>(
                                   params.getParam("data", ParamType::TGLfloatPointer, 1)));
            break;
        case gl::EntryPoint::GetFragDataIndex:
            context->getFragDataIndex(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 1)));
            break;
        case gl::EntryPoint::GetFragDataLocation:
            context->getFragDataLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 1)));
            break;
        case gl::EntryPoint::GetFramebufferAttachmentParameteriv:
            context->getFramebufferAttachmentParameteriv(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("attachment", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetFramebufferParameteriv:
            context->getFramebufferParameteriv(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetGraphicsResetStatus:
            context->getGraphicsResetStatus();
            break;
        case gl::EntryPoint::GetInteger64i_v:
            context->getInteger64i_v(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                replayContext->getReadBufferPointer<GLint64 *>(
                    params.getParam("data", ParamType::TGLint64Pointer, 2)));
            break;
        case gl::EntryPoint::GetInteger64v:
            context->getInteger64v(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                   replayContext->getReadBufferPointer<GLint64 *>(
                                       params.getParam("data", ParamType::TGLint64Pointer, 1)));
            break;
        case gl::EntryPoint::GetIntegeri_v:
            context->getIntegeri_v(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                                   params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                                   replayContext->getReadBufferPointer<GLint *>(
                                       params.getParam("data", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetIntegerv:
            context->getIntegerv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 replayContext->getReadBufferPointer<GLint *>(
                                     params.getParam("data", ParamType::TGLintPointer, 1)));
            break;
        case gl::EntryPoint::GetInternalformativ:
            context->getInternalformativ(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("internalformat", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("bufSize", ParamType::TGLsizei, 3).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 4)));
            break;
        case gl::EntryPoint::GetLightfv:
            context->getLightfv(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                    .value.LightParameterVal,
                                replayContext->getReadBufferPointer<GLfloat *>(
                                    params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetLightxv:
            context->getLightxv(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                    .value.LightParameterVal,
                                replayContext->getReadBufferPointer<GLfixed *>(
                                    params.getParam("params", ParamType::TGLfixedPointer, 2)));
            break;
        case gl::EntryPoint::GetMaterialfv:
            context->getMaterialfv(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                                   params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                       .value.MaterialParameterVal,
                                   replayContext->getReadBufferPointer<GLfloat *>(
                                       params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetMaterialxv:
            context->getMaterialxv(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                                   params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                       .value.MaterialParameterVal,
                                   replayContext->getReadBufferPointer<GLfixed *>(
                                       params.getParam("params", ParamType::TGLfixedPointer, 2)));
            break;
        case gl::EntryPoint::GetMultisamplefv:
            context->getMultisamplefv(
                params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("val", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetObjectLabel:
            context->getObjectLabel(
                params.getParam("identifier", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("name", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("label", ParamType::TGLcharPointer, 4)));
            break;
        case gl::EntryPoint::GetObjectPtrLabel:
            context->getObjectPtrLabel(
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("ptr", ParamType::TvoidConstPointer, 0)),
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("label", ParamType::TGLcharPointer, 3)));
            break;
        case gl::EntryPoint::GetPointerv:
            context->getPointerv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 replayContext->getReadBufferPointer<void **>(
                                     params.getParam("params", ParamType::TvoidPointerPointer, 1)));
            break;
        case gl::EntryPoint::GetProgramBinary:
            context->getProgramBinary(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("binaryFormat", ParamType::TGLenumPointer, 3)),
                replayContext->getReadBufferPointer<void *>(
                    params.getParam("binary", ParamType::TvoidPointer, 4)));
            break;
        case gl::EntryPoint::GetProgramInfoLog:
            context->getProgramInfoLog(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("infoLog", ParamType::TGLcharPointer, 3)));
            break;
        case gl::EntryPoint::GetProgramInterfaceiv:
            context->getProgramInterfaceiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetProgramPipelineInfoLog:
            context->getProgramPipelineInfoLog(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("infoLog", ParamType::TGLcharPointer, 3)));
            break;
        case gl::EntryPoint::GetProgramPipelineiv:
            context->getProgramPipelineiv(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetProgramResourceIndex:
            context->getProgramResourceIndex(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::GetProgramResourceLocation:
            context->getProgramResourceLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::GetProgramResourceLocationIndex:
            context->getProgramResourceLocationIndex(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::GetProgramResourceName:
            context->getProgramResourceName(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("index", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 3).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 4)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("name", ParamType::TGLcharPointer, 5)));
            break;
        case gl::EntryPoint::GetProgramResourceiv:
            context->getProgramResourceiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("programInterface", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("index", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("propCount", ParamType::TGLsizei, 3).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLenum *>(
                    params.getParam("props", ParamType::TGLenumConstPointer, 4)),
                params.getParam("bufSize", ParamType::TGLsizei, 5).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 6)),
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 7)));
            break;
        case gl::EntryPoint::GetProgramiv:
            context->getProgramiv(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal,
                                  params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                                  replayContext->getReadBufferPointer<GLint *>(
                                      params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetQueryObjecti64v:
            context->getQueryObjecti64v(
                params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint64 *>(
                    params.getParam("params", ParamType::TGLint64Pointer, 2)));
            break;
        case gl::EntryPoint::GetQueryObjectiv:
            context->getQueryObjectiv(
                params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetQueryObjectui64v:
            context->getQueryObjectui64v(
                params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLuint64 *>(
                    params.getParam("params", ParamType::TGLuint64Pointer, 2)));
            break;
        case gl::EntryPoint::GetQueryObjectuiv:
            context->getQueryObjectuiv(
                params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("params", ParamType::TGLuintPointer, 2)));
            break;
        case gl::EntryPoint::GetQueryiv:
            context->getQueryiv(
                params.getParam("targetPacked", ParamType::TQueryType, 0).value.QueryTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetRenderbufferParameteriv:
            context->getRenderbufferParameteriv(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetSamplerParameterIiv:
            context->getSamplerParameterIiv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetSamplerParameterIuiv:
            context->getSamplerParameterIuiv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("params", ParamType::TGLuintPointer, 2)));
            break;
        case gl::EntryPoint::GetSamplerParameterfv:
            context->getSamplerParameterfv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetSamplerParameteriv:
            context->getSamplerParameteriv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetShaderInfoLog:
            context->getShaderInfoLog(
                params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("infoLog", ParamType::TGLcharPointer, 3)));
            break;
        case gl::EntryPoint::GetShaderPrecisionFormat:
            context->getShaderPrecisionFormat(
                params.getParam("shadertype", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("precisiontype", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("range", ParamType::TGLintPointer, 2)),
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("precision", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetShaderSource:
            context->getShaderSource(
                params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("bufSize", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 2)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("source", ParamType::TGLcharPointer, 3)));
            break;
        case gl::EntryPoint::GetShaderiv:
            context->getShaderiv(params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                                     .value.ShaderProgramIDVal,
                                 params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                                 replayContext->getReadBufferPointer<GLint *>(
                                     params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetString:
            context->getString(params.getParam("name", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::GetStringi:
            context->getStringi(params.getParam("name", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::GetSynciv:
            context->getSynciv(params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal,
                               params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                               params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                               replayContext->getReadBufferPointer<GLsizei *>(
                                   params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                               replayContext->getReadBufferPointer<GLint *>(
                                   params.getParam("values", ParamType::TGLintPointer, 4)));
            break;
        case gl::EntryPoint::GetTexEnvfv:
            context->getTexEnvfv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                     .value.TextureEnvTargetVal,
                                 params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                     .value.TextureEnvParameterVal,
                                 replayContext->getReadBufferPointer<GLfloat *>(
                                     params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetTexEnviv:
            context->getTexEnviv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                     .value.TextureEnvTargetVal,
                                 params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                     .value.TextureEnvParameterVal,
                                 replayContext->getReadBufferPointer<GLint *>(
                                     params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetTexEnvxv:
            context->getTexEnvxv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                     .value.TextureEnvTargetVal,
                                 params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                     .value.TextureEnvParameterVal,
                                 replayContext->getReadBufferPointer<GLfixed *>(
                                     params.getParam("params", ParamType::TGLfixedPointer, 2)));
            break;
        case gl::EntryPoint::GetTexGenfv:
            context->getTexGenfv(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                                 replayContext->getReadBufferPointer<GLfloat *>(
                                     params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetTexGeniv:
            context->getTexGeniv(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                                 replayContext->getReadBufferPointer<GLint *>(
                                     params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetTexImage:
            context->getTexImage(params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                                     .value.TextureTargetVal,
                                 params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                                 params.getParam("format", ParamType::TGLenum, 2).value.GLenumVal,
                                 params.getParam("type", ParamType::TGLenum, 3).value.GLenumVal,
                                 replayContext->getReadBufferPointer<void *>(
                                     params.getParam("pixels", ParamType::TvoidPointer, 4)));
            break;
        case gl::EntryPoint::GetTexLevelParameterfv:
            context->getTexLevelParameterfv(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatPointer, 3)));
            break;
        case gl::EntryPoint::GetTexLevelParameteriv:
            context->getTexLevelParameteriv(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("pname", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetTexParameterIiv:
            context->getTexParameterIiv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetTexParameterIuiv:
            context->getTexParameterIuiv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("params", ParamType::TGLuintPointer, 2)));
            break;
        case gl::EntryPoint::GetTexParameterfv:
            context->getTexParameterfv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetTexParameteriv:
            context->getTexParameteriv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetTexParameterxv:
            context->getTexParameterxv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLfixed *>(
                    params.getParam("params", ParamType::TGLfixedPointer, 2)));
            break;
        case gl::EntryPoint::GetTransformFeedbackVarying:
            context->getTransformFeedbackVarying(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("length", ParamType::TGLsizeiPointer, 3)),
                replayContext->getReadBufferPointer<GLsizei *>(
                    params.getParam("size", ParamType::TGLsizeiPointer, 4)),
                replayContext->getReadBufferPointer<GLenum *>(
                    params.getParam("type", ParamType::TGLenumPointer, 5)),
                replayContext->getReadBufferPointer<GLchar *>(
                    params.getParam("name", ParamType::TGLcharPointer, 6)));
            break;
        case gl::EntryPoint::GetUniformBlockIndex:
            context->getUniformBlockIndex(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("uniformBlockName", ParamType::TGLcharConstPointer, 1)));
            break;
        case gl::EntryPoint::GetUniformIndices:
            context->getUniformIndices(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("uniformCount", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsPointerConstPointer<const GLchar *const *>(
                    params.getParam("uniformNames", ParamType::TGLcharConstPointerPointer, 2)),
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("uniformIndices", ParamType::TGLuintPointer, 3)));
            break;
        case gl::EntryPoint::GetUniformLocation:
            context->getUniformLocation(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("name", ParamType::TGLcharConstPointer, 1)));
            break;
        case gl::EntryPoint::GetUniformfv:
            context->getUniformfv(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal,
                                  params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                                      .value.UniformLocationVal,
                                  replayContext->getReadBufferPointer<GLfloat *>(
                                      params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetUniformiv:
            context->getUniformiv(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                      .value.ShaderProgramIDVal,
                                  params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                                      .value.UniformLocationVal,
                                  replayContext->getReadBufferPointer<GLint *>(
                                      params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetUniformuiv:
            context->getUniformuiv(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                       .value.ShaderProgramIDVal,
                                   params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                                       .value.UniformLocationVal,
                                   replayContext->getReadBufferPointer<GLuint *>(
                                       params.getParam("params", ParamType::TGLuintPointer, 2)));
            break;
        case gl::EntryPoint::GetVertexAttribIiv:
            context->getVertexAttribIiv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetVertexAttribIuiv:
            context->getVertexAttribIuiv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("params", ParamType::TGLuintPointer, 2)));
            break;
        case gl::EntryPoint::GetVertexAttribPointerv:
            context->getVertexAttribPointerv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<void **>(
                    params.getParam("pointer", ParamType::TvoidPointerPointer, 2)));
            break;
        case gl::EntryPoint::GetVertexAttribfv:
            context->getVertexAttribfv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatPointer, 2)));
            break;
        case gl::EntryPoint::GetVertexAttribiv:
            context->getVertexAttribiv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 2)));
            break;
        case gl::EntryPoint::GetnUniformfv:
            context->getnUniformfv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatPointer, 3)));
            break;
        case gl::EntryPoint::GetnUniformiv:
            context->getnUniformiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLint *>(
                    params.getParam("params", ParamType::TGLintPointer, 3)));
            break;
        case gl::EntryPoint::GetnUniformuiv:
            context->getnUniformuiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("bufSize", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getReadBufferPointer<GLuint *>(
                    params.getParam("params", ParamType::TGLuintPointer, 3)));
            break;
        case gl::EntryPoint::Hint:
            context->hint(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                          params.getParam("mode", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::InvalidateFramebuffer:
            context->invalidateFramebuffer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("numAttachments", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLenum *>(
                    params.getParam("attachments", ParamType::TGLenumConstPointer, 2)));
            break;
        case gl::EntryPoint::InvalidateSubFramebuffer:
            context->invalidateSubFramebuffer(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("numAttachments", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLenum *>(
                    params.getParam("attachments", ParamType::TGLenumConstPointer, 2)),
                params.getParam("x", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 6).value.GLsizeiVal);
            break;
        case gl::EntryPoint::IsBuffer:
            context->isBuffer(
                params.getParam("bufferPacked", ParamType::TBufferID, 0).value.BufferIDVal);
            break;
        case gl::EntryPoint::IsEnabled:
            context->isEnabled(params.getParam("cap", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::IsEnabledi:
            context->isEnabledi(params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("index", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::IsFenceNV:
            context->isFenceNV(
                params.getParam("fencePacked", ParamType::TFenceNVID, 0).value.FenceNVIDVal);
            break;
        case gl::EntryPoint::IsFramebuffer:
            context->isFramebuffer(
                params.getParam("framebufferPacked", ParamType::TFramebufferID, 0)
                    .value.FramebufferIDVal);
            break;
        case gl::EntryPoint::IsProgram:
            context->isProgram(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                   .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::IsProgramPipeline:
            context->isProgramPipeline(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal);
            break;
        case gl::EntryPoint::IsQuery:
            context->isQuery(params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal);
            break;
        case gl::EntryPoint::IsRenderbuffer:
            context->isRenderbuffer(
                params.getParam("renderbufferPacked", ParamType::TRenderbufferID, 0)
                    .value.RenderbufferIDVal);
            break;
        case gl::EntryPoint::IsSampler:
            context->isSampler(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal);
            break;
        case gl::EntryPoint::IsShader:
            context->isShader(params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                                  .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::IsSync:
            context->isSync(params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal);
            break;
        case gl::EntryPoint::IsTexture:
            context->isTexture(
                params.getParam("texturePacked", ParamType::TTextureID, 0).value.TextureIDVal);
            break;
        case gl::EntryPoint::IsTransformFeedback:
            context->isTransformFeedback(
                params.getParam("idPacked", ParamType::TTransformFeedbackID, 0)
                    .value.TransformFeedbackIDVal);
            break;
        case gl::EntryPoint::IsVertexArray:
            context->isVertexArray(params.getParam("arrayPacked", ParamType::TVertexArrayID, 0)
                                       .value.VertexArrayIDVal);
            break;
        case gl::EntryPoint::LightModelf:
            context->lightModelf(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("param", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::LightModelfv:
            context->lightModelfv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                  replayContext->getAsConstPointer<const GLfloat *>(params.getParam(
                                      "params", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::LightModelx:
            context->lightModelx(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("param", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::LightModelxv:
            context->lightModelxv(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                  replayContext->getAsConstPointer<const GLfixed *>(params.getParam(
                                      "param", ParamType::TGLfixedConstPointer, 1)));
            break;
        case gl::EntryPoint::Lightf:
            context->lightf(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                            params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                .value.LightParameterVal,
                            params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Lightfv:
            context->lightfv(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                             params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                 .value.LightParameterVal,
                             replayContext->getAsConstPointer<const GLfloat *>(
                                 params.getParam("params", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Lightx:
            context->lightx(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                            params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                .value.LightParameterVal,
                            params.getParam("param", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::Lightxv:
            context->lightxv(params.getParam("light", ParamType::TGLenum, 0).value.GLenumVal,
                             params.getParam("pnamePacked", ParamType::TLightParameter, 1)
                                 .value.LightParameterVal,
                             replayContext->getAsConstPointer<const GLfixed *>(
                                 params.getParam("params", ParamType::TGLfixedConstPointer, 2)));
            break;
        case gl::EntryPoint::LineWidth:
            context->lineWidth(params.getParam("width", ParamType::TGLfloat, 0).value.GLfloatVal);
            break;
        case gl::EntryPoint::LineWidthx:
            context->lineWidthx(params.getParam("width", ParamType::TGLfixed, 0).value.GLfixedVal);
            break;
        case gl::EntryPoint::LinkProgram:
            context->linkProgram(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                     .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::LoadIdentity:
            context->loadIdentity();
            break;
        case gl::EntryPoint::LoadMatrixf:
            context->loadMatrixf(replayContext->getAsConstPointer<const GLfloat *>(
                params.getParam("m", ParamType::TGLfloatConstPointer, 0)));
            break;
        case gl::EntryPoint::LoadMatrixx:
            context->loadMatrixx(replayContext->getAsConstPointer<const GLfixed *>(
                params.getParam("m", ParamType::TGLfixedConstPointer, 0)));
            break;
        case gl::EntryPoint::LogicOp:
            context->logicOp(params.getParam("opcodePacked", ParamType::TLogicalOperation, 0)
                                 .value.LogicalOperationVal);
            break;
        case gl::EntryPoint::MapBuffer:
            context->mapBuffer(params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                                   .value.BufferBindingVal,
                               params.getParam("access", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::MapBufferRange:
            context->mapBufferRange(
                params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                    .value.BufferBindingVal,
                params.getParam("offset", ParamType::TGLintptr, 1).value.GLintptrVal,
                params.getParam("length", ParamType::TGLsizeiptr, 2).value.GLsizeiptrVal,
                params.getParam("access", ParamType::TGLbitfield, 3).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::Materialf:
            context->materialf(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                               params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                   .value.MaterialParameterVal,
                               params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Materialfv:
            context->materialfv(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                    .value.MaterialParameterVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("params", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Materialx:
            context->materialx(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                               params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                   .value.MaterialParameterVal,
                               params.getParam("param", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::Materialxv:
            context->materialxv(params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                                params.getParam("pnamePacked", ParamType::TMaterialParameter, 1)
                                    .value.MaterialParameterVal,
                                replayContext->getAsConstPointer<const GLfixed *>(
                                    params.getParam("param", ParamType::TGLfixedConstPointer, 2)));
            break;
        case gl::EntryPoint::MatrixMode:
            context->matrixMode(
                params.getParam("modePacked", ParamType::TMatrixType, 0).value.MatrixTypeVal);
            break;
        case gl::EntryPoint::MemoryBarrier:
            context->memoryBarrier(
                params.getParam("barriers", ParamType::TGLbitfield, 0).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::MemoryBarrierByRegion:
            context->memoryBarrierByRegion(
                params.getParam("barriers", ParamType::TGLbitfield, 0).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::MinSampleShading:
            context->minSampleShading(
                params.getParam("value", ParamType::TGLfloat, 0).value.GLfloatVal);
            break;
        case gl::EntryPoint::MultMatrixf:
            context->multMatrixf(replayContext->getAsConstPointer<const GLfloat *>(
                params.getParam("m", ParamType::TGLfloatConstPointer, 0)));
            break;
        case gl::EntryPoint::MultMatrixx:
            context->multMatrixx(replayContext->getAsConstPointer<const GLfixed *>(
                params.getParam("m", ParamType::TGLfixedConstPointer, 0)));
            break;
        case gl::EntryPoint::MultiDrawArrays:
            context->multiDrawArrays(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("first", ParamType::TGLintConstPointer, 1)),
                replayContext->getAsConstPointer<const GLsizei *>(
                    params.getParam("count", ParamType::TGLsizeiConstPointer, 2)),
                params.getParam("drawcount", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::MultiDrawElements:
            context->multiDrawElements(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                replayContext->getAsConstPointer<const GLsizei *>(
                    params.getParam("count", ParamType::TGLsizeiConstPointer, 1)),
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsPointerConstPointer<const void *const *>(
                    params.getParam("indices", ParamType::TvoidConstPointerPointer, 3)),
                params.getParam("drawcount", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::MultiDrawElementsBaseVertex:
            context->multiDrawElementsBaseVertex(
                params.getParam("modePacked", ParamType::TPrimitiveMode, 0).value.PrimitiveModeVal,
                replayContext->getAsConstPointer<const GLsizei *>(
                    params.getParam("count", ParamType::TGLsizeiConstPointer, 1)),
                params.getParam("typePacked", ParamType::TDrawElementsType, 2)
                    .value.DrawElementsTypeVal,
                replayContext->getAsPointerConstPointer<const void *const *>(
                    params.getParam("indices", ParamType::TvoidConstPointerPointer, 3)),
                params.getParam("drawcount", ParamType::TGLsizei, 4).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("basevertex", ParamType::TGLintConstPointer, 5)));
            break;
        case gl::EntryPoint::MultiTexCoord4f:
            context->multiTexCoord4f(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("s", ParamType::TGLfloat, 1).value.GLfloatVal,
                params.getParam("t", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("r", ParamType::TGLfloat, 3).value.GLfloatVal,
                params.getParam("q", ParamType::TGLfloat, 4).value.GLfloatVal);
            break;
        case gl::EntryPoint::MultiTexCoord4x:
            context->multiTexCoord4x(
                params.getParam("texture", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("s", ParamType::TGLfixed, 1).value.GLfixedVal,
                params.getParam("t", ParamType::TGLfixed, 2).value.GLfixedVal,
                params.getParam("r", ParamType::TGLfixed, 3).value.GLfixedVal,
                params.getParam("q", ParamType::TGLfixed, 4).value.GLfixedVal);
            break;
        case gl::EntryPoint::Normal3f:
            context->normal3f(params.getParam("nx", ParamType::TGLfloat, 0).value.GLfloatVal,
                              params.getParam("ny", ParamType::TGLfloat, 1).value.GLfloatVal,
                              params.getParam("nz", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Normal3x:
            context->normal3x(params.getParam("nx", ParamType::TGLfixed, 0).value.GLfixedVal,
                              params.getParam("ny", ParamType::TGLfixed, 1).value.GLfixedVal,
                              params.getParam("nz", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::NormalPointer:
            context->normalPointer(
                params.getParam("typePacked", ParamType::TVertexAttribType, 0)
                    .value.VertexAttribTypeVal,
                params.getParam("stride", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 2)));
            break;
        case gl::EntryPoint::ObjectLabel:
            context->objectLabel(
                params.getParam("identifier", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("name", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("length", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("label", ParamType::TGLcharConstPointer, 3)));
            break;
        case gl::EntryPoint::ObjectPtrLabel:
            context->objectPtrLabel(
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("ptr", ParamType::TvoidConstPointer, 0)),
                params.getParam("length", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("label", ParamType::TGLcharConstPointer, 2)));
            break;
        case gl::EntryPoint::Orthof:
            context->orthof(params.getParam("l", ParamType::TGLfloat, 0).value.GLfloatVal,
                            params.getParam("r", ParamType::TGLfloat, 1).value.GLfloatVal,
                            params.getParam("b", ParamType::TGLfloat, 2).value.GLfloatVal,
                            params.getParam("t", ParamType::TGLfloat, 3).value.GLfloatVal,
                            params.getParam("n", ParamType::TGLfloat, 4).value.GLfloatVal,
                            params.getParam("f", ParamType::TGLfloat, 5).value.GLfloatVal);
            break;
        case gl::EntryPoint::Orthox:
            context->orthox(params.getParam("l", ParamType::TGLfixed, 0).value.GLfixedVal,
                            params.getParam("r", ParamType::TGLfixed, 1).value.GLfixedVal,
                            params.getParam("b", ParamType::TGLfixed, 2).value.GLfixedVal,
                            params.getParam("t", ParamType::TGLfixed, 3).value.GLfixedVal,
                            params.getParam("n", ParamType::TGLfixed, 4).value.GLfixedVal,
                            params.getParam("f", ParamType::TGLfixed, 5).value.GLfixedVal);
            break;
        case gl::EntryPoint::PatchParameteri:
            context->patchParameteri(
                params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("value", ParamType::TGLint, 1).value.GLintVal);
            break;
        case gl::EntryPoint::PauseTransformFeedback:
            context->pauseTransformFeedback();
            break;
        case gl::EntryPoint::PixelStorei:
            context->pixelStorei(params.getParam("pname", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("param", ParamType::TGLint, 1).value.GLintVal);
            break;
        case gl::EntryPoint::PointParameterf:
            context->pointParameterf(
                params.getParam("pnamePacked", ParamType::TPointParameter, 0)
                    .value.PointParameterVal,
                params.getParam("param", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::PointParameterfv:
            context->pointParameterfv(
                params.getParam("pnamePacked", ParamType::TPointParameter, 0)
                    .value.PointParameterVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::PointParameterx:
            context->pointParameterx(
                params.getParam("pnamePacked", ParamType::TPointParameter, 0)
                    .value.PointParameterVal,
                params.getParam("param", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::PointParameterxv:
            context->pointParameterxv(
                params.getParam("pnamePacked", ParamType::TPointParameter, 0)
                    .value.PointParameterVal,
                replayContext->getAsConstPointer<const GLfixed *>(
                    params.getParam("params", ParamType::TGLfixedConstPointer, 1)));
            break;
        case gl::EntryPoint::PointSize:
            context->pointSize(params.getParam("size", ParamType::TGLfloat, 0).value.GLfloatVal);
            break;
        case gl::EntryPoint::PointSizex:
            context->pointSizex(params.getParam("size", ParamType::TGLfixed, 0).value.GLfixedVal);
            break;
        case gl::EntryPoint::PolygonOffset:
            context->polygonOffset(
                params.getParam("factor", ParamType::TGLfloat, 0).value.GLfloatVal,
                params.getParam("units", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::PolygonOffsetx:
            context->polygonOffsetx(
                params.getParam("factor", ParamType::TGLfixed, 0).value.GLfixedVal,
                params.getParam("units", ParamType::TGLfixed, 1).value.GLfixedVal);
            break;
        case gl::EntryPoint::PopDebugGroup:
            context->popDebugGroup();
            break;
        case gl::EntryPoint::PopMatrix:
            context->popMatrix();
            break;
        case gl::EntryPoint::PrimitiveBoundingBox:
            context->primitiveBoundingBox(
                params.getParam("minX", ParamType::TGLfloat, 0).value.GLfloatVal,
                params.getParam("minY", ParamType::TGLfloat, 1).value.GLfloatVal,
                params.getParam("minZ", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("minW", ParamType::TGLfloat, 3).value.GLfloatVal,
                params.getParam("maxX", ParamType::TGLfloat, 4).value.GLfloatVal,
                params.getParam("maxY", ParamType::TGLfloat, 5).value.GLfloatVal,
                params.getParam("maxZ", ParamType::TGLfloat, 6).value.GLfloatVal,
                params.getParam("maxW", ParamType::TGLfloat, 7).value.GLfloatVal);
            break;
        case gl::EntryPoint::ProgramBinary:
            context->programBinary(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("binaryFormat", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("binary", ParamType::TvoidConstPointer, 2)),
                params.getParam("length", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::ProgramParameteri:
            context->programParameteri(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("value", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::ProgramUniform1f:
            context->programUniform1f(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::ProgramUniform1fv:
            context->programUniform1fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform1i:
            context->programUniform1i(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::ProgramUniform1iv:
            context->programUniform1iv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("value", ParamType::TGLintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform1ui:
            context->programUniform1ui(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLuint, 2).value.GLuintVal);
            break;
        case gl::EntryPoint::ProgramUniform1uiv:
            context->programUniform1uiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("value", ParamType::TGLuintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform2f:
            context->programUniform2f(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("v1", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::ProgramUniform2fv:
            context->programUniform2fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform2i:
            context->programUniform2i(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("v1", ParamType::TGLint, 3).value.GLintVal);
            break;
        case gl::EntryPoint::ProgramUniform2iv:
            context->programUniform2iv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("value", ParamType::TGLintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform2ui:
            context->programUniform2ui(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("v1", ParamType::TGLuint, 3).value.GLuintVal);
            break;
        case gl::EntryPoint::ProgramUniform2uiv:
            context->programUniform2uiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("value", ParamType::TGLuintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform3f:
            context->programUniform3f(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("v1", ParamType::TGLfloat, 3).value.GLfloatVal,
                params.getParam("v2", ParamType::TGLfloat, 4).value.GLfloatVal);
            break;
        case gl::EntryPoint::ProgramUniform3fv:
            context->programUniform3fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform3i:
            context->programUniform3i(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("v1", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("v2", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::ProgramUniform3iv:
            context->programUniform3iv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("value", ParamType::TGLintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform3ui:
            context->programUniform3ui(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("v1", ParamType::TGLuint, 3).value.GLuintVal,
                params.getParam("v2", ParamType::TGLuint, 4).value.GLuintVal);
            break;
        case gl::EntryPoint::ProgramUniform3uiv:
            context->programUniform3uiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("value", ParamType::TGLuintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform4f:
            context->programUniform4f(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLfloat, 2).value.GLfloatVal,
                params.getParam("v1", ParamType::TGLfloat, 3).value.GLfloatVal,
                params.getParam("v2", ParamType::TGLfloat, 4).value.GLfloatVal,
                params.getParam("v3", ParamType::TGLfloat, 5).value.GLfloatVal);
            break;
        case gl::EntryPoint::ProgramUniform4fv:
            context->programUniform4fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform4i:
            context->programUniform4i(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("v1", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("v2", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("v3", ParamType::TGLint, 5).value.GLintVal);
            break;
        case gl::EntryPoint::ProgramUniform4iv:
            context->programUniform4iv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("value", ParamType::TGLintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniform4ui:
            context->programUniform4ui(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("v0", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("v1", ParamType::TGLuint, 3).value.GLuintVal,
                params.getParam("v2", ParamType::TGLuint, 4).value.GLuintVal,
                params.getParam("v3", ParamType::TGLuint, 5).value.GLuintVal);
            break;
        case gl::EntryPoint::ProgramUniform4uiv:
            context->programUniform4uiv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("value", ParamType::TGLuintConstPointer, 3)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix2fv:
            context->programUniformMatrix2fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix2x3fv:
            context->programUniformMatrix2x3fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix2x4fv:
            context->programUniformMatrix2x4fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix3fv:
            context->programUniformMatrix3fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix3x2fv:
            context->programUniformMatrix3x2fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix3x4fv:
            context->programUniformMatrix3x4fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix4fv:
            context->programUniformMatrix4fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix4x2fv:
            context->programUniformMatrix4x2fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProgramUniformMatrix4x3fv:
            context->programUniformMatrix4x3fv(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("locationPacked", ParamType::TUniformLocation, 1)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 3).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 4)));
            break;
        case gl::EntryPoint::ProvokingVertex:
            context->provokingVertex(
                params.getParam("modePacked", ParamType::TProvokingVertexConvention, 0)
                    .value.ProvokingVertexConventionVal);
            break;
        case gl::EntryPoint::PushDebugGroup:
            context->pushDebugGroup(
                params.getParam("source", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("id", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("length", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const GLchar *>(
                    params.getParam("message", ParamType::TGLcharConstPointer, 3)));
            break;
        case gl::EntryPoint::PushMatrix:
            context->pushMatrix();
            break;
        case gl::EntryPoint::QueryCounter:
            context->queryCounter(
                params.getParam("idPacked", ParamType::TQueryID, 0).value.QueryIDVal,
                params.getParam("targetPacked", ParamType::TQueryType, 1).value.QueryTypeVal);
            break;
        case gl::EntryPoint::ReadBuffer:
            context->readBuffer(params.getParam("src", ParamType::TGLenum, 0).value.GLenumVal);
            break;
        case gl::EntryPoint::ReadPixels:
            context->readPixels(params.getParam("x", ParamType::TGLint, 0).value.GLintVal,
                                params.getParam("y", ParamType::TGLint, 1).value.GLintVal,
                                params.getParam("width", ParamType::TGLsizei, 2).value.GLsizeiVal,
                                params.getParam("height", ParamType::TGLsizei, 3).value.GLsizeiVal,
                                params.getParam("format", ParamType::TGLenum, 4).value.GLenumVal,
                                params.getParam("type", ParamType::TGLenum, 5).value.GLenumVal,
                                replayContext->getReadBufferPointer<void *>(
                                    params.getParam("pixels", ParamType::TvoidPointer, 6)));
            break;
        case gl::EntryPoint::ReadnPixels:
            context->readnPixels(
                params.getParam("x", ParamType::TGLint, 0).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("format", ParamType::TGLenum, 4).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 5).value.GLenumVal,
                params.getParam("bufSize", ParamType::TGLsizei, 6).value.GLsizeiVal,
                replayContext->getReadBufferPointer<void *>(
                    params.getParam("data", ParamType::TvoidPointer, 7)));
            break;
        case gl::EntryPoint::ReleaseShaderCompiler:
            context->releaseShaderCompiler();
            break;
        case gl::EntryPoint::RenderbufferStorage:
            context->renderbufferStorage(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("internalformat", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 2).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::RenderbufferStorageMultisample:
            context->renderbufferStorageMultisample(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("samples", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::RenderbufferStorageMultisampleEXT:
            context->renderbufferStorageMultisampleEXT(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("samples", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::ResumeTransformFeedback:
            context->resumeTransformFeedback();
            break;
        case gl::EntryPoint::Rotatef:
            context->rotatef(params.getParam("angle", ParamType::TGLfloat, 0).value.GLfloatVal,
                             params.getParam("x", ParamType::TGLfloat, 1).value.GLfloatVal,
                             params.getParam("y", ParamType::TGLfloat, 2).value.GLfloatVal,
                             params.getParam("z", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::Rotatex:
            context->rotatex(params.getParam("angle", ParamType::TGLfixed, 0).value.GLfixedVal,
                             params.getParam("x", ParamType::TGLfixed, 1).value.GLfixedVal,
                             params.getParam("y", ParamType::TGLfixed, 2).value.GLfixedVal,
                             params.getParam("z", ParamType::TGLfixed, 3).value.GLfixedVal);
            break;
        case gl::EntryPoint::SampleCoverage:
            context->sampleCoverage(
                params.getParam("value", ParamType::TGLfloat, 0).value.GLfloatVal,
                params.getParam("invert", ParamType::TGLboolean, 1).value.GLbooleanVal);
            break;
        case gl::EntryPoint::SampleCoveragex:
            context->sampleCoveragex(
                params.getParam("value", ParamType::TGLclampx, 0).value.GLclampxVal,
                params.getParam("invert", ParamType::TGLboolean, 1).value.GLbooleanVal);
            break;
        case gl::EntryPoint::SampleMaski:
            context->sampleMaski(
                params.getParam("maskNumber", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("mask", ParamType::TGLbitfield, 1).value.GLbitfieldVal);
            break;
        case gl::EntryPoint::SamplerParameterIiv:
            context->samplerParameterIiv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("param", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::SamplerParameterIuiv:
            context->samplerParameterIuiv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("param", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::SamplerParameterf:
            context->samplerParameterf(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::SamplerParameterfv:
            context->samplerParameterfv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("param", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::SamplerParameteri:
            context->samplerParameteri(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::SamplerParameteriv:
            context->samplerParameteriv(
                params.getParam("samplerPacked", ParamType::TSamplerID, 0).value.SamplerIDVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("param", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::Scalef:
            context->scalef(params.getParam("x", ParamType::TGLfloat, 0).value.GLfloatVal,
                            params.getParam("y", ParamType::TGLfloat, 1).value.GLfloatVal,
                            params.getParam("z", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Scalex:
            context->scalex(params.getParam("x", ParamType::TGLfixed, 0).value.GLfixedVal,
                            params.getParam("y", ParamType::TGLfixed, 1).value.GLfixedVal,
                            params.getParam("z", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::Scissor:
            context->scissor(params.getParam("x", ParamType::TGLint, 0).value.GLintVal,
                             params.getParam("y", ParamType::TGLint, 1).value.GLintVal,
                             params.getParam("width", ParamType::TGLsizei, 2).value.GLsizeiVal,
                             params.getParam("height", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::SetFenceNV:
            context->setFenceNV(
                params.getParam("fencePacked", ParamType::TFenceNVID, 0).value.FenceNVIDVal,
                params.getParam("condition", ParamType::TGLenum, 1).value.GLenumVal);
            break;
        case gl::EntryPoint::ShadeModel:
            context->shadeModel(
                params.getParam("modePacked", ParamType::TShadingModel, 0).value.ShadingModelVal);
            break;
        case gl::EntryPoint::ShaderBinary:
            context->shaderBinary(
                params.getParam("count", ParamType::TGLsizei, 0).value.GLsizeiVal,
                replayContext->getAsConstPointer<const ShaderProgramID *>(
                    params.getParam("shadersPacked", ParamType::TShaderProgramIDConstPointer, 1)),
                params.getParam("binaryformat", ParamType::TGLenum, 2).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("binary", ParamType::TvoidConstPointer, 3)),
                params.getParam("length", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::ShaderSource:
            context->shaderSource(
                params.getParam("shaderPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsPointerConstPointer<const GLchar *const *>(
                    params.getParam("string", ParamType::TGLcharConstPointerPointer, 2)),
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("length", ParamType::TGLintConstPointer, 3)));
            break;
        case gl::EntryPoint::StencilFunc:
            context->stencilFunc(params.getParam("func", ParamType::TGLenum, 0).value.GLenumVal,
                                 params.getParam("ref", ParamType::TGLint, 1).value.GLintVal,
                                 params.getParam("mask", ParamType::TGLuint, 2).value.GLuintVal);
            break;
        case gl::EntryPoint::StencilFuncSeparate:
            context->stencilFuncSeparate(
                params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("func", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("ref", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("mask", ParamType::TGLuint, 3).value.GLuintVal);
            break;
        case gl::EntryPoint::StencilMask:
            context->stencilMask(params.getParam("mask", ParamType::TGLuint, 0).value.GLuintVal);
            break;
        case gl::EntryPoint::StencilMaskSeparate:
            context->stencilMaskSeparate(
                params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("mask", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::StencilOp:
            context->stencilOp(params.getParam("fail", ParamType::TGLenum, 0).value.GLenumVal,
                               params.getParam("zfail", ParamType::TGLenum, 1).value.GLenumVal,
                               params.getParam("zpass", ParamType::TGLenum, 2).value.GLenumVal);
            break;
        case gl::EntryPoint::StencilOpSeparate:
            context->stencilOpSeparate(
                params.getParam("face", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("sfail", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("dpfail", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("dppass", ParamType::TGLenum, 3).value.GLenumVal);
            break;
        case gl::EntryPoint::TestFenceNV:
            context->testFenceNV(
                params.getParam("fencePacked", ParamType::TFenceNVID, 0).value.FenceNVIDVal);
            break;
        case gl::EntryPoint::TexBuffer:
            context->texBuffer(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("internalformat", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 2).value.BufferIDVal);
            break;
        case gl::EntryPoint::TexBufferRange:
            context->texBufferRange(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("internalformat", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("bufferPacked", ParamType::TBufferID, 2).value.BufferIDVal,
                params.getParam("offset", ParamType::TGLintptr, 3).value.GLintptrVal,
                params.getParam("size", ParamType::TGLsizeiptr, 4).value.GLsizeiptrVal);
            break;
        case gl::EntryPoint::TexCoordPointer:
            context->texCoordPointer(
                params.getParam("size", ParamType::TGLint, 0).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 1)
                    .value.VertexAttribTypeVal,
                params.getParam("stride", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 3)));
            break;
        case gl::EntryPoint::TexEnvf:
            context->texEnvf(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                 .value.TextureEnvTargetVal,
                             params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                 .value.TextureEnvParameterVal,
                             params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::TexEnvfv:
            context->texEnvfv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                  .value.TextureEnvTargetVal,
                              params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                  .value.TextureEnvParameterVal,
                              replayContext->getAsConstPointer<const GLfloat *>(
                                  params.getParam("params", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::TexEnvi:
            context->texEnvi(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                 .value.TextureEnvTargetVal,
                             params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                 .value.TextureEnvParameterVal,
                             params.getParam("param", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::TexEnviv:
            context->texEnviv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                  .value.TextureEnvTargetVal,
                              params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                  .value.TextureEnvParameterVal,
                              replayContext->getAsConstPointer<const GLint *>(
                                  params.getParam("params", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::TexEnvx:
            context->texEnvx(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                 .value.TextureEnvTargetVal,
                             params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                 .value.TextureEnvParameterVal,
                             params.getParam("param", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::TexEnvxv:
            context->texEnvxv(params.getParam("targetPacked", ParamType::TTextureEnvTarget, 0)
                                  .value.TextureEnvTargetVal,
                              params.getParam("pnamePacked", ParamType::TTextureEnvParameter, 1)
                                  .value.TextureEnvParameterVal,
                              replayContext->getAsConstPointer<const GLfixed *>(
                                  params.getParam("params", ParamType::TGLfixedConstPointer, 2)));
            break;
        case gl::EntryPoint::TexGenf:
            context->texGenf(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                             params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                             params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::TexGenfv:
            context->texGenfv(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                              params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                              replayContext->getAsConstPointer<const GLfloat *>(
                                  params.getParam("params", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::TexGeni:
            context->texGeni(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                             params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                             params.getParam("param", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::TexGeniv:
            context->texGeniv(params.getParam("coord", ParamType::TGLenum, 0).value.GLenumVal,
                              params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                              replayContext->getAsConstPointer<const GLint *>(
                                  params.getParam("params", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::TexImage2D:
            context->texImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("internalformat", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("border", ParamType::TGLint, 5).value.GLintVal,
                params.getParam("format", ParamType::TGLenum, 6).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 7).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pixels", ParamType::TvoidConstPointer, 8)));
            break;
        case gl::EntryPoint::TexImage3D:
            context->texImage3D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("internalformat", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("border", ParamType::TGLint, 6).value.GLintVal,
                params.getParam("format", ParamType::TGLenum, 7).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 8).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pixels", ParamType::TvoidConstPointer, 9)));
            break;
        case gl::EntryPoint::TexParameterIiv:
            context->texParameterIiv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("params", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::TexParameterIuiv:
            context->texParameterIuiv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("params", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::TexParameterf:
            context->texParameterf(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::TexParameterfv:
            context->texParameterfv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("params", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::TexParameteri:
            context->texParameteri(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::TexParameteriv:
            context->texParameteriv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("params", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::TexParameterx:
            context->texParameterx(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                params.getParam("param", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::TexParameterxv:
            context->texParameterxv(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("pname", ParamType::TGLenum, 1).value.GLenumVal,
                replayContext->getAsConstPointer<const GLfixed *>(
                    params.getParam("params", ParamType::TGLfixedConstPointer, 2)));
            break;
        case gl::EntryPoint::TexStorage1D:
            context->texStorage1D(
                params.getParam("target", ParamType::TGLenum, 0).value.GLenumVal,
                params.getParam("levels", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::TexStorage2D:
            context->texStorage2D(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("levels", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal);
            break;
        case gl::EntryPoint::TexStorage2DMultisample:
            context->texStorage2DMultisample(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("samples", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("fixedsamplelocations", ParamType::TGLboolean, 5)
                    .value.GLbooleanVal);
            break;
        case gl::EntryPoint::TexStorage3D:
            context->texStorage3D(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("levels", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 5).value.GLsizeiVal);
            break;
        case gl::EntryPoint::TexStorage3DMultisample:
            context->texStorage3DMultisample(
                params.getParam("targetPacked", ParamType::TTextureType, 0).value.TextureTypeVal,
                params.getParam("samples", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("internalformat", ParamType::TGLenum, 2).value.GLenumVal,
                params.getParam("width", ParamType::TGLsizei, 3).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("fixedsamplelocations", ParamType::TGLboolean, 6)
                    .value.GLbooleanVal);
            break;
        case gl::EntryPoint::TexSubImage2D:
            context->texSubImage2D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 4).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("format", ParamType::TGLenum, 6).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 7).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pixels", ParamType::TvoidConstPointer, 8)));
            break;
        case gl::EntryPoint::TexSubImage3D:
            context->texSubImage3D(
                params.getParam("targetPacked", ParamType::TTextureTarget, 0)
                    .value.TextureTargetVal,
                params.getParam("level", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("xoffset", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("yoffset", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("zoffset", ParamType::TGLint, 4).value.GLintVal,
                params.getParam("width", ParamType::TGLsizei, 5).value.GLsizeiVal,
                params.getParam("height", ParamType::TGLsizei, 6).value.GLsizeiVal,
                params.getParam("depth", ParamType::TGLsizei, 7).value.GLsizeiVal,
                params.getParam("format", ParamType::TGLenum, 8).value.GLenumVal,
                params.getParam("type", ParamType::TGLenum, 9).value.GLenumVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pixels", ParamType::TvoidConstPointer, 10)));
            break;
        case gl::EntryPoint::TransformFeedbackVaryings:
            context->transformFeedbackVaryings(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                replayContext->getAsPointerConstPointer<const GLchar *const *>(
                    params.getParam("varyings", ParamType::TGLcharConstPointerPointer, 2)),
                params.getParam("bufferMode", ParamType::TGLenum, 3).value.GLenumVal);
            break;
        case gl::EntryPoint::Translatef:
            context->translatef(params.getParam("x", ParamType::TGLfloat, 0).value.GLfloatVal,
                                params.getParam("y", ParamType::TGLfloat, 1).value.GLfloatVal,
                                params.getParam("z", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Translatex:
            context->translatex(params.getParam("x", ParamType::TGLfixed, 0).value.GLfixedVal,
                                params.getParam("y", ParamType::TGLfixed, 1).value.GLfixedVal,
                                params.getParam("z", ParamType::TGLfixed, 2).value.GLfixedVal);
            break;
        case gl::EntryPoint::Uniform1f:
            context->uniform1f(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::Uniform1fv:
            context->uniform1fv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("value", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform1i:
            context->uniform1i(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLint, 1).value.GLintVal);
            break;
        case gl::EntryPoint::Uniform1iv:
            context->uniform1iv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLint *>(
                                    params.getParam("value", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform1ui:
            context->uniform1ui(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("v0", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::Uniform1uiv:
            context->uniform1uiv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                     .value.UniformLocationVal,
                                 params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                 replayContext->getAsConstPointer<const GLuint *>(
                                     params.getParam("value", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform2f:
            context->uniform2f(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLfloat, 1).value.GLfloatVal,
                               params.getParam("v1", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::Uniform2fv:
            context->uniform2fv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("value", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform2i:
            context->uniform2i(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLint, 1).value.GLintVal,
                               params.getParam("v1", ParamType::TGLint, 2).value.GLintVal);
            break;
        case gl::EntryPoint::Uniform2iv:
            context->uniform2iv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLint *>(
                                    params.getParam("value", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform2ui:
            context->uniform2ui(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("v0", ParamType::TGLuint, 1).value.GLuintVal,
                                params.getParam("v1", ParamType::TGLuint, 2).value.GLuintVal);
            break;
        case gl::EntryPoint::Uniform2uiv:
            context->uniform2uiv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                     .value.UniformLocationVal,
                                 params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                 replayContext->getAsConstPointer<const GLuint *>(
                                     params.getParam("value", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform3f:
            context->uniform3f(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLfloat, 1).value.GLfloatVal,
                               params.getParam("v1", ParamType::TGLfloat, 2).value.GLfloatVal,
                               params.getParam("v2", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::Uniform3fv:
            context->uniform3fv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("value", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform3i:
            context->uniform3i(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLint, 1).value.GLintVal,
                               params.getParam("v1", ParamType::TGLint, 2).value.GLintVal,
                               params.getParam("v2", ParamType::TGLint, 3).value.GLintVal);
            break;
        case gl::EntryPoint::Uniform3iv:
            context->uniform3iv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLint *>(
                                    params.getParam("value", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform3ui:
            context->uniform3ui(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("v0", ParamType::TGLuint, 1).value.GLuintVal,
                                params.getParam("v1", ParamType::TGLuint, 2).value.GLuintVal,
                                params.getParam("v2", ParamType::TGLuint, 3).value.GLuintVal);
            break;
        case gl::EntryPoint::Uniform3uiv:
            context->uniform3uiv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                     .value.UniformLocationVal,
                                 params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                 replayContext->getAsConstPointer<const GLuint *>(
                                     params.getParam("value", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform4f:
            context->uniform4f(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLfloat, 1).value.GLfloatVal,
                               params.getParam("v1", ParamType::TGLfloat, 2).value.GLfloatVal,
                               params.getParam("v2", ParamType::TGLfloat, 3).value.GLfloatVal,
                               params.getParam("v3", ParamType::TGLfloat, 4).value.GLfloatVal);
            break;
        case gl::EntryPoint::Uniform4fv:
            context->uniform4fv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLfloat *>(
                                    params.getParam("value", ParamType::TGLfloatConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform4i:
            context->uniform4i(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                   .value.UniformLocationVal,
                               params.getParam("v0", ParamType::TGLint, 1).value.GLintVal,
                               params.getParam("v1", ParamType::TGLint, 2).value.GLintVal,
                               params.getParam("v2", ParamType::TGLint, 3).value.GLintVal,
                               params.getParam("v3", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::Uniform4iv:
            context->uniform4iv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                replayContext->getAsConstPointer<const GLint *>(
                                    params.getParam("value", ParamType::TGLintConstPointer, 2)));
            break;
        case gl::EntryPoint::Uniform4ui:
            context->uniform4ui(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                    .value.UniformLocationVal,
                                params.getParam("v0", ParamType::TGLuint, 1).value.GLuintVal,
                                params.getParam("v1", ParamType::TGLuint, 2).value.GLuintVal,
                                params.getParam("v2", ParamType::TGLuint, 3).value.GLuintVal,
                                params.getParam("v3", ParamType::TGLuint, 4).value.GLuintVal);
            break;
        case gl::EntryPoint::Uniform4uiv:
            context->uniform4uiv(params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                                     .value.UniformLocationVal,
                                 params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                                 replayContext->getAsConstPointer<const GLuint *>(
                                     params.getParam("value", ParamType::TGLuintConstPointer, 2)));
            break;
        case gl::EntryPoint::UniformBlockBinding:
            context->uniformBlockBinding(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal,
                params.getParam("uniformBlockIndex", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("uniformBlockBinding", ParamType::TGLuint, 2).value.GLuintVal);
            break;
        case gl::EntryPoint::UniformMatrix2fv:
            context->uniformMatrix2fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix2x3fv:
            context->uniformMatrix2x3fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix2x4fv:
            context->uniformMatrix2x4fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix3fv:
            context->uniformMatrix3fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix3x2fv:
            context->uniformMatrix3x2fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix3x4fv:
            context->uniformMatrix3x4fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix4fv:
            context->uniformMatrix4fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix4x2fv:
            context->uniformMatrix4x2fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UniformMatrix4x3fv:
            context->uniformMatrix4x3fv(
                params.getParam("locationPacked", ParamType::TUniformLocation, 0)
                    .value.UniformLocationVal,
                params.getParam("count", ParamType::TGLsizei, 1).value.GLsizeiVal,
                params.getParam("transpose", ParamType::TGLboolean, 2).value.GLbooleanVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("value", ParamType::TGLfloatConstPointer, 3)));
            break;
        case gl::EntryPoint::UnmapBuffer:
            context->unmapBuffer(params.getParam("targetPacked", ParamType::TBufferBinding, 0)
                                     .value.BufferBindingVal);
            break;
        case gl::EntryPoint::UseProgram:
            context->useProgram(params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                                    .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::UseProgramStages:
            context->useProgramStages(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal,
                params.getParam("stages", ParamType::TGLbitfield, 1).value.GLbitfieldVal,
                params.getParam("programPacked", ParamType::TShaderProgramID, 2)
                    .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::ValidateProgram:
            context->validateProgram(
                params.getParam("programPacked", ParamType::TShaderProgramID, 0)
                    .value.ShaderProgramIDVal);
            break;
        case gl::EntryPoint::ValidateProgramPipeline:
            context->validateProgramPipeline(
                params.getParam("pipelinePacked", ParamType::TProgramPipelineID, 0)
                    .value.ProgramPipelineIDVal);
            break;
        case gl::EntryPoint::VertexAttrib1f:
            context->vertexAttrib1f(params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                                    params.getParam("x", ParamType::TGLfloat, 1).value.GLfloatVal);
            break;
        case gl::EntryPoint::VertexAttrib1fv:
            context->vertexAttrib1fv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("v", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttrib2f:
            context->vertexAttrib2f(params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                                    params.getParam("x", ParamType::TGLfloat, 1).value.GLfloatVal,
                                    params.getParam("y", ParamType::TGLfloat, 2).value.GLfloatVal);
            break;
        case gl::EntryPoint::VertexAttrib2fv:
            context->vertexAttrib2fv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("v", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttrib3f:
            context->vertexAttrib3f(params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                                    params.getParam("x", ParamType::TGLfloat, 1).value.GLfloatVal,
                                    params.getParam("y", ParamType::TGLfloat, 2).value.GLfloatVal,
                                    params.getParam("z", ParamType::TGLfloat, 3).value.GLfloatVal);
            break;
        case gl::EntryPoint::VertexAttrib3fv:
            context->vertexAttrib3fv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("v", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttrib4f:
            context->vertexAttrib4f(params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                                    params.getParam("x", ParamType::TGLfloat, 1).value.GLfloatVal,
                                    params.getParam("y", ParamType::TGLfloat, 2).value.GLfloatVal,
                                    params.getParam("z", ParamType::TGLfloat, 3).value.GLfloatVal,
                                    params.getParam("w", ParamType::TGLfloat, 4).value.GLfloatVal);
            break;
        case gl::EntryPoint::VertexAttrib4fv:
            context->vertexAttrib4fv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLfloat *>(
                    params.getParam("v", ParamType::TGLfloatConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttribBinding:
            context->vertexAttribBinding(
                params.getParam("attribindex", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("bindingindex", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexAttribDivisor:
            context->vertexAttribDivisor(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("divisor", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexAttribFormat:
            context->vertexAttribFormat(
                params.getParam("attribindex", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("size", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 2)
                    .value.VertexAttribTypeVal,
                params.getParam("normalized", ParamType::TGLboolean, 3).value.GLbooleanVal,
                params.getParam("relativeoffset", ParamType::TGLuint, 4).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexAttribI4i:
            context->vertexAttribI4i(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("x", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("y", ParamType::TGLint, 2).value.GLintVal,
                params.getParam("z", ParamType::TGLint, 3).value.GLintVal,
                params.getParam("w", ParamType::TGLint, 4).value.GLintVal);
            break;
        case gl::EntryPoint::VertexAttribI4iv:
            context->vertexAttribI4iv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLint *>(
                    params.getParam("v", ParamType::TGLintConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttribI4ui:
            context->vertexAttribI4ui(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("x", ParamType::TGLuint, 1).value.GLuintVal,
                params.getParam("y", ParamType::TGLuint, 2).value.GLuintVal,
                params.getParam("z", ParamType::TGLuint, 3).value.GLuintVal,
                params.getParam("w", ParamType::TGLuint, 4).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexAttribI4uiv:
            context->vertexAttribI4uiv(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                replayContext->getAsConstPointer<const GLuint *>(
                    params.getParam("v", ParamType::TGLuintConstPointer, 1)));
            break;
        case gl::EntryPoint::VertexAttribIFormat:
            context->vertexAttribIFormat(
                params.getParam("attribindex", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("size", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 2)
                    .value.VertexAttribTypeVal,
                params.getParam("relativeoffset", ParamType::TGLuint, 3).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexAttribIPointer:
            context->vertexAttribIPointer(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("size", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 2)
                    .value.VertexAttribTypeVal,
                params.getParam("stride", ParamType::TGLsizei, 3).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 4)));
            break;
        case gl::EntryPoint::VertexAttribPointer:
            context->vertexAttribPointer(
                params.getParam("index", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("size", ParamType::TGLint, 1).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 2)
                    .value.VertexAttribTypeVal,
                params.getParam("normalized", ParamType::TGLboolean, 3).value.GLbooleanVal,
                params.getParam("stride", ParamType::TGLsizei, 4).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 5)));
            break;
        case gl::EntryPoint::VertexBindingDivisor:
            context->vertexBindingDivisor(
                params.getParam("bindingindex", ParamType::TGLuint, 0).value.GLuintVal,
                params.getParam("divisor", ParamType::TGLuint, 1).value.GLuintVal);
            break;
        case gl::EntryPoint::VertexPointer:
            context->vertexPointer(
                params.getParam("size", ParamType::TGLint, 0).value.GLintVal,
                params.getParam("typePacked", ParamType::TVertexAttribType, 1)
                    .value.VertexAttribTypeVal,
                params.getParam("stride", ParamType::TGLsizei, 2).value.GLsizeiVal,
                replayContext->getAsConstPointer<const void *>(
                    params.getParam("pointer", ParamType::TvoidConstPointer, 3)));
            break;
        case gl::EntryPoint::Viewport:
            context->viewport(params.getParam("x", ParamType::TGLint, 0).value.GLintVal,
                              params.getParam("y", ParamType::TGLint, 1).value.GLintVal,
                              params.getParam("width", ParamType::TGLsizei, 2).value.GLsizeiVal,
                              params.getParam("height", ParamType::TGLsizei, 3).value.GLsizeiVal);
            break;
        case gl::EntryPoint::WaitSync:
            context->waitSync(
                params.getParam("sync", ParamType::TGLsync, 0).value.GLsyncVal,
                params.getParam("flags", ParamType::TGLbitfield, 1).value.GLbitfieldVal,
                params.getParam("timeout", ParamType::TGLuint64, 2).value.GLuint64Val);
            break;
        default:
            UNREACHABLE();
    }
}

}  // namespace angle
