OpenGL提供无效的图像格式

时间:2011-12-30 20:41:45

标签: c++ visual-c++ opengl freeglut

我有一个无效的图像格式错误,它从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.dll移至SysWOW64,不幸的是,这不起作用。我还尝试了将draw_window函数移到main的顶部的建议,但这也没有用。

3 个答案:

答案 0 :(得分:2)

问题解决了。

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

至少先试试System32文件夹。

答案 1 :(得分:0)

之后调用glutCreateWindow来创建OpenGL窗口之前,不能调用任何OpenGL函数。因此,在调用draw_window之前,请将main的内容放入init

答案 2 :(得分:0)

您可以尝试使用GLee代替GLEW。两者都执行相同的功能(查找OpenGL扩展函数的函数指针),但GLee注重易用性,而GLEW更强大。

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