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

#ifndef UTIL_WINDOWS_WGL_LOADER_AUTOGEN_H_
#define UTIL_WINDOWS_WGL_LOADER_AUTOGEN_H_

#include <GLES2/gl2.h>
#include <WGL/wgl.h>

// We add an underscore before each function name to ensure common names like "ChoosePixelFormat"
// and "SwapBuffers" don't conflict with our function pointers. We can't use a namespace because
// some functions conflict with preprocessor definitions.

extern PFNCHOOSEPIXELFORMATPROC _ChoosePixelFormat;
extern PFNDESCRIBEPIXELFORMATPROC _DescribePixelFormat;
extern PFNGETENHMETAFILEPIXELFORMATPROC _GetEnhMetaFilePixelFormat;
extern PFNGETPIXELFORMATPROC _GetPixelFormat;
extern PFNSETPIXELFORMATPROC _SetPixelFormat;
extern PFNSWAPBUFFERSPROC _SwapBuffers;
extern PFNWGLCOPYCONTEXTPROC _wglCopyContext;
extern PFNWGLCREATECONTEXTPROC _wglCreateContext;
extern PFNWGLCREATELAYERCONTEXTPROC _wglCreateLayerContext;
extern PFNWGLDELETECONTEXTPROC _wglDeleteContext;
extern PFNWGLDESCRIBELAYERPLANEPROC _wglDescribeLayerPlane;
extern PFNWGLGETCURRENTCONTEXTPROC _wglGetCurrentContext;
extern PFNWGLGETCURRENTDCPROC _wglGetCurrentDC;
extern PFNWGLGETLAYERPALETTEENTRIESPROC _wglGetLayerPaletteEntries;
extern PFNWGLGETPROCADDRESSPROC _wglGetProcAddress;
extern PFNWGLMAKECURRENTPROC _wglMakeCurrent;
extern PFNWGLREALIZELAYERPALETTEPROC _wglRealizeLayerPalette;
extern PFNWGLSETLAYERPALETTEENTRIESPROC _wglSetLayerPaletteEntries;
extern PFNWGLSHARELISTSPROC _wglShareLists;
extern PFNWGLSWAPLAYERBUFFERSPROC _wglSwapLayerBuffers;
extern PFNWGLUSEFONTBITMAPSPROC _wglUseFontBitmaps;
extern PFNWGLUSEFONTBITMAPSAPROC _wglUseFontBitmapsA;
extern PFNWGLUSEFONTBITMAPSWPROC _wglUseFontBitmapsW;
extern PFNWGLUSEFONTOUTLINESPROC _wglUseFontOutlines;
extern PFNWGLUSEFONTOUTLINESAPROC _wglUseFontOutlinesA;
extern PFNWGLUSEFONTOUTLINESWPROC _wglUseFontOutlinesW;
extern PFNWGLCREATECONTEXTATTRIBSARBPROC _wglCreateContextAttribsARB;
extern PFNWGLGETEXTENSIONSSTRINGARBPROC _wglGetExtensionsStringARB;
extern PFNWGLGETSWAPINTERVALEXTPROC _wglGetSwapIntervalEXT;
extern PFNWGLSWAPINTERVALEXTPROC _wglSwapIntervalEXT;

namespace angle
{
using GenericProc = void (*)();
using LoadProc    = GenericProc(KHRONOS_APIENTRY *)(const char *);
void LoadWGL(LoadProc loadProc);
}  // namespace angle

#endif  // UTIL_WINDOWS_WGL_LOADER_AUTOGEN_H_
