关于openGL中glew使用的简单问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于openGL中glew使用的简单问题相关的知识,希望对你有一定的参考价值。
我调用glewInit();
返回的是:1, 也就是
#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */
请问一下怎么会这样? 什么原因? 谢谢!!
请问一下,怎么创建 Render Context? 问题是,我没用用到MFC呀??
请高手指教。
下面是我转的,供你参考:
把CEGUI配置好,运行osgcegui的例子,会发现下面这句话是过不去的:)
new CEGUI::System( new CEGUI::OpenGLRenderer(0) );
调试一下:(用的GEGUI版本为0.6.2)
1 OpenGLRenderer构造失败了。
2 继续找一找构造失败的原因,构造函数调用的最后一个函数initialiseGLExtensions(初始化OpenGL的Extensions),抛出了异常。
3 异常的原因,glewInit返回值不对。
4 跟着glewinit看一看,发现glGetString(GL_VERSION)没有得到正确的version,因此返回了GLEW_ERROR_NO_GL_VERSION。
原因很清楚了,CEGUI初始化的时候需要调用glGetString(GL_VERSION),如果没有一个有效的rendering context,glGetString返回的结果是不确定的。因此在构造CEGUI::OpenGLRenderer之前需要确定一个当前有效的rc。
在osg中按如下写法就可以了:
osgViewer::Viewer viewer;
viewer.setThreadingModel(osgViewer::ViewerBase::SingleThreaded);
viewer.realize();
viewer.getCamera()->getGraphicsContext()->makeCurrent();
第二句话设置线程模式为单线程,如果不设单线程,似乎只能去渲染线程初始化cegui了吧。第四句话里面会调用wglMakeCurrent,设定一个有效的rc。如果这里没有写,osg需要到draw的时候才会MakeCurrent:) 参考技术A MFC下使用glewInit时需要先将Render Context创建好, 否则glewInit将返回GLEW_ERROR_NO_GL_VERSION
使用 GLEW、assimp、SDL2 和 CMake 和 CodeBlocks 的 C++ OpenGL 项目设置
【中文标题】使用 GLEW、assimp、SDL2 和 CMake 和 CodeBlocks 的 C++ OpenGL 项目设置【英文标题】:C++ OpenGL Project Setup using GLEW, assimp, SDL2 and CMake with CodeBlocks 【发布时间】:2016-01-23 22:06:55 【问题描述】:我已经完成了关于使用 Java 和 lwjgl 在 OpenGL 中制作 3D 渲染引擎的完整教程,制作教程的人也用 C++ 编写了引擎
为了增加我的编程知识,我也想看看 C++ 版本。此外,我相信(我可能完全错了)我实际上可以用 C++ 做比用 java 做的更多的事情。我遇到的主要问题是,尽管包含说明,但我无法让引擎运行,如果有人能帮助我,我将不胜感激。
这是我要设置的引擎:https://github.com/BennyQBD/3DEngineCpp
我想在这个项目中使用 CodeBlocks,因为它是推荐的,与 Visual Studio 不同,它是免费的。我还下载了 glew、assimp 和 sdl,并安装了运行所需的 CMake。现在我必须根据这里的说明将它们放在一起:
###Windows/MinGW###
- Make sure CMake is both installed and added to the system PATH.
- Open a Terminal and run:
```Shell
# install dependencies
# Install GLEW in %PROGRAMFILES%/GLEW or SET %GLEW_ROOT_DIR% to where GLEW is on your machine (Example: D:\PATH_TO_GLEW)
# Install SDL2 in %PROGRAMFILES%/SDL2 or SET %SDL2_ROOT_DIR% to where SDL2 is on your machine (Example: D:\PATH_TO_SDL2)
# Install ASSIMP in %PROGRAMFILES%/ASSIMP or SET %ASSIMP_ROOT_DIR% to where ASSIMP is on your machine (Example: D:\PATH_TO_ASSIMP)
cd build
# REPLACE "Visual Studio 12" with your preferred build toolchain (Maybe you want "Codeblocks - MinGW Makefiles")
# BTW VS 10 is VS 2010, VS 11 is VS 2012 and VS 12 is VS 2013, BLAME MicroSoft for the naming! LOL!
cmake -G "Visual Studio 12" ../
# open the generated SLN file (or cbp file if using CodeBlocks) and build!
```
- Copy the DLLs in /lib/_bin/ to /build/Debug/ and /build/Release/
- In Visual Studio, set the Startup project to 3DEngineCpp
- Move the res folder into the build folder
- Run
主要问题是,因为我只在 Eclipse 中完成了 java 编码,所以我有点困惑..
他所说的“打开终端并运行:'''Shell”是什么意思?我应该如何安装glew、sdl2和assimp?什么是 cd 构建?为什么我需要 CMake,它并没有真正提到它的作用..?
也许有人可以详细说明(如果可能的话,一步一步地)我需要做什么才能让它运行,非常感谢!
【问题讨论】:
【参考方案1】:不保证我的步骤将完美无缺,因为 C++ 中的外部依赖项对我来说仍然非常痛苦,但我会给你一些线索并希望你取得一些进展。另外,我从未使用过 Code::Blocks,所以我不确定 Visual Studio 项目是否与它兼容。这是我知道如何在 Windows 上做事的唯一方法。
首先,您需要安装 CMake。 CMake 是一个生成项目文件的实用程序,以便可以在某些平台上轻松编译项目。它在 Windows 上生成 Visual Studio 项目文件,这将允许您在 Visual Studio 中打开项目,并从那里编译它们。
为了构建项目,您必须首先理清它的依赖关系。
灵光:
-
下载 GLEW 的 sources 并提取所有内容。它带有 Visual Studio 项目文件
以管理员权限打开 Visual Studio
打开 GLEW 的项目
构建一切
运行
install
“项目”以让 Visual Studio 安装 GLEW
Assimp:
-
从 GitHub 下载 Assimp 的 source
在某处提取项目根目录。根目录是
CMakeLists.txt
所在的目录
打开 CMake 的 GUI 实用程序
单击“浏览源”,然后选择该目录
通过单击“浏览构建”选择输出目录
单击配置,完成后单击生成。这将为您生成一个 Visual Studio 项目文件
使用 Visual Studio 打开项目,构建所有内容。像以前一样运行 install
来安装 Assimp
SDL2:SDL 的源代码随 Visual Studio 项目文件一起提供,因此您可以重复 GLEW 的步骤来安装它。
现在您终于可以开始尝试让引擎工作了。不能保证它会起作用,但我会尝试我为 Assimp 建议的相同方法,因为它们都是 CMake 项目。生成项目文件后,您可以在 Visual Studio 中打开它。除了这一次,您不会真正安装它。您可以修改源代码并像运行任何其他 C++ 项目一样运行它。
【讨论】:
以上是关于关于openGL中glew使用的简单问题的主要内容,如果未能解决你的问题,请参考以下文章