在没有加载库的情况下加载opengl函数时出错

时间:2019-01-23 13:22:27

标签: c++ windows opengl

我真的不知道我在做什么错。我没有使用加载库,因此可以更好地控制代码。我正在使用Windows操作系统。

#include <gl/GL.h>
#include <windows.h>

typedef BOOL(WINAPI wglSwapInterval_t) (int interval);
static wglSwapInterval_t* wglSwapInterval;

#ifndef GLAPI
#define GLAPI extern
#endif

#ifndef APIENTRYP
#define APIENTRYP APIENTRY *
#endif

#define GL_VERTEX_SHADER 0x8B31
#define GL_FRAGMENT_SHADER 0x8B30

typedef GLuint(APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
PFNGLCREATEPROGRAMPROC glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");

错误:

(5): error C2086: 'wglSwapInterval_t (__stdcall *__stdcall wglSwapInterval)': redefinition
(5): note: see declaration of 'wglSwapInterval'
(19): error C2374: 'glCreateProgram': redefinition; multiple initialization
(19): note: see declaration of 'glCreateProgram'

1 个答案:

答案 0 :(得分:1)

  • 错误C2086表示您已多次定义wglSwapInterval

  • 错误C2374表示您已多次定义和初始化glCreateProgram

此类问题的常见原因是,在单个.h文件中直接或间接(例如,包含在本身包含在当前文件中的另一个文件中)多次包含一个未经保护的.cpp文件。

为避免此类问题,请始终将#ifndef#pragma once作为include guard放在.h文件中。