我有一个无效的图像格式错误,它从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的顶部的建议,但这也没有用。
答案 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那样陷入尝试加载数千个扩展的启动代码。