// GENERATED FILE - DO NOT EDIT.
// Generated by generate_loader.py using data from wgl.xml.
//
// Copyright 2018 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.
//
// wgl_loader_autogen.cpp:
//   Simple WGL function loader.

#include "wgl_loader_autogen.h"

extern "C" {
PFNCHOOSEPIXELFORMATPROC l__ChoosePixelFormat;
PFNDESCRIBEPIXELFORMATPROC l__DescribePixelFormat;
PFNGETENHMETAFILEPIXELFORMATPROC l__GetEnhMetaFilePixelFormat;
PFNGETPIXELFORMATPROC l__GetPixelFormat;
PFNSETPIXELFORMATPROC l__SetPixelFormat;
PFNSWAPBUFFERSPROC l__SwapBuffers;
PFNWGLCOPYCONTEXTPROC l__wglCopyContext;
PFNWGLCREATECONTEXTPROC l__wglCreateContext;
PFNWGLCREATELAYERCONTEXTPROC l__wglCreateLayerContext;
PFNWGLDELETECONTEXTPROC l__wglDeleteContext;
PFNWGLDESCRIBELAYERPLANEPROC l__wglDescribeLayerPlane;
PFNWGLGETCURRENTCONTEXTPROC l__wglGetCurrentContext;
PFNWGLGETCURRENTDCPROC l__wglGetCurrentDC;
PFNWGLGETLAYERPALETTEENTRIESPROC l__wglGetLayerPaletteEntries;
PFNWGLGETPROCADDRESSPROC l__wglGetProcAddress;
PFNWGLMAKECURRENTPROC l__wglMakeCurrent;
PFNWGLREALIZELAYERPALETTEPROC l__wglRealizeLayerPalette;
PFNWGLSETLAYERPALETTEENTRIESPROC l__wglSetLayerPaletteEntries;
PFNWGLSHARELISTSPROC l__wglShareLists;
PFNWGLSWAPLAYERBUFFERSPROC l__wglSwapLayerBuffers;
PFNWGLUSEFONTBITMAPSPROC l__wglUseFontBitmaps;
PFNWGLUSEFONTBITMAPSAPROC l__wglUseFontBitmapsA;
PFNWGLUSEFONTBITMAPSWPROC l__wglUseFontBitmapsW;
PFNWGLUSEFONTOUTLINESPROC l__wglUseFontOutlines;
PFNWGLUSEFONTOUTLINESAPROC l__wglUseFontOutlinesA;
PFNWGLUSEFONTOUTLINESWPROC l__wglUseFontOutlinesW;
PFNWGLCREATECONTEXTATTRIBSARBPROC l__wglCreateContextAttribsARB;
PFNWGLGETEXTENSIONSSTRINGARBPROC l__wglGetExtensionsStringARB;
PFNWGLCHOOSEPIXELFORMATARBPROC l__wglChoosePixelFormatARB;
PFNWGLGETPIXELFORMATATTRIBFVARBPROC l__wglGetPixelFormatAttribfvARB;
PFNWGLGETPIXELFORMATATTRIBIVARBPROC l__wglGetPixelFormatAttribivARB;
PFNWGLGETSWAPINTERVALEXTPROC l__wglGetSwapIntervalEXT;
PFNWGLSWAPINTERVALEXTPROC l__wglSwapIntervalEXT;

void LoadWGL(LoadProc loadProc)
{
    l__ChoosePixelFormat =
        reinterpret_cast<PFNCHOOSEPIXELFORMATPROC>(loadProc("ChoosePixelFormat"));
    l__DescribePixelFormat =
        reinterpret_cast<PFNDESCRIBEPIXELFORMATPROC>(loadProc("DescribePixelFormat"));
    l__GetEnhMetaFilePixelFormat =
        reinterpret_cast<PFNGETENHMETAFILEPIXELFORMATPROC>(loadProc("GetEnhMetaFilePixelFormat"));
    l__GetPixelFormat   = reinterpret_cast<PFNGETPIXELFORMATPROC>(loadProc("GetPixelFormat"));
    l__SetPixelFormat   = reinterpret_cast<PFNSETPIXELFORMATPROC>(loadProc("SetPixelFormat"));
    l__SwapBuffers      = reinterpret_cast<PFNSWAPBUFFERSPROC>(loadProc("SwapBuffers"));
    l__wglCopyContext   = reinterpret_cast<PFNWGLCOPYCONTEXTPROC>(loadProc("wglCopyContext"));
    l__wglCreateContext = reinterpret_cast<PFNWGLCREATECONTEXTPROC>(loadProc("wglCreateContext"));
    l__wglCreateLayerContext =
        reinterpret_cast<PFNWGLCREATELAYERCONTEXTPROC>(loadProc("wglCreateLayerContext"));
    l__wglDeleteContext = reinterpret_cast<PFNWGLDELETECONTEXTPROC>(loadProc("wglDeleteContext"));
    l__wglDescribeLayerPlane =
        reinterpret_cast<PFNWGLDESCRIBELAYERPLANEPROC>(loadProc("wglDescribeLayerPlane"));
    l__wglGetCurrentContext =
        reinterpret_cast<PFNWGLGETCURRENTCONTEXTPROC>(loadProc("wglGetCurrentContext"));
    l__wglGetCurrentDC = reinterpret_cast<PFNWGLGETCURRENTDCPROC>(loadProc("wglGetCurrentDC"));
    l__wglGetLayerPaletteEntries =
        reinterpret_cast<PFNWGLGETLAYERPALETTEENTRIESPROC>(loadProc("wglGetLayerPaletteEntries"));
    l__wglGetProcAddress =
        reinterpret_cast<PFNWGLGETPROCADDRESSPROC>(loadProc("wglGetProcAddress"));
    l__wglMakeCurrent = reinterpret_cast<PFNWGLMAKECURRENTPROC>(loadProc("wglMakeCurrent"));
    l__wglRealizeLayerPalette =
        reinterpret_cast<PFNWGLREALIZELAYERPALETTEPROC>(loadProc("wglRealizeLayerPalette"));
    l__wglSetLayerPaletteEntries =
        reinterpret_cast<PFNWGLSETLAYERPALETTEENTRIESPROC>(loadProc("wglSetLayerPaletteEntries"));
    l__wglShareLists = reinterpret_cast<PFNWGLSHARELISTSPROC>(loadProc("wglShareLists"));
    l__wglSwapLayerBuffers =
        reinterpret_cast<PFNWGLSWAPLAYERBUFFERSPROC>(loadProc("wglSwapLayerBuffers"));
    l__wglUseFontBitmaps =
        reinterpret_cast<PFNWGLUSEFONTBITMAPSPROC>(loadProc("wglUseFontBitmaps"));
    l__wglUseFontBitmapsA =
        reinterpret_cast<PFNWGLUSEFONTBITMAPSAPROC>(loadProc("wglUseFontBitmapsA"));
    l__wglUseFontBitmapsW =
        reinterpret_cast<PFNWGLUSEFONTBITMAPSWPROC>(loadProc("wglUseFontBitmapsW"));
    l__wglUseFontOutlines =
        reinterpret_cast<PFNWGLUSEFONTOUTLINESPROC>(loadProc("wglUseFontOutlines"));
    l__wglUseFontOutlinesA =
        reinterpret_cast<PFNWGLUSEFONTOUTLINESAPROC>(loadProc("wglUseFontOutlinesA"));
    l__wglUseFontOutlinesW =
        reinterpret_cast<PFNWGLUSEFONTOUTLINESWPROC>(loadProc("wglUseFontOutlinesW"));
    l__wglCreateContextAttribsARB =
        reinterpret_cast<PFNWGLCREATECONTEXTATTRIBSARBPROC>(loadProc("wglCreateContextAttribsARB"));
    l__wglGetExtensionsStringARB =
        reinterpret_cast<PFNWGLGETEXTENSIONSSTRINGARBPROC>(loadProc("wglGetExtensionsStringARB"));
    l__wglChoosePixelFormatARB =
        reinterpret_cast<PFNWGLCHOOSEPIXELFORMATARBPROC>(loadProc("wglChoosePixelFormatARB"));
    l__wglGetPixelFormatAttribfvARB = reinterpret_cast<PFNWGLGETPIXELFORMATATTRIBFVARBPROC>(
        loadProc("wglGetPixelFormatAttribfvARB"));
    l__wglGetPixelFormatAttribivARB = reinterpret_cast<PFNWGLGETPIXELFORMATATTRIBIVARBPROC>(
        loadProc("wglGetPixelFormatAttribivARB"));
    l__wglGetSwapIntervalEXT =
        reinterpret_cast<PFNWGLGETSWAPINTERVALEXTPROC>(loadProc("wglGetSwapIntervalEXT"));
    l__wglSwapIntervalEXT =
        reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(loadProc("wglSwapIntervalEXT"));
}
}  // extern "C"
