// 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, "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
