在没有加载库的情况下加载 opengl 函数时出错
Posted
技术标签:
【中文标题】在没有加载库的情况下加载 opengl 函数时出错【英文标题】:Error while loading opengl functions without a loading library 【发布时间】:2019-01-23 13:22:27 【问题描述】:我真的不知道我做错了什么。我没有使用加载库,所以我可以更好地控制我的代码。我用的是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'
【问题讨论】:
您遇到了哪个错误?什么不工作?你有一个有效的 OpenGL 上下文吗? 对不起,我在编辑中发布了错误 @BobTheTreeGod 见wglext - extension not installed in OpenGL context 我敢打赌,你要么自己做多个包含(简单的#ifndef xxx #define xxx ... #endif
会修复它),要么重新定义已经包含的东西,比如wglSwapInterval_t
现在似乎可以与 ifndef 一起使用
@BobTheTreeGod 是的,所以你不止一次包含该文件......我还在某些平台(AVR32/GCC)上看到编译器编译目录中的所有 C 或 Cpp 文件,所以如果你包含C 或 Cpp 文件在其编译两次 ...在多个包含/编译时,它只会为每个单独的对象编译一次 ...
【参考方案1】:
错误C2086 表示您已多次定义wglSwapInterval
。
错误C2374 表示您已多次定义和初始化glCreateProgram
。
此类问题的常见原因是在一个 .cpp
文件中直接或间接地多次包含不受保护的 .h
文件(即包含在另一个文件中,而该文件本身包含在当前文件中)。
为避免此类问题,请始终将 #ifndef
或 #pragma once
作为 include guard 放入您的 .h
文件中。
【讨论】:
以上是关于在没有加载库的情况下加载 opengl 函数时出错的主要内容,如果未能解决你的问题,请参考以下文章
在为 Drupal 应用程序加载 50 个用户的情况下运行 jmeter 测试一段时间时出错