【问题标题】:Using Glew in multiple files在多个文件中使用 Glew
【发布时间】:2011-03-07 20:16:14
【问题描述】:
不知何故,我无法在多个头文件中使用 Glew。它只是抱怨 Gl 在 GLEW 之前已经定义了。
简而言之,我有以下文件结构:
- 程序.h
包括:<GL/glew.h>、<GL/freeglut.h> 和 "SceneManager.h"。
- 场景管理器.h
包括:"GameObject.h"
- GameObject.h
包括:<GL/glew.h>、<GL/freeglut.h>。
我明白 freeglut 是在 glew 前面,但我想拥有 GL_BGR 扩展名。
如何在 GameObject 中也获得 glew.h?
【问题讨论】:
标签:
c++
opengl
freeglut
glew
【解决方案1】:
必须是glew.h 中的错误。
我用 Glee 代替,它没有这个问题。 Glee 的测试是这样的:
#ifndef __glee_h_
#define __glee_h_
#ifdef __gl_h_
#error gl.h included before glee.h
#endif
#ifdef __glext_h_
#error glext.h included before glee.h
#endif
#ifdef __wglext_h_
#error wglext.h included before glee.h
#endif
#ifdef __glxext_h_
#error glxext.h included before glee.h
#endif
//...
#endif /* !defined(__glee_h_) */
所以测试只在第一次包含glee.h 时进行。
显然,在标头多重包含保护之外的测试不正确。
我第一次运行 OpenGL 跟踪(实际上是 glslDevil)时从 glew 切换到 GLee,并看到 glew 在启动时调用了数百次 glGetString(GL_EXTENSIONS)。
【解决方案2】:
我现在自己做的有点不同:
我创建了一个带有 glew 和 freeglut 的预编译头文件。它看起来像这样:
#ifndef _STDAFX_H_
#define _STDAFX_H_
#include <GL/glew.h>
#include <GL/freeglut.h>
#endif
有人可以确认这是否是一种可靠且众所周知的方法吗?