2

我有一个来自 opengl 的无效图像格式错误。我不确定是因为我使用了预编译的头文件,还是我没有正确初始化 OpenGL。据我所知,我没有使用 C++/CLI(我选择在 VC++ Express 2010 中创建一个空项目)。我正在运行 Windows7 (x64),我的错误代码是0xc000007b.

这在OpenGL中很常见吗?我也在使用 Glew 和 Freeglut。

奇怪的是我根本没有尝试渲染图像或任何东西。我只是想让一个窗口出现。

编码

#include "stdafx.h"
#include "triangle.h"
#include "matrix3f.h"

static GLfloat move;
static GLfloat spin;

void init() {
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glShadeModel(GL_FLAT);
    glPopMatrix();
    glutSwapBuffers();
}

void draw_window() {
    int height = 500;
    double width = 1.9 * (double)height;
    glutInitWindowSize((int)width, height);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("opengl_03");
}

void spin_display() {
    spin += 2.0;
    if (spin > 360.0)
        spin -= 360.0;
    glutPostRedisplay();
}

void move_display() {
    move += 1.0;
    if (move > 10) 
        move -= 10;
    glutPostRedisplay();
}

void keyboard(unsigned char button, int state, int x) {

}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitContextVersion(3, 1);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    init();
    draw_window();

    //system("pause");

    return 0;
}

还很有趣的是,我如何从中得到一个糟糕的图像格式。我已经检查以确保我的版本也在 IDE 中进行调试。

问题

如果可能的话,我的主要问题是确切地知道我做错了什么。

更新

我尝试移动glew32.dllSysWOW64,不幸的是这没有奏效。我还尝试了将我的draw_window函数移到 main 顶部的建议,但这也不起作用。

4

3 回答 3

2

问题解决了。

不要放入freeglut.dll你的SysWOW64文件夹;而是将其添加到您的System32文件夹中。

至少,System32先试试这个文件夹。

于 2011-12-30T21:48:00.983 回答
0

您可以尝试使用Glee 而不是 GLEW 两者执行相同的功能(为 OpenGL 扩展函数查找函数指针),但 GLee 侧重于易用性,而 GLEW 更强大。

使用 Glee,您应该从 subversion 获得最新版本,因为最后发布的版本已经过时了。但是您需要做的就是包含glee.h并添加glee.c到您的项目中。不需要 DLL。并且 GLee 还可以根据需要加载扩展,它不会像 GLEW 那样尝试加载数千个扩展而使您的启动代码陷入困境。

于 2011-12-30T21:25:18.403 回答
0

在调用创建 OpenGL 窗口之前您不能调用任何 OpenGL 函数。glutCreateWindow所以draw_windowmain调用init.

于 2011-12-30T20:47:12.803 回答