// GENERATED FILE - DO NOT EDIT.
// Generated by gen_interpreter_utils.py using data from gl.xml and gl_angle_ext.xml.
//
// Copyright 2022 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.
//
// trace_interpreter_autogen.cpp:
//   Helper code for trace interpreter.

#include "angle_trace_gl.h"
#include "trace_fixture.h"
#include "trace_interpreter.h"

namespace angle
{
CallCapture ParseCallCapture(const Token &nameToken,
                             size_t numParamTokens,
                             const Token *paramTokens,
                             const TraceStringMap &strings)
{
    if (strcmp(nameToken, "eglAcquireExternalContextANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLACQUIREEXTERNALCONTEXTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLAcquireExternalContextANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglBindAPI") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLBINDAPIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLBindAPI, std::move(params));
    }
    if (strcmp(nameToken, "eglBindTexImage") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLBINDTEXIMAGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLBindTexImage, std::move(params));
    }
    if (strcmp(nameToken, "eglChooseConfig") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCHOOSECONFIGPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLChooseConfig, std::move(params));
    }
    if (strcmp(nameToken, "eglClientWaitSync") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCLIENTWAITSYNCPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLClientWaitSync, std::move(params));
    }
    if (strcmp(nameToken, "eglClientWaitSyncKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCLIENTWAITSYNCKHRPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLClientWaitSyncKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglCopyBuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCOPYBUFFERSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLCopyBuffers, std::move(params));
    }
    if (strcmp(nameToken, "eglCopyMetalSharedEventANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCOPYMETALSHAREDEVENTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCopyMetalSharedEventANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateContext") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCREATECONTEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateContext, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateDeviceANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEDEVICEANGLEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLCreateDeviceANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateImage") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEIMAGEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateImage, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateImageKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCREATEIMAGEKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateImageKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateNativeClientBufferANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateNativeClientBufferANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePbufferFromClientBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreatePbufferFromClientBuffer, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePbufferSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPBUFFERSURFACEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::EGLCreatePbufferSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePixmapSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPIXMAPSURFACEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::EGLCreatePixmapSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePlatformPixmapSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreatePlatformPixmapSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePlatformPixmapSurfaceEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreatePlatformPixmapSurfaceEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePlatformWindowSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPLATFORMWINDOWSURFACEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreatePlatformWindowSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglCreatePlatformWindowSurfaceEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreatePlatformWindowSurfaceEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateStreamKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCREATESTREAMKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateStreamKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateStreamProducerD3DTextureANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::EGLCreateStreamProducerD3DTextureANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATESYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateSync, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateSyncKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLCREATESYNCKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLCreateSyncKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglCreateWindowSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLCREATEWINDOWSURFACEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::EGLCreateWindowSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglDebugMessageControlKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLDEBUGMESSAGECONTROLKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLDebugMessageControlKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroyContext") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYCONTEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroyContext, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroyImage") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYIMAGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroyImage, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroyImageKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYIMAGEKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroyImageKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroyStreamKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYSTREAMKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroyStreamKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroySurface") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYSURFACEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroySurface, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroySync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLDESTROYSYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroySync, std::move(params));
    }
    if (strcmp(nameToken, "eglDestroySyncKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLDESTROYSYNCKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLDestroySyncKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglDupNativeFenceFDANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLDUPNATIVEFENCEFDANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLDupNativeFenceFDANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglExportVkImageANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLEXPORTVKIMAGEANGLEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::EGLExportVkImageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglForceGPUSwitchANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLFORCEGPUSWITCHANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::EGLForceGPUSwitchANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglGetCompositorTimingANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETCOMPOSITORTIMINGANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetCompositorTimingANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetCompositorTimingSupportedANDROID") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::EGLGetCompositorTimingSupportedANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetConfigAttrib") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLGETCONFIGATTRIBPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetConfigAttrib, std::move(params));
    }
    if (strcmp(nameToken, "eglGetConfigs") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETCONFIGSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetConfigs, std::move(params));
    }
    if (strcmp(nameToken, "eglGetCurrentContext") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETCURRENTCONTEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLGetCurrentContext, std::move(params));
    }
    if (strcmp(nameToken, "eglGetCurrentDisplay") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETCURRENTDISPLAYPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLGetCurrentDisplay, std::move(params));
    }
    if (strcmp(nameToken, "eglGetCurrentSurface") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETCURRENTSURFACEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLGetCurrentSurface, std::move(params));
    }
    if (strcmp(nameToken, "eglGetDisplay") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETDISPLAYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetDisplay, std::move(params));
    }
    if (strcmp(nameToken, "eglGetError") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETERRORPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetError, std::move(params));
    }
    if (strcmp(nameToken, "eglGetFrameTimestampSupportedANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetFrameTimestampSupportedANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetFrameTimestampsANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETFRAMETIMESTAMPSANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetFrameTimestampsANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetMscRateANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLGETMSCRATEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetMscRateANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglGetNativeClientBufferANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetNativeClientBufferANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetNextFrameIdANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETNEXTFRAMEIDANDROIDPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::EGLGetNextFrameIdANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglGetPlatformDisplay") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETPLATFORMDISPLAYPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::EGLGetPlatformDisplay, std::move(params));
    }
    if (strcmp(nameToken, "eglGetPlatformDisplayEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETPLATFORMDISPLAYEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::EGLGetPlatformDisplayEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglGetProcAddress") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLGETPROCADDRESSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetProcAddress, std::move(params));
    }
    if (strcmp(nameToken, "eglGetSyncAttrib") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLGETSYNCATTRIBPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetSyncAttrib, std::move(params));
    }
    if (strcmp(nameToken, "eglGetSyncAttribKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLGETSYNCATTRIBKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLGetSyncAttribKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglGetSyncValuesCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLGETSYNCVALUESCHROMIUMPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::EGLGetSyncValuesCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "eglHandleGPUSwitchANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLHANDLEGPUSWITCHANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::EGLHandleGPUSwitchANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglInitialize") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLINITIALIZEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLInitialize, std::move(params));
    }
    if (strcmp(nameToken, "eglLabelObjectKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLLABELOBJECTKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLLabelObjectKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglLockSurfaceKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLLOCKSURFACEKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLLockSurfaceKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglLockVulkanQueueANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLLOCKVULKANQUEUEANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::EGLLockVulkanQueueANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglMakeCurrent") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLMAKECURRENTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLMakeCurrent, std::move(params));
    }
    if (strcmp(nameToken, "eglPostSubBufferNV") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLPOSTSUBBUFFERNVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLPostSubBufferNV, std::move(params));
    }
    if (strcmp(nameToken, "eglPrepareSwapBuffersANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPREPARESWAPBUFFERSANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLPrepareSwapBuffersANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglPresentationTimeANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPRESENTATIONTIMEANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLPresentationTimeANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglProgramCacheGetAttribANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLProgramCacheGetAttribANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglProgramCachePopulateANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPROGRAMCACHEPOPULATEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLProgramCachePopulateANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglProgramCacheQueryANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPROGRAMCACHEQUERYANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLProgramCacheQueryANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglProgramCacheResizeANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLPROGRAMCACHERESIZEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLProgramCacheResizeANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryAPI") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYAPIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryAPI, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryContext") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLQUERYCONTEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryContext, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDebugKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLQUERYDEBUGKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryDebugKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDeviceAttribEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDEVICEATTRIBEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::EGLQueryDeviceAttribEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDeviceStringEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDEVICESTRINGEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::EGLQueryDeviceStringEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDisplayAttribANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryDisplayAttribANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDisplayAttribEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDISPLAYATTRIBEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::EGLQueryDisplayAttribEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDmaBufFormatsEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDMABUFFORMATSEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::EGLQueryDmaBufFormatsEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryDmaBufModifiersEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYDMABUFMODIFIERSEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryDmaBufModifiersEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryStreamKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLQUERYSTREAMKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryStreamKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryStreamu64KHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSTREAMU64KHRPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLQueryStreamu64KHR, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryString") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSTRINGPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLQueryString, std::move(params));
    }
    if (strcmp(nameToken, "eglQueryStringiANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSTRINGIANGLEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLQueryStringiANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglQuerySupportedCompressionRatesEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSUPPORTEDCOMPRESSIONRATESEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLQuerySupportedCompressionRatesEXT, std::move(params));
    }
    if (strcmp(nameToken, "eglQuerySurface") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLQUERYSURFACEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLQuerySurface, std::move(params));
    }
    if (strcmp(nameToken, "eglQuerySurface64KHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSURFACE64KHRPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::EGLQuerySurface64KHR, std::move(params));
    }
    if (strcmp(nameToken, "eglQuerySurfacePointerANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLQUERYSURFACEPOINTERANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLQuerySurfacePointerANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglReacquireHighPowerGPUANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLREACQUIREHIGHPOWERGPUANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLReacquireHighPowerGPUANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglReleaseDeviceANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLRELEASEDEVICEANGLEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::EGLReleaseDeviceANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglReleaseExternalContextANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLRELEASEEXTERNALCONTEXTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLReleaseExternalContextANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglReleaseHighPowerGPUANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLRELEASEHIGHPOWERGPUANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLReleaseHighPowerGPUANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglReleaseTexImage") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLRELEASETEXIMAGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLReleaseTexImage, std::move(params));
    }
    if (strcmp(nameToken, "eglReleaseThread") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLRELEASETHREADPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLReleaseThread, std::move(params));
    }
    if (strcmp(nameToken, "eglSetBlobCacheFuncsANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSETBLOBCACHEFUNCSANDROIDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLSetBlobCacheFuncsANDROID, std::move(params));
    }
    if (strcmp(nameToken, "eglSetDamageRegionKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSETDAMAGEREGIONKHRPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::EGLSetDamageRegionKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglSetValidationEnabledANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSETVALIDATIONENABLEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLSetValidationEnabledANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglSignalSyncKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLSIGNALSYNCKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLSignalSyncKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglStreamAttribKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLSTREAMATTRIBKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLStreamAttribKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglStreamConsumerAcquireKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSTREAMCONSUMERACQUIREKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLStreamConsumerAcquireKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglStreamConsumerGLTextureExternalAttribsNV") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLStreamConsumerGLTextureExternalAttribsNV,
                           std::move(params));
    }
    if (strcmp(nameToken, "eglStreamConsumerGLTextureExternalKHR") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::EGLStreamConsumerGLTextureExternalKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglStreamConsumerReleaseKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSTREAMCONSUMERRELEASEKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLStreamConsumerReleaseKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglStreamPostD3DTextureANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLStreamPostD3DTextureANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglSurfaceAttrib") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLSURFACEATTRIBPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLSurfaceAttrib, std::move(params));
    }
    if (strcmp(nameToken, "eglSwapBuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSWAPBUFFERSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLSwapBuffers, std::move(params));
    }
    if (strcmp(nameToken, "eglSwapBuffersWithDamageKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLSwapBuffersWithDamageKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglSwapInterval") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLSWAPINTERVALPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLSwapInterval, std::move(params));
    }
    if (strcmp(nameToken, "eglTerminate") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLTERMINATEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLTerminate, std::move(params));
    }
    if (strcmp(nameToken, "eglUnlockSurfaceKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNEGLUNLOCKSURFACEKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::EGLUnlockSurfaceKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglUnlockVulkanQueueANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLUNLOCKVULKANQUEUEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLUnlockVulkanQueueANGLE, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitClient") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITCLIENTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitClient, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitGL") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITGLPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitGL, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitNative") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITNATIVEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitNative, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITSYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitSync, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitSyncKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITSYNCKHRPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitSyncKHR, std::move(params));
    }
    if (strcmp(nameToken, "eglWaitUntilWorkScheduledANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNEGLWAITUNTILWORKSCHEDULEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::EGLWaitUntilWorkScheduledANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glAcquireTexturesANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLACQUIRETEXTURESANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLAcquireTexturesANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glActiveShaderProgram") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLACTIVESHADERPROGRAMPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLActiveShaderProgram, std::move(params));
    }
    if (strcmp(nameToken, "glActiveShaderProgramEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLACTIVESHADERPROGRAMEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLActiveShaderProgramEXT, std::move(params));
    }
    if (strcmp(nameToken, "glActiveTexture") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLACTIVETEXTUREPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLActiveTexture, std::move(params));
    }
    if (strcmp(nameToken, "glAlphaFunc") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLALPHAFUNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLAlphaFunc, std::move(params));
    }
    if (strcmp(nameToken, "glAlphaFuncx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLALPHAFUNCXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLAlphaFuncx, std::move(params));
    }
    if (strcmp(nameToken, "glAttachShader") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLATTACHSHADERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLAttachShader, std::move(params));
    }
    if (strcmp(nameToken, "glBeginPerfMonitorAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBEGINPERFMONITORAMDPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLBeginPerfMonitorAMD, std::move(params));
    }
    if (strcmp(nameToken, "glBeginPixelLocalStorageANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBEGINPIXELLOCALSTORAGEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBeginPixelLocalStorageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glBeginQuery") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBEGINQUERYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBeginQuery, std::move(params));
    }
    if (strcmp(nameToken, "glBeginQueryEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBEGINQUERYEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBeginQueryEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBeginTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBEGINTRANSFORMFEEDBACKPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLBeginTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glBindAttribLocation") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDATTRIBLOCATIONPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLBindAttribLocation, std::move(params));
    }
    if (strcmp(nameToken, "glBindBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDBUFFERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBindBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glBindBufferBase") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDBUFFERBASEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindBufferBase, std::move(params));
    }
    if (strcmp(nameToken, "glBindBufferRange") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDBUFFERRANGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindBufferRange, std::move(params));
    }
    if (strcmp(nameToken, "glBindFragDataLocationEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDFRAGDATALOCATIONEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBindFragDataLocationEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBindFragDataLocationIndexedEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBindFragDataLocationIndexedEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBindFramebuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDFRAMEBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindFramebuffer, std::move(params));
    }
    if (strcmp(nameToken, "glBindFramebufferOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDFRAMEBUFFEROESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLBindFramebufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glBindImageTexture") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDIMAGETEXTUREPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindImageTexture, std::move(params));
    }
    if (strcmp(nameToken, "glBindProgramPipeline") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDPROGRAMPIPELINEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLBindProgramPipeline, std::move(params));
    }
    if (strcmp(nameToken, "glBindProgramPipelineEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDPROGRAMPIPELINEEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLBindProgramPipelineEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBindRenderbuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDRENDERBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindRenderbuffer, std::move(params));
    }
    if (strcmp(nameToken, "glBindRenderbufferOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDRENDERBUFFEROESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLBindRenderbufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glBindSampler") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDSAMPLERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBindSampler, std::move(params));
    }
    if (strcmp(nameToken, "glBindTexture") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDTEXTUREPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBindTexture, std::move(params));
    }
    if (strcmp(nameToken, "glBindTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDTRANSFORMFEEDBACKPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLBindTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glBindUniformLocationCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDUNIFORMLOCATIONCHROMIUMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBindUniformLocationCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glBindVertexArray") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDVERTEXARRAYPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindVertexArray, std::move(params));
    }
    if (strcmp(nameToken, "glBindVertexArrayOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBINDVERTEXARRAYOESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLBindVertexArrayOES, std::move(params));
    }
    if (strcmp(nameToken, "glBindVertexBuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBINDVERTEXBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBindVertexBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glBlendBarrier") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDBARRIERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendBarrier, std::move(params));
    }
    if (strcmp(nameToken, "glBlendBarrierKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDBARRIERKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendBarrierKHR, std::move(params));
    }
    if (strcmp(nameToken, "glBlendColor") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDCOLORPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendColor, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquation") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquation, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationOES, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationSeparate") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONSEPARATEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLBlendEquationSeparate, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationSeparatei") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONSEPARATEIPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLBlendEquationSeparatei, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationSeparateiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONSEPARATEIEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationSeparateiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationSeparateiOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONSEPARATEIOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationSeparateiOES, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationi") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationi, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationiEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONIEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBlendEquationiOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDEQUATIONIOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendEquationiOES, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFunc") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDFUNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendFunc, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFuncSeparate") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDFUNCSEPARATEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendFuncSeparate, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFuncSeparatei") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDFUNCSEPARATEIPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLBlendFuncSeparatei, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFuncSeparateiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDFUNCSEPARATEIEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLBlendFuncSeparateiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFuncSeparateiOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDFUNCSEPARATEIOESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLBlendFuncSeparateiOES, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFunci") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLENDFUNCIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendFunci, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFunciEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDFUNCIEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendFunciEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBlendFunciOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLENDFUNCIOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlendFunciOES, std::move(params));
    }
    if (strcmp(nameToken, "glBlitFramebuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLITFRAMEBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlitFramebuffer, std::move(params));
    }
    if (strcmp(nameToken, "glBlitFramebufferANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLITFRAMEBUFFERANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLBlitFramebufferANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glBlitFramebufferNV") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBLITFRAMEBUFFERNVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBlitFramebufferNV, std::move(params));
    }
    if (strcmp(nameToken, "glBlobCacheCallbacksANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBLOBCACHECALLBACKSANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBlobCacheCallbacksANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glBufferData") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBUFFERDATAPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLBufferData, std::move(params));
    }
    if (strcmp(nameToken, "glBufferStorageEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBUFFERSTORAGEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBufferStorageEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBufferStorageExternalEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBUFFERSTORAGEEXTERNALEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLBufferStorageExternalEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBufferStorageMemEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLBUFFERSTORAGEMEMEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLBufferStorageMemEXT, std::move(params));
    }
    if (strcmp(nameToken, "glBufferSubData") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLBUFFERSUBDATAPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLBufferSubData, std::move(params));
    }
    if (strcmp(nameToken, "glCheckFramebufferStatus") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCHECKFRAMEBUFFERSTATUSPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLCheckFramebufferStatus, std::move(params));
    }
    if (strcmp(nameToken, "glCheckFramebufferStatusOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCHECKFRAMEBUFFERSTATUSOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCheckFramebufferStatusOES, std::move(params));
    }
    if (strcmp(nameToken, "glClear") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClear, std::move(params));
    }
    if (strcmp(nameToken, "glClearBufferfi") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLEARBUFFERFIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClearBufferfi, std::move(params));
    }
    if (strcmp(nameToken, "glClearBufferfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLEARBUFFERFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClearBufferfv, std::move(params));
    }
    if (strcmp(nameToken, "glClearBufferiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLEARBUFFERIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClearBufferiv, std::move(params));
    }
    if (strcmp(nameToken, "glClearBufferuiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLEARBUFFERUIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClearBufferuiv, std::move(params));
    }
    if (strcmp(nameToken, "glClearColor") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARCOLORPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClearColor, std::move(params));
    }
    if (strcmp(nameToken, "glClearColorx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARCOLORXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClearColorx, std::move(params));
    }
    if (strcmp(nameToken, "glClearDepthf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARDEPTHFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClearDepthf, std::move(params));
    }
    if (strcmp(nameToken, "glClearDepthx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARDEPTHXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClearDepthx, std::move(params));
    }
    if (strcmp(nameToken, "glClearStencil") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARSTENCILPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClearStencil, std::move(params));
    }
    if (strcmp(nameToken, "glClearTexImageEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLEARTEXIMAGEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClearTexImageEXT, std::move(params));
    }
    if (strcmp(nameToken, "glClearTexSubImageEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLEARTEXSUBIMAGEEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLClearTexSubImageEXT, std::move(params));
    }
    if (strcmp(nameToken, "glClientActiveTexture") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLIENTACTIVETEXTUREPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLClientActiveTexture, std::move(params));
    }
    if (strcmp(nameToken, "glClientWaitSync") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLIENTWAITSYNCPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClientWaitSync, std::move(params));
    }
    if (strcmp(nameToken, "glClipControlEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCLIPCONTROLEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLClipControlEXT, std::move(params));
    }
    if (strcmp(nameToken, "glClipPlanef") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLIPPLANEFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClipPlanef, std::move(params));
    }
    if (strcmp(nameToken, "glClipPlanex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCLIPPLANEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLClipPlanex, std::move(params));
    }
    if (strcmp(nameToken, "glColor4f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLOR4FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColor4f, std::move(params));
    }
    if (strcmp(nameToken, "glColor4ub") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLOR4UBPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColor4ub, std::move(params));
    }
    if (strcmp(nameToken, "glColor4x") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLOR4XPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColor4x, std::move(params));
    }
    if (strcmp(nameToken, "glColorMask") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLORMASKPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColorMask, std::move(params));
    }
    if (strcmp(nameToken, "glColorMaski") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLORMASKIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColorMaski, std::move(params));
    }
    if (strcmp(nameToken, "glColorMaskiEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOLORMASKIEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLColorMaskiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glColorMaskiOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOLORMASKIOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLColorMaskiOES, std::move(params));
    }
    if (strcmp(nameToken, "glColorPointer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOLORPOINTERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLColorPointer, std::move(params));
    }
    if (strcmp(nameToken, "glCompileShader") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOMPILESHADERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCompileShader, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedCopyTextureCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDCOPYTEXTURECHROMIUMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCompressedCopyTextureCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexImage2D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXIMAGE2DPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLCompressedTexImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexImage3D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXIMAGE3DPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLCompressedTexImage3D, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexImage3DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXIMAGE3DOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCompressedTexImage3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexSubImage2D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCompressedTexSubImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexSubImage3D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCompressedTexSubImage3D, std::move(params));
    }
    if (strcmp(nameToken, "glCompressedTexSubImage3DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCompressedTexSubImage3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glCopyBufferSubData") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOPYBUFFERSUBDATAPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCopyBufferSubData, std::move(params));
    }
    if (strcmp(nameToken, "glCopyImageSubData") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOPYIMAGESUBDATAPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCopyImageSubData, std::move(params));
    }
    if (strcmp(nameToken, "glCopyImageSubDataEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYIMAGESUBDATAEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLCopyImageSubDataEXT, std::move(params));
    }
    if (strcmp(nameToken, "glCopyImageSubDataOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYIMAGESUBDATAOESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLCopyImageSubDataOES, std::move(params));
    }
    if (strcmp(nameToken, "glCopySubTexture3DANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYSUBTEXTURE3DANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLCopySubTexture3DANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glCopySubTextureCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYSUBTEXTURECHROMIUMPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLCopySubTextureCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTexImage2D") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOPYTEXIMAGE2DPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCopyTexImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTexSubImage2D") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOPYTEXSUBIMAGE2DPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCopyTexSubImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTexSubImage3D") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCOPYTEXSUBIMAGE3DPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCopyTexSubImage3D, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTexSubImage3DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYTEXSUBIMAGE3DOESPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLCopyTexSubImage3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTexture3DANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYTEXTURE3DANGLEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLCopyTexture3DANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glCopyTextureCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOPYTEXTURECHROMIUMPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLCopyTextureCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glCoverageModulationCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCOVERAGEMODULATIONCHROMIUMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCoverageModulationCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glCreateMemoryObjectsEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCREATEMEMORYOBJECTSEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLCreateMemoryObjectsEXT, std::move(params));
    }
    if (strcmp(nameToken, "glCreateProgram") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLCREATEPROGRAMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLCreateProgram, std::move(params));
    }
    if (strcmp(nameToken, "glCreateShader") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCREATESHADERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLCreateShader, std::move(params));
    }
    if (strcmp(nameToken, "glCreateShaderProgramv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCREATESHADERPROGRAMVPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLCreateShaderProgramv, std::move(params));
    }
    if (strcmp(nameToken, "glCreateShaderProgramvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCREATESHADERPROGRAMVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCreateShaderProgramvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glCullFace") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCULLFACEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLCullFace, std::move(params));
    }
    if (strcmp(nameToken, "glCurrentPaletteMatrixOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLCURRENTPALETTEMATRIXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLCurrentPaletteMatrixOES, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageCallback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGECALLBACKPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLDebugMessageCallback, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageCallbackKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGECALLBACKKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDebugMessageCallbackKHR, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageControl") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGECONTROLPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLDebugMessageControl, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageControlKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGECONTROLKHRPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDebugMessageControlKHR, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageInsert") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGEINSERTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLDebugMessageInsert, std::move(params));
    }
    if (strcmp(nameToken, "glDebugMessageInsertKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEBUGMESSAGEINSERTKHRPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDebugMessageInsertKHR, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteBuffers") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETEBUFFERSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteBuffers, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteFencesNV") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETEFENCESNVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteFencesNV, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteFramebuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEFRAMEBUFFERSPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLDeleteFramebuffers, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteFramebuffersOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEFRAMEBUFFERSOESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDeleteFramebuffersOES, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteMemoryObjectsEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEMEMORYOBJECTSEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDeleteMemoryObjectsEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDeletePerfMonitorsAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEPERFMONITORSAMDPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDeletePerfMonitorsAMD, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteProgram") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETEPROGRAMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteProgram, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteProgramPipelines") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEPROGRAMPIPELINESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDeleteProgramPipelines, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteProgramPipelinesEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEPROGRAMPIPELINESEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteProgramPipelinesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteQueries") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETEQUERIESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteQueries, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteQueriesEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETEQUERIESEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteQueriesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteRenderbuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETERENDERBUFFERSPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLDeleteRenderbuffers, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteRenderbuffersOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETERENDERBUFFERSOESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDeleteRenderbuffersOES, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteSamplers") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETESAMPLERSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteSamplers, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteSemaphoresEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETESEMAPHORESEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLDeleteSemaphoresEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteShader") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETESHADERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteShader, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETESYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteSync, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteTextures") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDELETETEXTURESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteTextures, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteTransformFeedbacks") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETETRANSFORMFEEDBACKSPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDeleteTransformFeedbacks, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteVertexArrays") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEVERTEXARRAYSPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLDeleteVertexArrays, std::move(params));
    }
    if (strcmp(nameToken, "glDeleteVertexArraysOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDELETEVERTEXARRAYSOESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDeleteVertexArraysOES, std::move(params));
    }
    if (strcmp(nameToken, "glDepthFunc") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEPTHFUNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDepthFunc, std::move(params));
    }
    if (strcmp(nameToken, "glDepthMask") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEPTHMASKPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDepthMask, std::move(params));
    }
    if (strcmp(nameToken, "glDepthRangef") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEPTHRANGEFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDepthRangef, std::move(params));
    }
    if (strcmp(nameToken, "glDepthRangex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDEPTHRANGEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDepthRangex, std::move(params));
    }
    if (strcmp(nameToken, "glDetachShader") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDETACHSHADERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDetachShader, std::move(params));
    }
    if (strcmp(nameToken, "glDisable") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDisable, std::move(params));
    }
    if (strcmp(nameToken, "glDisableClientState") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLECLIENTSTATEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLDisableClientState, std::move(params));
    }
    if (strcmp(nameToken, "glDisableVertexAttribArray") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLEVERTEXATTRIBARRAYPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDisableVertexAttribArray, std::move(params));
    }
    if (strcmp(nameToken, "glDisablei") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLEIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDisablei, std::move(params));
    }
    if (strcmp(nameToken, "glDisableiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLEIEXTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDisableiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDisableiOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISABLEIOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDisableiOES, std::move(params));
    }
    if (strcmp(nameToken, "glDiscardFramebufferEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISCARDFRAMEBUFFEREXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDiscardFramebufferEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDispatchCompute") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDISPATCHCOMPUTEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDispatchCompute, std::move(params));
    }
    if (strcmp(nameToken, "glDispatchComputeIndirect") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDISPATCHCOMPUTEINDIRECTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDispatchComputeIndirect, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArrays") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawArrays, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysIndirect") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSINDIRECTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLDrawArraysIndirect, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysInstanced") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSINSTANCEDPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLDrawArraysInstanced, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysInstancedANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSINSTANCEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawArraysInstancedANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysInstancedBaseInstanceANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLDrawArraysInstancedBaseInstanceANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysInstancedBaseInstanceEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawArraysInstancedBaseInstanceEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawArraysInstancedEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWARRAYSINSTANCEDEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDrawArraysInstancedEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawBuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWBUFFERSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawBuffers, std::move(params));
    }
    if (strcmp(nameToken, "glDrawBuffersEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDRAWBUFFERSEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawBuffersEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElements") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElements, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsBaseVertex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSBASEVERTEXPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLDrawElementsBaseVertex, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsBaseVertexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSBASEVERTEXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsBaseVertexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsBaseVertexOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSBASEVERTEXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsBaseVertexOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsIndirect") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINDIRECTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLDrawElementsIndirect, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstanced") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLDrawElementsInstanced, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseInstanceEXT") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseInstanceEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseVertex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseVertex, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseVertexBaseInstanceANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseVertexBaseInstanceEXT") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseVertexBaseInstanceEXT,
                           std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseVertexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseVertexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedBaseVertexOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedBaseVertexOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawElementsInstancedEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWELEMENTSINSTANCEDEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawElementsInstancedEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawRangeElements") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLDRAWRANGEELEMENTSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawRangeElements, std::move(params));
    }
    if (strcmp(nameToken, "glDrawRangeElementsBaseVertex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawRangeElementsBaseVertex, std::move(params));
    }
    if (strcmp(nameToken, "glDrawRangeElementsBaseVertexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawRangeElementsBaseVertexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glDrawRangeElementsBaseVertexOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawRangeElementsBaseVertexOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexfOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXFOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexfOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexfvOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXFVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexfvOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexiOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXIOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexiOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXIVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexivOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexsOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXSOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexsOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexsvOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXSVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexsvOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexxOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXXOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexxOES, std::move(params));
    }
    if (strcmp(nameToken, "glDrawTexxvOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLDRAWTEXXVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLDrawTexxvOES, std::move(params));
    }
    if (strcmp(nameToken, "glEGLImageTargetRenderbufferStorageOES") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLEGLImageTargetRenderbufferStorageOES, std::move(params));
    }
    if (strcmp(nameToken, "glEGLImageTargetTexStorageEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLEGLImageTargetTexStorageEXT, std::move(params));
    }
    if (strcmp(nameToken, "glEGLImageTargetTexture2DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLEGLImageTargetTexture2DOES, std::move(params));
    }
    if (strcmp(nameToken, "glEnable") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENABLEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEnable, std::move(params));
    }
    if (strcmp(nameToken, "glEnableClientState") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLENABLECLIENTSTATEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLEnableClientState, std::move(params));
    }
    if (strcmp(nameToken, "glEnableVertexAttribArray") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENABLEVERTEXATTRIBARRAYPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLEnableVertexAttribArray, std::move(params));
    }
    if (strcmp(nameToken, "glEnablei") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENABLEIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEnablei, std::move(params));
    }
    if (strcmp(nameToken, "glEnableiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENABLEIEXTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEnableiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glEnableiOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENABLEIOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEnableiOES, std::move(params));
    }
    if (strcmp(nameToken, "glEndPerfMonitorAMD") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLENDPERFMONITORAMDPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLEndPerfMonitorAMD, std::move(params));
    }
    if (strcmp(nameToken, "glEndPixelLocalStorageANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENDPIXELLOCALSTORAGEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLEndPixelLocalStorageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glEndPixelLocalStorageImplicitANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENDPIXELLOCALSTORAGEIMPLICITANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLEndPixelLocalStorageImplicitANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glEndQuery") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENDQUERYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEndQuery, std::move(params));
    }
    if (strcmp(nameToken, "glEndQueryEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENDQUERYEXTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLEndQueryEXT, std::move(params));
    }
    if (strcmp(nameToken, "glEndTilingQCOM") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLENDTILINGQCOMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLEndTilingQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glEndTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLENDTRANSFORMFEEDBACKPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLEndTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glFenceSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFENCESYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFenceSync, std::move(params));
    }
    if (strcmp(nameToken, "glFinish") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFINISHPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFinish, std::move(params));
    }
    if (strcmp(nameToken, "glFinishFenceNV") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLFINISHFENCENVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFinishFenceNV, std::move(params));
    }
    if (strcmp(nameToken, "glFlush") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFLUSHPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFlush, std::move(params));
    }
    if (strcmp(nameToken, "glFlushMappedBufferRange") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFLUSHMAPPEDBUFFERRANGEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLFlushMappedBufferRange, std::move(params));
    }
    if (strcmp(nameToken, "glFlushMappedBufferRangeEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFlushMappedBufferRangeEXT, std::move(params));
    }
    if (strcmp(nameToken, "glFogf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFOGFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFogf, std::move(params));
    }
    if (strcmp(nameToken, "glFogfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFOGFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFogfv, std::move(params));
    }
    if (strcmp(nameToken, "glFogx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFOGXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFogx, std::move(params));
    }
    if (strcmp(nameToken, "glFogxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFOGXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFogxv, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferFetchBarrierEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferFetchBarrierEXT, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferFoveationConfigQCOM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferFoveationConfigQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferFoveationParametersQCOM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferFoveationParametersQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferMemorylessPixelLocalStorageANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERMEMORYLESSPIXELLOCALSTORAGEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferMemorylessPixelLocalStorageANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferParameteri") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERPARAMETERIPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLFramebufferParameteri, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferParameteriMESA") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERPARAMETERIMESAPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferParameteriMESA, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferPixelLocalClearValuefvANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEFVANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLFramebufferPixelLocalClearValuefvANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferPixelLocalClearValueivANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEIVANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLFramebufferPixelLocalClearValueivANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferPixelLocalClearValueuivANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERPIXELLOCALCLEARVALUEUIVANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferPixelLocalClearValueuivANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferPixelLocalStorageInterruptANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERPIXELLOCALSTORAGEINTERRUPTANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferPixelLocalStorageInterruptANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferPixelLocalStorageRestoreANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERPIXELLOCALSTORAGERESTOREANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferPixelLocalStorageRestoreANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferRenderbuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERRENDERBUFFERPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferRenderbuffer, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferRenderbufferOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERRENDERBUFFEROESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferRenderbufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferShadingRateEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERSHADINGRATEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferShadingRateEXT, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexture") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLFramebufferTexture, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexture2D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTURE2DPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLFramebufferTexture2D, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexture2DMultisampleEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTexture2DMultisampleEXT, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexture2DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTURE2DOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTexture2DOES, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexture3DOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTURE3DOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTexture3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTextureEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLFramebufferTextureEXT, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTextureLayer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTURELAYERPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTextureLayer, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTextureMultisampleMultiviewOVR") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTextureMultisampleMultiviewOVR,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTextureMultiviewOVR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTextureMultiviewOVR, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTextureOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREOESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLFramebufferTextureOES, std::move(params));
    }
    if (strcmp(nameToken, "glFramebufferTexturePixelLocalStorageANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLFRAMEBUFFERTEXTUREPIXELLOCALSTORAGEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLFramebufferTexturePixelLocalStorageANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glFrontFace") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRONTFACEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFrontFace, std::move(params));
    }
    if (strcmp(nameToken, "glFrustumf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRUSTUMFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFrustumf, std::move(params));
    }
    if (strcmp(nameToken, "glFrustumx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLFRUSTUMXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLFrustumx, std::move(params));
    }
    if (strcmp(nameToken, "glGenBuffers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENBUFFERSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGenBuffers, std::move(params));
    }
    if (strcmp(nameToken, "glGenFencesNV") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENFENCESNVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGenFencesNV, std::move(params));
    }
    if (strcmp(nameToken, "glGenFramebuffers") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENFRAMEBUFFERSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenFramebuffers, std::move(params));
    }
    if (strcmp(nameToken, "glGenFramebuffersOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENFRAMEBUFFERSOESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGenFramebuffersOES, std::move(params));
    }
    if (strcmp(nameToken, "glGenPerfMonitorsAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENPERFMONITORSAMDPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGenPerfMonitorsAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGenProgramPipelines") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENPROGRAMPIPELINESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGenProgramPipelines, std::move(params));
    }
    if (strcmp(nameToken, "glGenProgramPipelinesEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENPROGRAMPIPELINESEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGenProgramPipelinesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGenQueries") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENQUERIESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGenQueries, std::move(params));
    }
    if (strcmp(nameToken, "glGenQueriesEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENQUERIESEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenQueriesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGenRenderbuffers") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENRENDERBUFFERSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenRenderbuffers, std::move(params));
    }
    if (strcmp(nameToken, "glGenRenderbuffersOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENRENDERBUFFERSOESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGenRenderbuffersOES, std::move(params));
    }
    if (strcmp(nameToken, "glGenSamplers") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENSAMPLERSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGenSamplers, std::move(params));
    }
    if (strcmp(nameToken, "glGenSemaphoresEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENSEMAPHORESEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenSemaphoresEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGenTextures") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENTEXTURESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGenTextures, std::move(params));
    }
    if (strcmp(nameToken, "glGenTransformFeedbacks") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENTRANSFORMFEEDBACKSPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGenTransformFeedbacks, std::move(params));
    }
    if (strcmp(nameToken, "glGenVertexArrays") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENVERTEXARRAYSPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenVertexArrays, std::move(params));
    }
    if (strcmp(nameToken, "glGenVertexArraysOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGENVERTEXARRAYSOESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGenVertexArraysOES, std::move(params));
    }
    if (strcmp(nameToken, "glGenerateMipmap") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENERATEMIPMAPPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenerateMipmap, std::move(params));
    }
    if (strcmp(nameToken, "glGenerateMipmapOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGENERATEMIPMAPOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGenerateMipmapOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveAttrib") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETACTIVEATTRIBPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetActiveAttrib, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveUniform") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETACTIVEUNIFORMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetActiveUniform, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveUniformBlockName") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetActiveUniformBlockName, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveUniformBlockiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETACTIVEUNIFORMBLOCKIVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetActiveUniformBlockiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveUniformBlockivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETACTIVEUNIFORMBLOCKIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetActiveUniformBlockivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetActiveUniformsiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETACTIVEUNIFORMSIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetActiveUniformsiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetAttachedShaders") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETATTACHEDSHADERSPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetAttachedShaders, std::move(params));
    }
    if (strcmp(nameToken, "glGetAttribLocation") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETATTRIBLOCATIONPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetAttribLocation, std::move(params));
    }
    if (strcmp(nameToken, "glGetBooleani_v") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETBOOLEANI_VPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBooleani_v, std::move(params));
    }
    if (strcmp(nameToken, "glGetBooleanv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBOOLEANVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBooleanv, std::move(params));
    }
    if (strcmp(nameToken, "glGetBooleanvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBOOLEANVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetBooleanvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferParameteri64v") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPARAMETERI64VPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetBufferParameteri64v, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferParameteri64vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPARAMETERI64VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBufferParameteri64vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPARAMETERIVPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetBufferParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBufferParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferPointerv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETBUFFERPOINTERVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBufferPointerv, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferPointervOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPOINTERVOESPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetBufferPointervOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetBufferPointervRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETBUFFERPOINTERVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetBufferPointervRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetClipPlanef") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETCLIPPLANEFPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetClipPlanef, std::move(params));
    }
    if (strcmp(nameToken, "glGetClipPlanex") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETCLIPPLANEXPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetClipPlanex, std::move(params));
    }
    if (strcmp(nameToken, "glGetCompressedTexImageANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETCOMPRESSEDTEXIMAGEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetCompressedTexImageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetDebugMessageLog") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETDEBUGMESSAGELOGPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetDebugMessageLog, std::move(params));
    }
    if (strcmp(nameToken, "glGetDebugMessageLogKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETDEBUGMESSAGELOGKHRPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetDebugMessageLogKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetError") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETERRORPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetError, std::move(params));
    }
    if (strcmp(nameToken, "glGetFenceivNV") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFENCEIVNVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFenceivNV, std::move(params));
    }
    if (strcmp(nameToken, "glGetFixedv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFIXEDVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFixedv, std::move(params));
    }
    if (strcmp(nameToken, "glGetFloatv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFLOATVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFloatv, std::move(params));
    }
    if (strcmp(nameToken, "glGetFloatvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFLOATVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetFloatvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetFragDataIndexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFRAGDATAINDEXEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetFragDataIndexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetFragDataLocation") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFRAGDATALOCATIONPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetFragDataLocation, std::move(params));
    }
    if (strcmp(nameToken, "glGetFragmentShadingRatesEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFRAGMENTSHADINGRATESEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFragmentShadingRatesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferAttachmentParameteriv") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetFramebufferAttachmentParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferAttachmentParameterivOES") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetFramebufferAttachmentParameterivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferAttachmentParameterivRobustANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVROBUSTANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferAttachmentParameterivRobustANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFRAMEBUFFERPARAMETERIVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferParameterivMESA") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferParameterivMESA, std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameterfvANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERFVANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameterfvANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<
            PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERFVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                   strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameterfvRobustANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameterivANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERIVANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameterivANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameterivRobustANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<
            PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERIVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                   strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameterivRobustANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameteruivANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERUIVANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameteruivANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetFramebufferPixelLocalStorageParameteruivRobustANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<
            PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGEPARAMETERUIVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetFramebufferPixelLocalStorageParameteruivRobustANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glGetGraphicsResetStatus") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETGRAPHICSRESETSTATUSPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetGraphicsResetStatus, std::move(params));
    }
    if (strcmp(nameToken, "glGetGraphicsResetStatusEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETGRAPHICSRESETSTATUSEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetGraphicsResetStatusEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetGraphicsResetStatusKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETGRAPHICSRESETSTATUSKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetGraphicsResetStatusKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetInteger64i_v") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETINTEGER64I_VPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInteger64i_v, std::move(params));
    }
    if (strcmp(nameToken, "glGetInteger64i_vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTEGER64I_VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInteger64i_vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetInteger64v") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETINTEGER64VPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInteger64v, std::move(params));
    }
    if (strcmp(nameToken, "glGetInteger64vEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETINTEGER64VEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInteger64vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetInteger64vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTEGER64VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInteger64vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetIntegeri_v") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETINTEGERI_VPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetIntegeri_v, std::move(params));
    }
    if (strcmp(nameToken, "glGetIntegeri_vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTEGERI_VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetIntegeri_vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetIntegerv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTEGERVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetIntegerv, std::move(params));
    }
    if (strcmp(nameToken, "glGetIntegervRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTEGERVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetIntegervRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetInternalformativ") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTERNALFORMATIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetInternalformativ, std::move(params));
    }
    if (strcmp(nameToken, "glGetInternalformativRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETINTERNALFORMATIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetInternalformativRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetLightfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETLIGHTFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetLightfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetLightxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETLIGHTXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetLightxv, std::move(params));
    }
    if (strcmp(nameToken, "glGetMaterialfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETMATERIALFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetMaterialfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetMaterialxv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETMATERIALXVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetMaterialxv, std::move(params));
    }
    if (strcmp(nameToken, "glGetMemoryObjectParameterivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetMemoryObjectParameterivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetMultisamplefv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETMULTISAMPLEFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetMultisamplefv, std::move(params));
    }
    if (strcmp(nameToken, "glGetMultisamplefvANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETMULTISAMPLEFVANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetMultisamplefvANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetMultisamplefvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETMULTISAMPLEFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetMultisamplefvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetObjectLabel") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETOBJECTLABELPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetObjectLabel, std::move(params));
    }
    if (strcmp(nameToken, "glGetObjectLabelEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETOBJECTLABELEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetObjectLabelEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetObjectLabelKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETOBJECTLABELKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetObjectLabelKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetObjectPtrLabel") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETOBJECTPTRLABELPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetObjectPtrLabel, std::move(params));
    }
    if (strcmp(nameToken, "glGetObjectPtrLabelKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETOBJECTPTRLABELKHRPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetObjectPtrLabelKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorCounterDataAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORCOUNTERDATAAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorCounterDataAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorCounterInfoAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORCOUNTERINFOAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorCounterInfoAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorCounterStringAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorCounterStringAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorCountersAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORCOUNTERSAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorCountersAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorGroupStringAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORGROUPSTRINGAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorGroupStringAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPerfMonitorGroupsAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPERFMONITORGROUPSAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPerfMonitorGroupsAMD, std::move(params));
    }
    if (strcmp(nameToken, "glGetPointerv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPOINTERVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPointerv, std::move(params));
    }
    if (strcmp(nameToken, "glGetPointervANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETPOINTERVANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPointervANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetPointervKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETPOINTERVKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetPointervKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramBinary") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETPROGRAMBINARYPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramBinary, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramBinaryOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMBINARYOESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetProgramBinaryOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramInfoLog") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETPROGRAMINFOLOGPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramInfoLog, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramInterfaceiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMINTERFACEIVPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetProgramInterfaceiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramPipelineInfoLog") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMPIPELINEINFOLOGPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramPipelineInfoLog, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramPipelineInfoLogEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramPipelineInfoLogEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramPipelineiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMPIPELINEIVPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetProgramPipelineiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramPipelineivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMPIPELINEIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramPipelineivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramResourceIndex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMRESOURCEINDEXPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramResourceIndex, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramResourceLocation") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMRESOURCELOCATIONPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramResourceLocation, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramResourceLocationIndexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramResourceLocationIndexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramResourceName") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMRESOURCENAMEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetProgramResourceName, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramResourceiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMRESOURCEIVPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetProgramResourceiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetProgramivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETPROGRAMIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetProgramivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjecti64vEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTI64VEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetQueryObjecti64vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjecti64vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTI64VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryObjecti64vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTIVEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetQueryObjectivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryObjectivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectui64vEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTUI64VEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetQueryObjectui64vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectui64vRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTUI64VROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryObjectui64vRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectuiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTUIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryObjectuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectuivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTUIVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetQueryObjectuivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryObjectuivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYOBJECTUIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryObjectuivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryivEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETQUERYIVEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetQueryivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetQueryivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETQUERYIVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetQueryivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetRenderbufferImageANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETRENDERBUFFERIMAGEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetRenderbufferImageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetRenderbufferParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETRENDERBUFFERPARAMETERIVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetRenderbufferParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetRenderbufferParameterivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETRENDERBUFFERPARAMETERIVOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetRenderbufferParameterivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetRenderbufferParameterivRobustANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLGETRENDERBUFFERPARAMETERIVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetRenderbufferParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIIVPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIIVOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIuiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIUIVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIuivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIUIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIuivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterIuivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIUIVOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterIuivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERFVPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIVPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetSamplerParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetSamplerParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSAMPLERPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSamplerParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetSemaphoreParameterui64vEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSemaphoreParameterui64vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetShaderInfoLog") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETSHADERINFOLOGPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetShaderInfoLog, std::move(params));
    }
    if (strcmp(nameToken, "glGetShaderPrecisionFormat") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSHADERPRECISIONFORMATPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetShaderPrecisionFormat, std::move(params));
    }
    if (strcmp(nameToken, "glGetShaderSource") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETSHADERSOURCEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetShaderSource, std::move(params));
    }
    if (strcmp(nameToken, "glGetShaderiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSHADERIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetShaderiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetShaderivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSHADERIVROBUSTANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetShaderivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetString") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSTRINGPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetString, std::move(params));
    }
    if (strcmp(nameToken, "glGetStringi") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSTRINGIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetStringi, std::move(params));
    }
    if (strcmp(nameToken, "glGetSynciv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETSYNCIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetSynciv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexEnvfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXENVFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexEnvfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexEnviv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXENVIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexEnviv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexEnvxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXENVXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexEnvxv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexGenfvOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXGENFVOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexGenfvOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexGenivOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXGENIVOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexGenivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexGenxvOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXGENXVOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexGenxvOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexImageANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXIMAGEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexImageANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameterfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERFVPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameterfvANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERFVANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameterfvANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameterfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERIVPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameterivANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERIVANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameterivANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexLevelParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXLEVELPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexLevelParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetTexParameterIiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIIVEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetTexParameterIivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIIVOESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetTexParameterIivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIuiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIUIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetTexParameterIuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIuivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIUIVEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetTexParameterIuivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterIuivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIUIVOESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLGetTexParameterIuivOES, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexParameterfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameteriv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetTexParameterxv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETTEXPARAMETERXVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTexParameterxv, std::move(params));
    }
    if (strcmp(nameToken, "glGetTransformFeedbackVarying") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTRANSFORMFEEDBACKVARYINGPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTransformFeedbackVarying, std::move(params));
    }
    if (strcmp(nameToken, "glGetTranslatedShaderSourceANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetTranslatedShaderSourceANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformBlockIndex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMBLOCKINDEXPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLGetUniformBlockIndex, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformIndices") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETUNIFORMINDICESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformIndices, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformLocation") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMLOCATIONPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetUniformLocation, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformuiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETUNIFORMUIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetUniformuivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNIFORMUIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetUniformuivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetUnsignedBytei_vEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNSIGNEDBYTEI_VEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLGetUnsignedBytei_vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetUnsignedBytevEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETUNSIGNEDBYTEVEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetUnsignedBytevEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribIiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLGetVertexAttribIiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribIivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribIivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribIuiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIUIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLGetVertexAttribIuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribIuivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIUIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribIuivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribPointerv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBPOINTERVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribPointerv, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribPointervRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBPOINTERVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribPointervRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetVertexAttribivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLGETVERTEXATTRIBIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLGetVertexAttribivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformfv, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformfvEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMFVEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformfvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformfvKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMFVKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformfvKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformivEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMIVEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformivKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMIVKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformivKHR, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformuiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMUIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformuiv, std::move(params));
    }
    if (strcmp(nameToken, "glGetnUniformuivKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLGETNUNIFORMUIVKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLGetnUniformuivKHR, std::move(params));
    }
    if (strcmp(nameToken, "glHint") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLHINTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLHint, std::move(params));
    }
    if (strcmp(nameToken, "glImportMemoryFdEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLIMPORTMEMORYFDEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLImportMemoryFdEXT, std::move(params));
    }
    if (strcmp(nameToken, "glImportMemoryZirconHandleANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLIMPORTMEMORYZIRCONHANDLEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLImportMemoryZirconHandleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glImportSemaphoreFdEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLIMPORTSEMAPHOREFDEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLImportSemaphoreFdEXT, std::move(params));
    }
    if (strcmp(nameToken, "glImportSemaphoreZirconHandleANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLIMPORTSEMAPHOREZIRCONHANDLEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLImportSemaphoreZirconHandleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glInsertEventMarkerEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLINSERTEVENTMARKEREXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLInsertEventMarkerEXT, std::move(params));
    }
    if (strcmp(nameToken, "glInvalidateFramebuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLINVALIDATEFRAMEBUFFERPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLInvalidateFramebuffer, std::move(params));
    }
    if (strcmp(nameToken, "glInvalidateSubFramebuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLINVALIDATESUBFRAMEBUFFERPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLInvalidateSubFramebuffer, std::move(params));
    }
    if (strcmp(nameToken, "glIsBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISBUFFERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glIsEnabled") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISENABLEDPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsEnabled, std::move(params));
    }
    if (strcmp(nameToken, "glIsEnabledi") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISENABLEDIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsEnabledi, std::move(params));
    }
    if (strcmp(nameToken, "glIsEnablediEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISENABLEDIEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsEnablediEXT, std::move(params));
    }
    if (strcmp(nameToken, "glIsEnablediOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISENABLEDIOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsEnablediOES, std::move(params));
    }
    if (strcmp(nameToken, "glIsFenceNV") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISFENCENVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsFenceNV, std::move(params));
    }
    if (strcmp(nameToken, "glIsFramebuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISFRAMEBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsFramebuffer, std::move(params));
    }
    if (strcmp(nameToken, "glIsFramebufferOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISFRAMEBUFFEROESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsFramebufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glIsMemoryObjectEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISMEMORYOBJECTEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsMemoryObjectEXT, std::move(params));
    }
    if (strcmp(nameToken, "glIsProgram") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISPROGRAMPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsProgram, std::move(params));
    }
    if (strcmp(nameToken, "glIsProgramPipeline") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISPROGRAMPIPELINEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsProgramPipeline, std::move(params));
    }
    if (strcmp(nameToken, "glIsProgramPipelineEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISPROGRAMPIPELINEEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLIsProgramPipelineEXT, std::move(params));
    }
    if (strcmp(nameToken, "glIsQuery") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISQUERYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsQuery, std::move(params));
    }
    if (strcmp(nameToken, "glIsQueryEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISQUERYEXTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsQueryEXT, std::move(params));
    }
    if (strcmp(nameToken, "glIsRenderbuffer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISRENDERBUFFERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsRenderbuffer, std::move(params));
    }
    if (strcmp(nameToken, "glIsRenderbufferOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISRENDERBUFFEROESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsRenderbufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glIsSampler") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISSAMPLERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsSampler, std::move(params));
    }
    if (strcmp(nameToken, "glIsSemaphoreEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISSEMAPHOREEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsSemaphoreEXT, std::move(params));
    }
    if (strcmp(nameToken, "glIsShader") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISSHADERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsShader, std::move(params));
    }
    if (strcmp(nameToken, "glIsSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISSYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsSync, std::move(params));
    }
    if (strcmp(nameToken, "glIsTexture") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISTEXTUREPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLIsTexture, std::move(params));
    }
    if (strcmp(nameToken, "glIsTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLISTRANSFORMFEEDBACKPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLIsTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glIsVertexArray") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISVERTEXARRAYPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsVertexArray, std::move(params));
    }
    if (strcmp(nameToken, "glIsVertexArrayOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLISVERTEXARRAYOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLIsVertexArrayOES, std::move(params));
    }
    if (strcmp(nameToken, "glLabelObjectEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLLABELOBJECTEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLLabelObjectEXT, std::move(params));
    }
    if (strcmp(nameToken, "glLightModelf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTMODELFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightModelf, std::move(params));
    }
    if (strcmp(nameToken, "glLightModelfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTMODELFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightModelfv, std::move(params));
    }
    if (strcmp(nameToken, "glLightModelx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTMODELXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightModelx, std::move(params));
    }
    if (strcmp(nameToken, "glLightModelxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTMODELXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightModelxv, std::move(params));
    }
    if (strcmp(nameToken, "glLightf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightf, std::move(params));
    }
    if (strcmp(nameToken, "glLightfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightfv, std::move(params));
    }
    if (strcmp(nameToken, "glLightx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightx, std::move(params));
    }
    if (strcmp(nameToken, "glLightxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLIGHTXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLightxv, std::move(params));
    }
    if (strcmp(nameToken, "glLineWidth") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLINEWIDTHPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLineWidth, std::move(params));
    }
    if (strcmp(nameToken, "glLineWidthx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLINEWIDTHXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLineWidthx, std::move(params));
    }
    if (strcmp(nameToken, "glLinkProgram") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLINKPROGRAMPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLinkProgram, std::move(params));
    }
    if (strcmp(nameToken, "glLoadIdentity") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOADIDENTITYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLoadIdentity, std::move(params));
    }
    if (strcmp(nameToken, "glLoadMatrixf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOADMATRIXFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLoadMatrixf, std::move(params));
    }
    if (strcmp(nameToken, "glLoadMatrixx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOADMATRIXXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLoadMatrixx, std::move(params));
    }
    if (strcmp(nameToken, "glLoadPaletteFromModelViewMatrixOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLLoadPaletteFromModelViewMatrixOES, std::move(params));
    }
    if (strcmp(nameToken, "glLogicOp") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOGICOPPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLogicOp, std::move(params));
    }
    if (strcmp(nameToken, "glLogicOpANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOGICOPANGLEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLLogicOpANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glLoseContextCHROMIUM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLLOSECONTEXTCHROMIUMPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLLoseContextCHROMIUM, std::move(params));
    }
    if (strcmp(nameToken, "glMapBufferOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMAPBUFFEROESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMapBufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glMapBufferRange") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMAPBUFFERRANGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMapBufferRange, std::move(params));
    }
    if (strcmp(nameToken, "glMapBufferRangeEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMAPBUFFERRANGEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMapBufferRangeEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMaterialf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATERIALFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMaterialf, std::move(params));
    }
    if (strcmp(nameToken, "glMaterialfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATERIALFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMaterialfv, std::move(params));
    }
    if (strcmp(nameToken, "glMaterialx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATERIALXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMaterialx, std::move(params));
    }
    if (strcmp(nameToken, "glMaterialxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATERIALXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMaterialxv, std::move(params));
    }
    if (strcmp(nameToken, "glMatrixIndexPointerOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATRIXINDEXPOINTEROESPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLMatrixIndexPointerOES, std::move(params));
    }
    if (strcmp(nameToken, "glMatrixMode") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMATRIXMODEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMatrixMode, std::move(params));
    }
    if (strcmp(nameToken, "glMaxShaderCompilerThreadsKHR") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMAXSHADERCOMPILERTHREADSKHRPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMaxShaderCompilerThreadsKHR, std::move(params));
    }
    if (strcmp(nameToken, "glMemoryBarrier") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMEMORYBARRIERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMemoryBarrier, std::move(params));
    }
    if (strcmp(nameToken, "glMemoryBarrierByRegion") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMEMORYBARRIERBYREGIONPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLMemoryBarrierByRegion, std::move(params));
    }
    if (strcmp(nameToken, "glMemoryObjectParameterivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMEMORYOBJECTPARAMETERIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMemoryObjectParameterivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMinSampleShading") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMINSAMPLESHADINGPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMinSampleShading, std::move(params));
    }
    if (strcmp(nameToken, "glMinSampleShadingOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMINSAMPLESHADINGOESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLMinSampleShadingOES, std::move(params));
    }
    if (strcmp(nameToken, "glMultMatrixf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTMATRIXFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMultMatrixf, std::move(params));
    }
    if (strcmp(nameToken, "glMultMatrixx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTMATRIXXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLMultMatrixx, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawArraysANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWARRAYSANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLMultiDrawArraysANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawArraysEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWARRAYSEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLMultiDrawArraysEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawArraysIndirectEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawArraysIndirectEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawArraysInstancedANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWARRAYSINSTANCEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawArraysInstancedANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawArraysInstancedBaseInstanceANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLMULTIDRAWARRAYSINSTANCEDBASEINSTANCEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawArraysInstancedBaseInstanceANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWELEMENTSANGLEPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsBaseVertexEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsBaseVertexEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWELEMENTSEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsIndirectEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsIndirectEXT, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsInstancedANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLMULTIDRAWELEMENTSINSTANCEDANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsInstancedANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<
            PFNGLMULTIDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEANGLEPROC>::type>(paramTokens,
                                                                                   strings);
        return CallCapture(EntryPoint::GLMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,
                           std::move(params));
    }
    if (strcmp(nameToken, "glMultiTexCoord4f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMULTITEXCOORD4FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiTexCoord4f, std::move(params));
    }
    if (strcmp(nameToken, "glMultiTexCoord4x") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLMULTITEXCOORD4XPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLMultiTexCoord4x, std::move(params));
    }
    if (strcmp(nameToken, "glNormal3f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLNORMAL3FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLNormal3f, std::move(params));
    }
    if (strcmp(nameToken, "glNormal3x") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLNORMAL3XPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLNormal3x, std::move(params));
    }
    if (strcmp(nameToken, "glNormalPointer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLNORMALPOINTERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLNormalPointer, std::move(params));
    }
    if (strcmp(nameToken, "glObjectLabel") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLOBJECTLABELPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLObjectLabel, std::move(params));
    }
    if (strcmp(nameToken, "glObjectLabelKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLOBJECTLABELKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLObjectLabelKHR, std::move(params));
    }
    if (strcmp(nameToken, "glObjectPtrLabel") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLOBJECTPTRLABELPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLObjectPtrLabel, std::move(params));
    }
    if (strcmp(nameToken, "glObjectPtrLabelKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLOBJECTPTRLABELKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLObjectPtrLabelKHR, std::move(params));
    }
    if (strcmp(nameToken, "glOrthof") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLORTHOFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLOrthof, std::move(params));
    }
    if (strcmp(nameToken, "glOrthox") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLORTHOXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLOrthox, std::move(params));
    }
    if (strcmp(nameToken, "glPatchParameteri") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPATCHPARAMETERIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPatchParameteri, std::move(params));
    }
    if (strcmp(nameToken, "glPatchParameteriEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPATCHPARAMETERIEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLPatchParameteriEXT, std::move(params));
    }
    if (strcmp(nameToken, "glPatchParameteriOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPATCHPARAMETERIOESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLPatchParameteriOES, std::move(params));
    }
    if (strcmp(nameToken, "glPauseTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPAUSETRANSFORMFEEDBACKPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLPauseTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glPixelLocalStorageBarrierANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPIXELLOCALSTORAGEBARRIERANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLPixelLocalStorageBarrierANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glPixelStorei") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPIXELSTOREIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLPixelStorei, std::move(params));
    }
    if (strcmp(nameToken, "glPointParameterf") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOINTPARAMETERFPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPointParameterf, std::move(params));
    }
    if (strcmp(nameToken, "glPointParameterfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOINTPARAMETERFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPointParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glPointParameterx") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOINTPARAMETERXPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPointParameterx, std::move(params));
    }
    if (strcmp(nameToken, "glPointParameterxv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOINTPARAMETERXVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPointParameterxv, std::move(params));
    }
    if (strcmp(nameToken, "glPointSize") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPOINTSIZEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLPointSize, std::move(params));
    }
    if (strcmp(nameToken, "glPointSizePointerOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPOINTSIZEPOINTEROESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLPointSizePointerOES, std::move(params));
    }
    if (strcmp(nameToken, "glPointSizex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPOINTSIZEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLPointSizex, std::move(params));
    }
    if (strcmp(nameToken, "glPolygonModeANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOLYGONMODEANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPolygonModeANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glPolygonModeNV") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOLYGONMODENVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPolygonModeNV, std::move(params));
    }
    if (strcmp(nameToken, "glPolygonOffset") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOLYGONOFFSETPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPolygonOffset, std::move(params));
    }
    if (strcmp(nameToken, "glPolygonOffsetClampEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPOLYGONOFFSETCLAMPEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLPolygonOffsetClampEXT, std::move(params));
    }
    if (strcmp(nameToken, "glPolygonOffsetx") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOLYGONOFFSETXPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPolygonOffsetx, std::move(params));
    }
    if (strcmp(nameToken, "glPopDebugGroup") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOPDEBUGGROUPPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPopDebugGroup, std::move(params));
    }
    if (strcmp(nameToken, "glPopDebugGroupKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOPDEBUGGROUPKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPopDebugGroupKHR, std::move(params));
    }
    if (strcmp(nameToken, "glPopGroupMarkerEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPOPGROUPMARKEREXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPopGroupMarkerEXT, std::move(params));
    }
    if (strcmp(nameToken, "glPopMatrix") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPOPMATRIXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLPopMatrix, std::move(params));
    }
    if (strcmp(nameToken, "glPrimitiveBoundingBox") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPRIMITIVEBOUNDINGBOXPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLPrimitiveBoundingBox, std::move(params));
    }
    if (strcmp(nameToken, "glPrimitiveBoundingBoxEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPRIMITIVEBOUNDINGBOXEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLPrimitiveBoundingBoxEXT, std::move(params));
    }
    if (strcmp(nameToken, "glPrimitiveBoundingBoxOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPRIMITIVEBOUNDINGBOXOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLPrimitiveBoundingBoxOES, std::move(params));
    }
    if (strcmp(nameToken, "glProgramBinary") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMBINARYPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramBinary, std::move(params));
    }
    if (strcmp(nameToken, "glProgramBinaryOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMBINARYOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramBinaryOES, std::move(params));
    }
    if (strcmp(nameToken, "glProgramParameteri") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMPARAMETERIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramParameteri, std::move(params));
    }
    if (strcmp(nameToken, "glProgramParameteriEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMPARAMETERIEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramParameteriEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform1f, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1fEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1FEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform1fEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform1fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1FVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform1fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1i") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1IPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform1i, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1iEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1IEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform1iEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1iv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1IVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform1iv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1ivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1IVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform1ivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1ui") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1UIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform1ui, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1uiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1UIEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform1uiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1UIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLProgramUniform1uiv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform1uivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM1UIVEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLProgramUniform1uivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform2f, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2fEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2FEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform2fEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform2fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2FVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform2fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2i") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2IPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform2i, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2iEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2IEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform2iEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2iv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2IVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform2iv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2ivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2IVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform2ivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2ui") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2UIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform2ui, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2uiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2UIEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform2uiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2UIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLProgramUniform2uiv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform2uivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM2UIVEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLProgramUniform2uivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform3f, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3fEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3FEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform3fEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform3fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3FVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform3fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3i") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3IPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform3i, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3iEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3IEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform3iEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3iv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3IVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform3iv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3ivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3IVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform3ivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3ui") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3UIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform3ui, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3uiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3UIEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform3uiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3UIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLProgramUniform3uiv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform3uivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM3UIVEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLProgramUniform3uivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform4f, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4fEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4FEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform4fEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform4fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4FVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform4fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4i") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4IPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform4i, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4iEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4IEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLProgramUniform4iEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4iv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4IVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform4iv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4ivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4IVEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform4ivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4ui") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4UIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniform4ui, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4uiEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4UIEXTPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProgramUniform4uiEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4UIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLProgramUniform4uiv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniform4uivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORM4UIVEXTPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLProgramUniform4uivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2x3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2x3fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2x3fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2x3fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2x4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2x4fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix2x4fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix2x4fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3x2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3x2fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3x2fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3x2fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3x4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3x4fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix3x4fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix3x4fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4x2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4x2fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4x2fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4x2fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4x3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4x3fv, std::move(params));
    }
    if (strcmp(nameToken, "glProgramUniformMatrix4x3fvEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLProgramUniformMatrix4x3fvEXT, std::move(params));
    }
    if (strcmp(nameToken, "glProvokingVertexANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPROVOKINGVERTEXANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLProvokingVertexANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glPushDebugGroup") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPUSHDEBUGGROUPPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPushDebugGroup, std::move(params));
    }
    if (strcmp(nameToken, "glPushDebugGroupKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLPUSHDEBUGGROUPKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLPushDebugGroupKHR, std::move(params));
    }
    if (strcmp(nameToken, "glPushGroupMarkerEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPUSHGROUPMARKEREXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLPushGroupMarkerEXT, std::move(params));
    }
    if (strcmp(nameToken, "glPushMatrix") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLPUSHMATRIXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLPushMatrix, std::move(params));
    }
    if (strcmp(nameToken, "glQueryCounterEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLQUERYCOUNTEREXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLQueryCounterEXT, std::move(params));
    }
    if (strcmp(nameToken, "glQueryMatrixxOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLQUERYMATRIXXOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLQueryMatrixxOES, std::move(params));
    }
    if (strcmp(nameToken, "glReadBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLREADBUFFERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLReadBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glReadPixels") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLREADPIXELSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLReadPixels, std::move(params));
    }
    if (strcmp(nameToken, "glReadPixelsRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLREADPIXELSROBUSTANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLReadPixelsRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glReadnPixels") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLREADNPIXELSPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLReadnPixels, std::move(params));
    }
    if (strcmp(nameToken, "glReadnPixelsEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLREADNPIXELSEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLReadnPixelsEXT, std::move(params));
    }
    if (strcmp(nameToken, "glReadnPixelsKHR") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLREADNPIXELSKHRPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLReadnPixelsKHR, std::move(params));
    }
    if (strcmp(nameToken, "glReleaseShaderCompiler") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRELEASESHADERCOMPILERPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLReleaseShaderCompiler, std::move(params));
    }
    if (strcmp(nameToken, "glReleaseTexturesANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRELEASETEXTURESANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLReleaseTexturesANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glRenderbufferStorage") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRENDERBUFFERSTORAGEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLRenderbufferStorage, std::move(params));
    }
    if (strcmp(nameToken, "glRenderbufferStorageMultisample") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLRenderbufferStorageMultisample, std::move(params));
    }
    if (strcmp(nameToken, "glRenderbufferStorageMultisampleANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLRenderbufferStorageMultisampleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glRenderbufferStorageMultisampleEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLRenderbufferStorageMultisampleEXT, std::move(params));
    }
    if (strcmp(nameToken, "glRenderbufferStorageOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRENDERBUFFERSTORAGEOESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLRenderbufferStorageOES, std::move(params));
    }
    if (strcmp(nameToken, "glRequestExtensionANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLREQUESTEXTENSIONANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLRequestExtensionANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glResumeTransformFeedback") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLRESUMETRANSFORMFEEDBACKPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLResumeTransformFeedback, std::move(params));
    }
    if (strcmp(nameToken, "glRotatef") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLROTATEFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLRotatef, std::move(params));
    }
    if (strcmp(nameToken, "glRotatex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLROTATEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLRotatex, std::move(params));
    }
    if (strcmp(nameToken, "glSampleCoverage") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSAMPLECOVERAGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLSampleCoverage, std::move(params));
    }
    if (strcmp(nameToken, "glSampleCoveragex") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSAMPLECOVERAGEXPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLSampleCoveragex, std::move(params));
    }
    if (strcmp(nameToken, "glSampleMaski") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLEMASKIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLSampleMaski, std::move(params));
    }
    if (strcmp(nameToken, "glSampleMaskiANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSAMPLEMASKIANGLEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLSampleMaskiANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIIVPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLSamplerParameterIiv, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIIVEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLSamplerParameterIivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIIVOESPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLSamplerParameterIivOES, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIuiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIUIVPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLSamplerParameterIuiv, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIuivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIUIVEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameterIuivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterIuivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIUIVOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameterIuivOES, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterf") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERFPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameterf, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERFVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLSamplerParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameterfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameteri") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameteri, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameteriv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLSamplerParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glSamplerParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSAMPLERPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSamplerParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glScalef") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSCALEFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLScalef, std::move(params));
    }
    if (strcmp(nameToken, "glScalex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSCALEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLScalex, std::move(params));
    }
    if (strcmp(nameToken, "glScissor") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSCISSORPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLScissor, std::move(params));
    }
    if (strcmp(nameToken, "glSelectPerfMonitorCountersAMD") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSELECTPERFMONITORCOUNTERSAMDPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSelectPerfMonitorCountersAMD, std::move(params));
    }
    if (strcmp(nameToken, "glSemaphoreParameterui64vEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSEMAPHOREPARAMETERUI64VEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLSemaphoreParameterui64vEXT, std::move(params));
    }
    if (strcmp(nameToken, "glSetFenceNV") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSETFENCENVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLSetFenceNV, std::move(params));
    }
    if (strcmp(nameToken, "glShadeModel") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSHADEMODELPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLShadeModel, std::move(params));
    }
    if (strcmp(nameToken, "glShaderBinary") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSHADERBINARYPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLShaderBinary, std::move(params));
    }
    if (strcmp(nameToken, "glShaderSource") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSHADERSOURCEPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLShaderSource, std::move(params));
    }
    if (strcmp(nameToken, "glShadingRateCombinerOpsEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSHADINGRATECOMBINEROPSEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLShadingRateCombinerOpsEXT, std::move(params));
    }
    if (strcmp(nameToken, "glShadingRateEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSHADINGRATEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLShadingRateEXT, std::move(params));
    }
    if (strcmp(nameToken, "glShadingRateQCOM") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSHADINGRATEQCOMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLShadingRateQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glSignalSemaphoreEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSIGNALSEMAPHOREEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLSignalSemaphoreEXT, std::move(params));
    }
    if (strcmp(nameToken, "glStartTilingQCOM") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSTARTTILINGQCOMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLStartTilingQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glStencilFunc") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSTENCILFUNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLStencilFunc, std::move(params));
    }
    if (strcmp(nameToken, "glStencilFuncSeparate") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSTENCILFUNCSEPARATEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLStencilFuncSeparate, std::move(params));
    }
    if (strcmp(nameToken, "glStencilMask") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSTENCILMASKPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLStencilMask, std::move(params));
    }
    if (strcmp(nameToken, "glStencilMaskSeparate") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSTENCILMASKSEPARATEPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLStencilMaskSeparate, std::move(params));
    }
    if (strcmp(nameToken, "glStencilOp") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLSTENCILOPPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLStencilOp, std::move(params));
    }
    if (strcmp(nameToken, "glStencilOpSeparate") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLSTENCILOPSEPARATEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLStencilOpSeparate, std::move(params));
    }
    if (strcmp(nameToken, "glTestFenceNV") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTESTFENCENVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTestFenceNV, std::move(params));
    }
    if (strcmp(nameToken, "glTexBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXBUFFERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glTexBufferEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXBUFFEREXTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBufferEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexBufferOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXBUFFEROESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexBufferRange") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXBUFFERRANGEPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBufferRange, std::move(params));
    }
    if (strcmp(nameToken, "glTexBufferRangeEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXBUFFERRANGEEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBufferRangeEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexBufferRangeOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXBUFFERRANGEOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexBufferRangeOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexCoordPointer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXCOORDPOINTERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexCoordPointer, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnvf") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnvf, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnvfv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVFVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnvfv, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnvi") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnvi, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnviv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnviv, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnvx") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnvx, std::move(params));
    }
    if (strcmp(nameToken, "glTexEnvxv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXENVXVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexEnvxv, std::move(params));
    }
    if (strcmp(nameToken, "glTexGenfOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENFOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGenfOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexGenfvOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENFVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGenfvOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexGeniOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENIOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGeniOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexGenivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENIVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGenivOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexGenxOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENXOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGenxOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexGenxvOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXGENXVOESPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexGenxvOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexImage2D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXIMAGE2DPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glTexImage2DRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXIMAGE2DROBUSTANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLTexImage2DRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexImage3D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXIMAGE3DPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexImage3D, std::move(params));
    }
    if (strcmp(nameToken, "glTexImage3DOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXIMAGE3DOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexImage3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexImage3DRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXIMAGE3DROBUSTANGLEPROC>::type>(paramTokens,
                                                                                       strings);
        return CallCapture(EntryPoint::GLTexImage3DRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterIiv, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIIVEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLTexParameterIivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIIVOESPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLTexParameterIivOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIuiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIUIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterIuiv, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIuivEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIUIVEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLTexParameterIuivEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterIuivOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIUIVOESPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLTexParameterIuivOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterf") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERFPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterf, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterfv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERFVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterfv, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterfvRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERFVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterfvRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameteri") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameteri, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameteriv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameteriv, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterivRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERIVROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterivRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterx") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERXPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterx, std::move(params));
    }
    if (strcmp(nameToken, "glTexParameterxv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXPARAMETERXVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexParameterxv, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage2D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE2DPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage2D, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage2DEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE2DEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage2DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage2DMultisample") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE2DMULTISAMPLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage2DMultisample, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage2DMultisampleANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE2DMULTISAMPLEANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage2DMultisampleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage3D") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE3DPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage3D, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage3DEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE3DEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage3DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage3DMultisample") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE3DMULTISAMPLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage3DMultisample, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorage3DMultisampleOES") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorage3DMultisampleOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageAttribs2DEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEATTRIBS2DEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLTexStorageAttribs2DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageAttribs3DEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEATTRIBS3DEXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLTexStorageAttribs3DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMem2DEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEM2DEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLTexStorageMem2DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMem2DMultisampleEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorageMem2DMultisampleEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMem3DEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEM3DEXTPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLTexStorageMem3DEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMem3DMultisampleEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorageMem3DMultisampleEXT, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMemFlags2DANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEMFLAGS2DANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorageMemFlags2DANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMemFlags2DMultisampleANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLTEXSTORAGEMEMFLAGS2DMULTISAMPLEANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLTexStorageMemFlags2DMultisampleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMemFlags3DANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSTORAGEMEMFLAGS3DANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexStorageMemFlags3DANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexStorageMemFlags3DMultisampleANGLE") == 0)
    {
        ParamBuffer params = ParseParameters<
            std::remove_pointer<PFNGLTEXSTORAGEMEMFLAGS3DMULTISAMPLEANGLEPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLTexStorageMemFlags3DMultisampleANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexSubImage2D") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXSUBIMAGE2DPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexSubImage2D, std::move(params));
    }
    if (strcmp(nameToken, "glTexSubImage2DRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSUBIMAGE2DROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexSubImage2DRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTexSubImage3D") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXSUBIMAGE3DPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexSubImage3D, std::move(params));
    }
    if (strcmp(nameToken, "glTexSubImage3DOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLTEXSUBIMAGE3DOESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLTexSubImage3DOES, std::move(params));
    }
    if (strcmp(nameToken, "glTexSubImage3DRobustANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXSUBIMAGE3DROBUSTANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTexSubImage3DRobustANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glTextureFoveationParametersQCOM") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTextureFoveationParametersQCOM, std::move(params));
    }
    if (strcmp(nameToken, "glTransformFeedbackVaryings") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTRANSFORMFEEDBACKVARYINGSPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLTransformFeedbackVaryings, std::move(params));
    }
    if (strcmp(nameToken, "glTranslatef") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTRANSLATEFPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTranslatef, std::move(params));
    }
    if (strcmp(nameToken, "glTranslatex") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLTRANSLATEXPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLTranslatex, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1f, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1FVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1i") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1IPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1i, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1iv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1IVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1iv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1ui") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1UIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1ui, std::move(params));
    }
    if (strcmp(nameToken, "glUniform1uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM1UIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform1uiv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2f, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2FVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2i") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2IPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2i, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2iv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2IVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2iv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2ui") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2UIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2ui, std::move(params));
    }
    if (strcmp(nameToken, "glUniform2uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM2UIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform2uiv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3f, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3FVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3i") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3IPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3i, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3iv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3IVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3iv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3ui") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3UIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3ui, std::move(params));
    }
    if (strcmp(nameToken, "glUniform3uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM3UIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform3uiv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4f") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4FPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4f, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4FVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4i") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4IPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4i, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4iv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4IVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4iv, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4ui") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4UIPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4ui, std::move(params));
    }
    if (strcmp(nameToken, "glUniform4uiv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORM4UIVPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUniform4uiv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformBlockBinding") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMBLOCKBINDINGPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLUniformBlockBinding, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix2fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX2FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLUniformMatrix2fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix2x3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX2X3FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix2x3fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix2x4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX2X4FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix2x4fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix3fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX3FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLUniformMatrix3fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix3x2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX3X2FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix3x2fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix3x4fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX3X4FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix3x4fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix4fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX4FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLUniformMatrix4fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix4x2fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX4X2FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix4x2fv, std::move(params));
    }
    if (strcmp(nameToken, "glUniformMatrix4x3fv") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNIFORMMATRIX4X3FVPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLUniformMatrix4x3fv, std::move(params));
    }
    if (strcmp(nameToken, "glUnmapBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUNMAPBUFFERPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUnmapBuffer, std::move(params));
    }
    if (strcmp(nameToken, "glUnmapBufferOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLUNMAPBUFFEROESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLUnmapBufferOES, std::move(params));
    }
    if (strcmp(nameToken, "glUseProgram") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUSEPROGRAMPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLUseProgram, std::move(params));
    }
    if (strcmp(nameToken, "glUseProgramStages") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLUSEPROGRAMSTAGESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLUseProgramStages, std::move(params));
    }
    if (strcmp(nameToken, "glUseProgramStagesEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLUSEPROGRAMSTAGESEXTPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLUseProgramStagesEXT, std::move(params));
    }
    if (strcmp(nameToken, "glValidateProgram") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVALIDATEPROGRAMPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLValidateProgram, std::move(params));
    }
    if (strcmp(nameToken, "glValidateProgramPipeline") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVALIDATEPROGRAMPIPELINEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLValidateProgramPipeline, std::move(params));
    }
    if (strcmp(nameToken, "glValidateProgramPipelineEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVALIDATEPROGRAMPIPELINEEXTPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLValidateProgramPipelineEXT, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib1f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB1FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib1f, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib1fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB1FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib1fv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib2f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB2FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib2f, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib2fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB2FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib2fv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib3f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB3FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib3f, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib3fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB3FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib3fv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib4f") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB4FPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib4f, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttrib4fv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIB4FVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttrib4fv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribBinding") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBBINDINGPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLVertexAttribBinding, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribDivisor") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBDIVISORPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLVertexAttribDivisor, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribDivisorANGLE") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBDIVISORANGLEPROC>::type>(
                paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttribDivisorANGLE, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribDivisorEXT") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBDIVISOREXTPROC>::type>(paramTokens,
                                                                                        strings);
        return CallCapture(EntryPoint::GLVertexAttribDivisorEXT, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribFormat") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBFORMATPROC>::type>(paramTokens,
                                                                                    strings);
        return CallCapture(EntryPoint::GLVertexAttribFormat, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribI4i") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBI4IPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttribI4i, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribI4iv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBI4IVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttribI4iv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribI4ui") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBI4UIPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttribI4ui, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribI4uiv") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBI4UIVPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexAttribI4uiv, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribIFormat") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBIFORMATPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLVertexAttribIFormat, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribIPointer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBIPOINTERPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLVertexAttribIPointer, std::move(params));
    }
    if (strcmp(nameToken, "glVertexAttribPointer") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXATTRIBPOINTERPROC>::type>(paramTokens,
                                                                                     strings);
        return CallCapture(EntryPoint::GLVertexAttribPointer, std::move(params));
    }
    if (strcmp(nameToken, "glVertexBindingDivisor") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVERTEXBINDINGDIVISORPROC>::type>(paramTokens,
                                                                                      strings);
        return CallCapture(EntryPoint::GLVertexBindingDivisor, std::move(params));
    }
    if (strcmp(nameToken, "glVertexPointer") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLVERTEXPOINTERPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLVertexPointer, std::move(params));
    }
    if (strcmp(nameToken, "glViewport") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLVIEWPORTPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLViewport, std::move(params));
    }
    if (strcmp(nameToken, "glWaitSemaphoreEXT") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLWAITSEMAPHOREEXTPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLWaitSemaphoreEXT, std::move(params));
    }
    if (strcmp(nameToken, "glWaitSync") == 0)
    {
        ParamBuffer params =
            ParseParameters<std::remove_pointer<PFNGLWAITSYNCPROC>::type>(paramTokens, strings);
        return CallCapture(EntryPoint::GLWaitSync, std::move(params));
    }
    if (strcmp(nameToken, "glWeightPointerOES") == 0)
    {
        ParamBuffer params = ParseParameters<std::remove_pointer<PFNGLWEIGHTPOINTEROESPROC>::type>(
            paramTokens, strings);
        return CallCapture(EntryPoint::GLWeightPointerOES, std::move(params));
    }
    if (strcmp(nameToken, "CreateContext") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateContext)>(paramTokens, strings);
        return CallCapture("CreateContext", std::move(params));
    }
    if (strcmp(nameToken, "CreateEGLImage") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateEGLImage)>(paramTokens, strings);
        return CallCapture("CreateEGLImage", std::move(params));
    }
    if (strcmp(nameToken, "CreateEGLImageKHR") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateEGLImageKHR)>(paramTokens, strings);
        return CallCapture("CreateEGLImageKHR", std::move(params));
    }
    if (strcmp(nameToken, "CreateEGLSync") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateEGLSync)>(paramTokens, strings);
        return CallCapture("CreateEGLSync", std::move(params));
    }
    if (strcmp(nameToken, "CreateEGLSyncKHR") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateEGLSyncKHR)>(paramTokens, strings);
        return CallCapture("CreateEGLSyncKHR", std::move(params));
    }
    if (strcmp(nameToken, "CreateNativeClientBufferANDROID") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(CreateNativeClientBufferANDROID)>(paramTokens, strings);
        return CallCapture("CreateNativeClientBufferANDROID", std::move(params));
    }
    if (strcmp(nameToken, "CreatePbufferSurface") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreatePbufferSurface)>(paramTokens, strings);
        return CallCapture("CreatePbufferSurface", std::move(params));
    }
    if (strcmp(nameToken, "CreateProgram") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateProgram)>(paramTokens, strings);
        return CallCapture("CreateProgram", std::move(params));
    }
    if (strcmp(nameToken, "CreateShader") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateShader)>(paramTokens, strings);
        return CallCapture("CreateShader", std::move(params));
    }
    if (strcmp(nameToken, "CreateShaderProgramv") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(CreateShaderProgramv)>(paramTokens, strings);
        return CallCapture("CreateShaderProgramv", std::move(params));
    }
    if (strcmp(nameToken, "DeleteUniformLocations") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(DeleteUniformLocations)>(paramTokens, strings);
        return CallCapture("DeleteUniformLocations", std::move(params));
    }
    if (strcmp(nameToken, "DestroyEGLImage") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(DestroyEGLImage)>(paramTokens, strings);
        return CallCapture("DestroyEGLImage", std::move(params));
    }
    if (strcmp(nameToken, "DestroyEGLImageKHR") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(DestroyEGLImageKHR)>(paramTokens, strings);
        return CallCapture("DestroyEGLImageKHR", std::move(params));
    }
    if (strcmp(nameToken, "FenceSync") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(FenceSync)>(paramTokens, strings);
        return CallCapture("FenceSync", std::move(params));
    }
    if (strcmp(nameToken, "FenceSync2") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(FenceSync2)>(paramTokens, strings);
        return CallCapture("FenceSync2", std::move(params));
    }
    if (strcmp(nameToken, "InitializeBinaryDataLoader") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(InitializeBinaryDataLoader)>(paramTokens, strings);
        return CallCapture("InitializeBinaryDataLoader", std::move(params));
    }
    if (strcmp(nameToken, "InitializeReplay") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(InitializeReplay)>(paramTokens, strings);
        return CallCapture("InitializeReplay", std::move(params));
    }
    if (strcmp(nameToken, "InitializeReplay2") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(InitializeReplay2)>(paramTokens, strings);
        return CallCapture("InitializeReplay2", std::move(params));
    }
    if (strcmp(nameToken, "InitializeReplay3") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(InitializeReplay3)>(paramTokens, strings);
        return CallCapture("InitializeReplay3", std::move(params));
    }
    if (strcmp(nameToken, "InitializeReplay4") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(InitializeReplay4)>(paramTokens, strings);
        return CallCapture("InitializeReplay4", std::move(params));
    }
    if (strcmp(nameToken, "InitializeReplay5") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(InitializeReplay5)>(paramTokens, strings);
        return CallCapture("InitializeReplay5", std::move(params));
    }
    if (strcmp(nameToken, "MapBufferOES") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(MapBufferOES)>(paramTokens, strings);
        return CallCapture("MapBufferOES", std::move(params));
    }
    if (strcmp(nameToken, "MapBufferRange") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(MapBufferRange)>(paramTokens, strings);
        return CallCapture("MapBufferRange", std::move(params));
    }
    if (strcmp(nameToken, "MapBufferRangeEXT") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(MapBufferRangeEXT)>(paramTokens, strings);
        return CallCapture("MapBufferRangeEXT", std::move(params));
    }
    if (strcmp(nameToken, "SetBufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetBufferID)>(paramTokens, strings);
        return CallCapture("SetBufferID", std::move(params));
    }
    if (strcmp(nameToken, "SetCurrentContextID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetCurrentContextID)>(paramTokens, strings);
        return CallCapture("SetCurrentContextID", std::move(params));
    }
    if (strcmp(nameToken, "SetFramebufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetFramebufferID)>(paramTokens, strings);
        return CallCapture("SetFramebufferID", std::move(params));
    }
    if (strcmp(nameToken, "SetFramebufferID2") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetFramebufferID2)>(paramTokens, strings);
        return CallCapture("SetFramebufferID2", std::move(params));
    }
    if (strcmp(nameToken, "SetRenderbufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetRenderbufferID)>(paramTokens, strings);
        return CallCapture("SetRenderbufferID", std::move(params));
    }
    if (strcmp(nameToken, "SetTextureID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(SetTextureID)>(paramTokens, strings);
        return CallCapture("SetTextureID", std::move(params));
    }
    if (strcmp(nameToken, "UniformBlockBinding") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UniformBlockBinding)>(paramTokens, strings);
        return CallCapture("UniformBlockBinding", std::move(params));
    }
    if (strcmp(nameToken, "UpdateBufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateBufferID)>(paramTokens, strings);
        return CallCapture("UpdateBufferID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateClientArrayPointer") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateClientArrayPointer)>(paramTokens, strings);
        return CallCapture("UpdateClientArrayPointer", std::move(params));
    }
    if (strcmp(nameToken, "UpdateClientArrayPointerWithOffset") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateClientArrayPointerWithOffset)>(paramTokens, strings);
        return CallCapture("UpdateClientArrayPointerWithOffset", std::move(params));
    }
    if (strcmp(nameToken, "UpdateClientBufferData") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateClientBufferData)>(paramTokens, strings);
        return CallCapture("UpdateClientBufferData", std::move(params));
    }
    if (strcmp(nameToken, "UpdateClientBufferDataWithOffset") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateClientBufferDataWithOffset)>(paramTokens, strings);
        return CallCapture("UpdateClientBufferDataWithOffset", std::move(params));
    }
    if (strcmp(nameToken, "UpdateCurrentContext") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateCurrentContext)>(paramTokens, strings);
        return CallCapture("UpdateCurrentContext", std::move(params));
    }
    if (strcmp(nameToken, "UpdateCurrentProgram") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateCurrentProgram)>(paramTokens, strings);
        return CallCapture("UpdateCurrentProgram", std::move(params));
    }
    if (strcmp(nameToken, "UpdateCurrentProgramPerContext") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateCurrentProgramPerContext)>(paramTokens, strings);
        return CallCapture("UpdateCurrentProgramPerContext", std::move(params));
    }
    if (strcmp(nameToken, "UpdateEGLImageData") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateEGLImageData)>(paramTokens, strings);
        return CallCapture("UpdateEGLImageData", std::move(params));
    }
    if (strcmp(nameToken, "UpdateFenceNVID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateFenceNVID)>(paramTokens, strings);
        return CallCapture("UpdateFenceNVID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateFramebufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateFramebufferID)>(paramTokens, strings);
        return CallCapture("UpdateFramebufferID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateFramebufferID2") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateFramebufferID2)>(paramTokens, strings);
        return CallCapture("UpdateFramebufferID2", std::move(params));
    }
    if (strcmp(nameToken, "UpdateMemoryObjectID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateMemoryObjectID)>(paramTokens, strings);
        return CallCapture("UpdateMemoryObjectID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateProgramPipelineID") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateProgramPipelineID)>(paramTokens, strings);
        return CallCapture("UpdateProgramPipelineID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateQueryID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateQueryID)>(paramTokens, strings);
        return CallCapture("UpdateQueryID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateRenderbufferID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateRenderbufferID)>(paramTokens, strings);
        return CallCapture("UpdateRenderbufferID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateResourceIDBuffer") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateResourceIDBuffer)>(paramTokens, strings);
        return CallCapture("UpdateResourceIDBuffer", std::move(params));
    }
    if (strcmp(nameToken, "UpdateSamplerID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateSamplerID)>(paramTokens, strings);
        return CallCapture("UpdateSamplerID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateSemaphoreID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateSemaphoreID)>(paramTokens, strings);
        return CallCapture("UpdateSemaphoreID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateShaderProgramID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateShaderProgramID)>(paramTokens, strings);
        return CallCapture("UpdateShaderProgramID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateTextureID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateTextureID)>(paramTokens, strings);
        return CallCapture("UpdateTextureID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateTransformFeedbackID") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateTransformFeedbackID)>(paramTokens, strings);
        return CallCapture("UpdateTransformFeedbackID", std::move(params));
    }
    if (strcmp(nameToken, "UpdateUniformBlockIndex") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(UpdateUniformBlockIndex)>(paramTokens, strings);
        return CallCapture("UpdateUniformBlockIndex", std::move(params));
    }
    if (strcmp(nameToken, "UpdateUniformLocation") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateUniformLocation)>(paramTokens, strings);
        return CallCapture("UpdateUniformLocation", std::move(params));
    }
    if (strcmp(nameToken, "UpdateVertexArrayID") == 0)
    {
        ParamBuffer params = ParseParameters<decltype(UpdateVertexArrayID)>(paramTokens, strings);
        return CallCapture("UpdateVertexArrayID", std::move(params));
    }
    if (strcmp(nameToken, "ValidateSerializedState") == 0)
    {
        ParamBuffer params =
            ParseParameters<decltype(ValidateSerializedState)>(paramTokens, strings);
        return CallCapture("ValidateSerializedState", std::move(params));
    }

    if (numParamTokens > 0)
    {
        printf("Expected zero parameter tokens for %s\n", nameToken);
        UNREACHABLE();
    }
    return CallCapture(nameToken, ParamBuffer());
}

template <typename Fn, EnableIfNArgs<Fn, 0> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)();
}

template <typename Fn, EnableIfNArgs<Fn, 1> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 2> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 3> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 4> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 5> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 8> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap),
          Arg<Fn, 5>(cap), Arg<Fn, 6>(cap), Arg<Fn, 7>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 16> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap),
          Arg<Fn, 5>(cap), Arg<Fn, 6>(cap), Arg<Fn, 7>(cap), Arg<Fn, 8>(cap), Arg<Fn, 9>(cap),
          Arg<Fn, 10>(cap), Arg<Fn, 11>(cap), Arg<Fn, 12>(cap), Arg<Fn, 13>(cap), Arg<Fn, 14>(cap),
          Arg<Fn, 15>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 20> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap),
          Arg<Fn, 5>(cap), Arg<Fn, 6>(cap), Arg<Fn, 7>(cap), Arg<Fn, 8>(cap), Arg<Fn, 9>(cap),
          Arg<Fn, 10>(cap), Arg<Fn, 11>(cap), Arg<Fn, 12>(cap), Arg<Fn, 13>(cap), Arg<Fn, 14>(cap),
          Arg<Fn, 15>(cap), Arg<Fn, 16>(cap), Arg<Fn, 17>(cap), Arg<Fn, 18>(cap), Arg<Fn, 19>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 22> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap),
          Arg<Fn, 5>(cap), Arg<Fn, 6>(cap), Arg<Fn, 7>(cap), Arg<Fn, 8>(cap), Arg<Fn, 9>(cap),
          Arg<Fn, 10>(cap), Arg<Fn, 11>(cap), Arg<Fn, 12>(cap), Arg<Fn, 13>(cap), Arg<Fn, 14>(cap),
          Arg<Fn, 15>(cap), Arg<Fn, 16>(cap), Arg<Fn, 17>(cap), Arg<Fn, 18>(cap), Arg<Fn, 19>(cap),
          Arg<Fn, 20>(cap), Arg<Fn, 21>(cap));
}

template <typename Fn, EnableIfNArgs<Fn, 23> = 0>
void DispatchCallCapture(Fn *fn, const Captures &cap)
{
    (*fn)(Arg<Fn, 0>(cap), Arg<Fn, 1>(cap), Arg<Fn, 2>(cap), Arg<Fn, 3>(cap), Arg<Fn, 4>(cap),
          Arg<Fn, 5>(cap), Arg<Fn, 6>(cap), Arg<Fn, 7>(cap), Arg<Fn, 8>(cap), Arg<Fn, 9>(cap),
          Arg<Fn, 10>(cap), Arg<Fn, 11>(cap), Arg<Fn, 12>(cap), Arg<Fn, 13>(cap), Arg<Fn, 14>(cap),
          Arg<Fn, 15>(cap), Arg<Fn, 16>(cap), Arg<Fn, 17>(cap), Arg<Fn, 18>(cap), Arg<Fn, 19>(cap),
          Arg<Fn, 20>(cap), Arg<Fn, 21>(cap), Arg<Fn, 22>(cap));
}

void ReplayCustomFunctionCall(const CallCapture &call, const TraceFunctionMap &customFunctions)
{
    ASSERT(call.entryPoint == EntryPoint::Invalid);
    const Captures &captures = call.params.getParamCaptures();

    if (call.customFunctionName == "CreateContext")
    {
        DispatchCallCapture(CreateContext, captures);
        return;
    }
    if (call.customFunctionName == "CreateEGLImage")
    {
        DispatchCallCapture(CreateEGLImage, captures);
        return;
    }
    if (call.customFunctionName == "CreateEGLImageKHR")
    {
        DispatchCallCapture(CreateEGLImageKHR, captures);
        return;
    }
    if (call.customFunctionName == "CreateEGLSync")
    {
        DispatchCallCapture(CreateEGLSync, captures);
        return;
    }
    if (call.customFunctionName == "CreateEGLSyncKHR")
    {
        DispatchCallCapture(CreateEGLSyncKHR, captures);
        return;
    }
    if (call.customFunctionName == "CreateNativeClientBufferANDROID")
    {
        DispatchCallCapture(CreateNativeClientBufferANDROID, captures);
        return;
    }
    if (call.customFunctionName == "CreatePbufferSurface")
    {
        DispatchCallCapture(CreatePbufferSurface, captures);
        return;
    }
    if (call.customFunctionName == "CreateProgram")
    {
        DispatchCallCapture(CreateProgram, captures);
        return;
    }
    if (call.customFunctionName == "CreateShader")
    {
        DispatchCallCapture(CreateShader, captures);
        return;
    }
    if (call.customFunctionName == "CreateShaderProgramv")
    {
        DispatchCallCapture(CreateShaderProgramv, captures);
        return;
    }
    if (call.customFunctionName == "DeleteUniformLocations")
    {
        DispatchCallCapture(DeleteUniformLocations, captures);
        return;
    }
    if (call.customFunctionName == "DestroyEGLImage")
    {
        DispatchCallCapture(DestroyEGLImage, captures);
        return;
    }
    if (call.customFunctionName == "DestroyEGLImageKHR")
    {
        DispatchCallCapture(DestroyEGLImageKHR, captures);
        return;
    }
    if (call.customFunctionName == "FenceSync")
    {
        DispatchCallCapture(FenceSync, captures);
        return;
    }
    if (call.customFunctionName == "FenceSync2")
    {
        DispatchCallCapture(FenceSync2, captures);
        return;
    }
    if (call.customFunctionName == "InitializeBinaryDataLoader")
    {
        DispatchCallCapture(InitializeBinaryDataLoader, captures);
        return;
    }
    if (call.customFunctionName == "InitializeReplay")
    {
        DispatchCallCapture(InitializeReplay, captures);
        return;
    }
    if (call.customFunctionName == "InitializeReplay2")
    {
        DispatchCallCapture(InitializeReplay2, captures);
        return;
    }
    if (call.customFunctionName == "InitializeReplay3")
    {
        DispatchCallCapture(InitializeReplay3, captures);
        return;
    }
    if (call.customFunctionName == "InitializeReplay4")
    {
        DispatchCallCapture(InitializeReplay4, captures);
        return;
    }
    if (call.customFunctionName == "InitializeReplay5")
    {
        DispatchCallCapture(InitializeReplay5, captures);
        return;
    }
    if (call.customFunctionName == "MapBufferOES")
    {
        DispatchCallCapture(MapBufferOES, captures);
        return;
    }
    if (call.customFunctionName == "MapBufferRange")
    {
        DispatchCallCapture(MapBufferRange, captures);
        return;
    }
    if (call.customFunctionName == "MapBufferRangeEXT")
    {
        DispatchCallCapture(MapBufferRangeEXT, captures);
        return;
    }
    if (call.customFunctionName == "SetBufferID")
    {
        DispatchCallCapture(SetBufferID, captures);
        return;
    }
    if (call.customFunctionName == "SetCurrentContextID")
    {
        DispatchCallCapture(SetCurrentContextID, captures);
        return;
    }
    if (call.customFunctionName == "SetFramebufferID")
    {
        DispatchCallCapture(SetFramebufferID, captures);
        return;
    }
    if (call.customFunctionName == "SetFramebufferID2")
    {
        DispatchCallCapture(SetFramebufferID2, captures);
        return;
    }
    if (call.customFunctionName == "SetRenderbufferID")
    {
        DispatchCallCapture(SetRenderbufferID, captures);
        return;
    }
    if (call.customFunctionName == "SetTextureID")
    {
        DispatchCallCapture(SetTextureID, captures);
        return;
    }
    if (call.customFunctionName == "UniformBlockBinding")
    {
        DispatchCallCapture(UniformBlockBinding, captures);
        return;
    }
    if (call.customFunctionName == "UpdateBufferID")
    {
        DispatchCallCapture(UpdateBufferID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateClientArrayPointer")
    {
        DispatchCallCapture(UpdateClientArrayPointer, captures);
        return;
    }
    if (call.customFunctionName == "UpdateClientArrayPointerWithOffset")
    {
        DispatchCallCapture(UpdateClientArrayPointerWithOffset, captures);
        return;
    }
    if (call.customFunctionName == "UpdateClientBufferData")
    {
        DispatchCallCapture(UpdateClientBufferData, captures);
        return;
    }
    if (call.customFunctionName == "UpdateClientBufferDataWithOffset")
    {
        DispatchCallCapture(UpdateClientBufferDataWithOffset, captures);
        return;
    }
    if (call.customFunctionName == "UpdateCurrentContext")
    {
        DispatchCallCapture(UpdateCurrentContext, captures);
        return;
    }
    if (call.customFunctionName == "UpdateCurrentProgram")
    {
        DispatchCallCapture(UpdateCurrentProgram, captures);
        return;
    }
    if (call.customFunctionName == "UpdateCurrentProgramPerContext")
    {
        DispatchCallCapture(UpdateCurrentProgramPerContext, captures);
        return;
    }
    if (call.customFunctionName == "UpdateEGLImageData")
    {
        DispatchCallCapture(UpdateEGLImageData, captures);
        return;
    }
    if (call.customFunctionName == "UpdateFenceNVID")
    {
        DispatchCallCapture(UpdateFenceNVID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateFramebufferID")
    {
        DispatchCallCapture(UpdateFramebufferID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateFramebufferID2")
    {
        DispatchCallCapture(UpdateFramebufferID2, captures);
        return;
    }
    if (call.customFunctionName == "UpdateMemoryObjectID")
    {
        DispatchCallCapture(UpdateMemoryObjectID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateProgramPipelineID")
    {
        DispatchCallCapture(UpdateProgramPipelineID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateQueryID")
    {
        DispatchCallCapture(UpdateQueryID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateRenderbufferID")
    {
        DispatchCallCapture(UpdateRenderbufferID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateResourceIDBuffer")
    {
        DispatchCallCapture(UpdateResourceIDBuffer, captures);
        return;
    }
    if (call.customFunctionName == "UpdateSamplerID")
    {
        DispatchCallCapture(UpdateSamplerID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateSemaphoreID")
    {
        DispatchCallCapture(UpdateSemaphoreID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateShaderProgramID")
    {
        DispatchCallCapture(UpdateShaderProgramID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateTextureID")
    {
        DispatchCallCapture(UpdateTextureID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateTransformFeedbackID")
    {
        DispatchCallCapture(UpdateTransformFeedbackID, captures);
        return;
    }
    if (call.customFunctionName == "UpdateUniformBlockIndex")
    {
        DispatchCallCapture(UpdateUniformBlockIndex, captures);
        return;
    }
    if (call.customFunctionName == "UpdateUniformLocation")
    {
        DispatchCallCapture(UpdateUniformLocation, captures);
        return;
    }
    if (call.customFunctionName == "UpdateVertexArrayID")
    {
        DispatchCallCapture(UpdateVertexArrayID, captures);
        return;
    }
    if (call.customFunctionName == "ValidateSerializedState")
    {
        DispatchCallCapture(ValidateSerializedState, captures);
        return;
    }

    auto iter = customFunctions.find(call.customFunctionName);
    if (iter == customFunctions.end())
    {
        printf("Unknown custom function: %s\n", call.customFunctionName.c_str());
        UNREACHABLE();
    }
    else
    {
        ASSERT(call.params.empty());
        const TraceFunction &customFunc = iter->second;
        for (const CallCapture &customCall : customFunc)
        {
            ReplayTraceFunctionCall(customCall, customFunctions);
        }
    }
}
}  // namespace angle
