- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 OS X 10.8.4 上的 XCode(版本 4.6.3)中使用 GLFW(版本 3.0.2)和 GLEW(版本 1.10.0)运行一个简单的 OpenGL 程序。完整代码如下所示。
#include <GLFW/glfw3.h>
#include <OpenGL/OpenGL.h>
#include <iostream>
using namespace std;
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void InitGL()
{
glClearColor(1, 0, 0, 1);
}
void ErrorFunc(int code, const char *msg)
{
cerr << "Error " << code << ": " << msg << endl;
}
int main(void)
{
GLFWwindow* window;
/* Report errors */
glfwSetErrorCallback(ErrorFunc);
/* Initialize the library */
if (!glfwInit())
return -1;
/* Window hints */
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Initialize OpenGL */
InitGL();
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
RenderScene();
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
其中大部分内容直接来自 GLFW 的文档;只有渲染函数和 GLEW 初始化是我的。我添加了 OpenGL、Cocoa 和 IOKit 的框架,并链接到 libGLEW.a 和 libglfw3.a。该程序编译成功,但在尝试执行 GLEW 应该处理的函数时似乎崩溃了。此处,程序在 glClearBufferfv
上崩溃。如果我注释掉它,我会得到一个黑色背景的窗口。我的猜测是 GLEW secret 地不起作用,因为它没有报告任何错误,但似乎根本没有完成其工作。
XCode 向我抛出的确切错误消息是错误:地址不包含指向对象文件中的部分的部分
,错误代码为EXC_BAD_ACCESS
。如果我用 glClearColor
替换 glClearBufferfv
,程序不会崩溃,但实际上应该是红色的背景时仍然有黑色背景。查询时,OpenGL 返回版本字符串 2.1 NVIDIA-8.12.47 310.40.00.05f01
,这解释了为什么调用较新的函数不起作用,但 GLEW 不应该设置正确的 OpenGL 上下文?此外,GLFW 的文档表示,自 GLFW 2.7.2 以来,他们一直在创建 OpenGL 3+ 上下文。我真的不知道该怎么办。
最佳答案
glClearBuffer(...)
是一个 OpenGL 3.0 函数,并非在所有版本的 OS X 中都实现了它(有些版本仅实现了 OpenGL 2.1)。由于 OS X 不使用运行时扩展,因此 GLEW 不会为您解决此问题。
您将不得不采用传统方法来清除旧版本 OS X(10.6 或更早版本)中的缓冲区。这意味着设置“清除颜色”,然后清除颜色缓冲区,分为两步过程。使用以下命令,而不是使用可以将特定缓冲区清除为特定值的单个函数调用:
#define USE_GL3 // This code requires OpenGL 3.0, comment out if unavailable
void RenderScene()
{
GLfloat color[] = {1.0f, 0.0f, 0.0f};
#ifdef USE_GL3 // Any system that implements OpenGL 3.0+
glClearBufferfv (GL_COLOR, 0, color);
#else // Any other system
glClearColor (color [0], color [1], color [2]);
glClear (GL_COLOR_BUFFER_BIT);
#endif
}
然而,这并不理想。多次设置透明颜色是没有意义的。您应该在初始化应用程序时设置一次透明颜色并替换!代码的 USE_GL3
分支带有 glClear (GL_COLOR_BUFFER_BIT);
现在,因为您提到您正在使用 Mac OS X 10.8,所以您可以忽略我上面写的很多内容。如果操作正确的话,OS X 10.8 实际上实现了 OpenGL 3.2。
要让 glClearBuffer (...)
在 OS X 上工作,您需要做两件事:
在 glfw 中创建窗口之前,添加以下代码:
glfwWindowHint (GLFW_OPENGL_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_OPENGL_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
一旦您拥有 OpenGL 3.2 核心上下文,您还可以消除整个 ! USE_GL3
代码中的预处理器分支。这是一项允许您的代码在不支持 OpenGL 3.2 的 OS X 实现上运行的规定。
关于xcode - GLEW 在 XCode 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18731410/
使用glew,我正在尝试链接简单的程序 #include int main (int argc, const char * argv[]) { glewInit(); return
我有一个动态库,在构建中包含glew.c,并使用GLEW_STATIC 构建。如果另一个库链接到同一个应用程序并且还以某种方式包含 GLEW,是否有可能由于单一定义规则而导致 Linux 出现问题?
我在 Macintosh 上使用终端。 要编译的命令是基本的: g++ -c String.cpp -o String.o g++ -c FileIO.cpp -o FileIO.o g++ -c
我正在配置一个与 glut 一起工作的程序来与 Qt 一起工作。我正在使用 Qt 5.1.1。并且似乎从 Qt4 到 Qt5 已经丢失了一些 openGL 功能。在我的程序中,我创建了一个 QOpen
我正在尝试做 openGLbook.com 教程。我收到这个常见错误: 1>------ Build started: Project: OpenGL Startup, Configurati
我读过这个 [1],但在我的例子中,CMake 说它找不到 glew。 我在 Windows 上,我的 CMake 模块文件夹中有一个 FindGLEW.cmake 文件,大概是在我安装 CMake-
这很奇怪。我想在我的 gl 程序中实现着色器。 但 GLEW 告诉我,我的系统不支持着色器: //glut init and glew init ... if (GLEW_ARB_vertex_sha
我想使用三角扇绘制不同的图形,但我不知道如何让程序绘制第二个图形。每次我想更改颜色或绘制新图形时,是否需要第二个 vertexShaderSource 和第二个 fragmentShaderSourc
我现在对尝试链接这个 glew 库感到非常沮丧 这是构建日志: g++ -o test.exe "src\\test.o" -lglew32 -lglfw -lglu32 -lopengl32 src
当我尝试在 CLion 中构建我的项目时,我遇到了来自 cmake 的链接错误。我已经尝试过其他线程所说的:将 opengl 放在最后,将 glu 放在第一位,更改我的 include 的顺序并设置
我遇到了这个问题,不知道该怎么办? 'abc.exe': Loaded 'D:\Windows\SysWOW64\nvoglv32.dll', Cannot find or open the PDB
我只是想使用 SDL 2.0 和 glew 1.9 创建一个 openGL 上下文 构建项目时没有问题,但在调试时,GLEW 初始化失败,我该怎么做才能解决这个问题? 我正在使用 visual stu
我正在使用以下代码检查是否有任何错误: glfwInit(); glewExperimental = GL_TRUE; if (glewInit() != 0) { std::cout <<
不知何故,我无法在多个头文件中获取 Glew。它只是提示 Gl 已经在 GLEW 之前定义了。 简而言之,我有以下文件结构: 程序.h 包括: , 和 "SceneManager.h" . 场景管理器
我的机器有 OpenGL 2.0,由于一些奇怪的原因,头文件 gl.h 不包含着色器函数。所以,有人建议我使用 GLEW。我正确安装了 GLEW,并将 glew32s 链接到我的编译器,我还在我的 m
我需要在 Ubuntu 11.10 中加载扩展。我尝试构建 GLEW,但出现以下奇怪错误... ~/Downloads/glew-1.7.0$ make cc -shared -Wl,-soname=
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我试图通过将源文件添加到我的项目来跳过 glew 的“链接步骤”,以使代码更加灵活(目标 32 位和 64 位,只需稍作修改)。我已经使用 Code::Blocks 和 mingw 32 位实现了 3
出于我无法理解的原因,glew 在静态链接时根本不起作用。有没有一种方法可以简单地将 glew.h、glxew.h、wglew.h 和 glew.c 源文件包含到我的项目中并使用 #include "
我编译了 GLEW 库。它似乎工作正常,这里是 make install 的输出: install -d -m 0755 "/usr/include/GL" install -m 0644 inclu
我是一名优秀的程序员,十分优秀!