2011-12-30 61 views
2

我有一個無效的圖像格式錯誤,從opengl出現。我不確定是因爲我使用了預編譯頭文件,還是我沒有正確初始化OpenGL。據我所知,我沒有使用C++/CLI(我選擇在VC++ Express 2010中創建一個空項目)。我正在運行Windows7(x64),並且我的錯誤代碼是0xc000007bOpenGL給出無效的圖像格式

這是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函數移動到主函數頂部的建議,但這也不起作用。

+1

你究竟得到這個錯誤? OpenGL *本身*沒有「無效格式錯誤」的概念。 – 2011-12-30 20:45:43

+1

這可能意味着您試圖在64位應用程序中加載32位DLL,反之亦然。 – 2011-12-30 20:46:11

+0

這很可能是這種情況,只有我的32位dll加載到我的system32中(實際上是glew32)。我會嘗試將它移到SysWOW64並看看會發生什麼。 – zeboidlund 2011-12-30 20:54:00

回答

0

你不能調用任何OpenGL函數直到之後你調用glutCreateWindow來創建OpenGL窗口。因此,在撥打init之前,請將draw_window的內容放入main中。

+0

我嘗試過,將函數移到main的最頂端,看看它是否可行,而且我仍然收到同樣的錯誤。我會報告JonathonReinhart的建議是否有效。 – zeboidlund 2011-12-30 20:55:15

0

您可以嘗試使用GLee代替GLEW。兩者執行相同的功能(查找OpenGL擴展函數的函數指針),但GLee關注易用性,而GLEW功能更強大。

隨着GLee,你應該從顛覆中獲得最新版本,因爲最新發布的版本已經過時了。但是,您需要做的只是包括glee.h並將glee.c添加到您的項目中。不需要DLL。而GLee也會在你需要的時候加載擴展,它不會像GLEW那樣加載數千個擴展的啓動代碼。

2

問題解決了。

請勿將freeglut.dll放入您的SysWOW64文件夾中;相反,將它添加到您的System32文件夾中。

至少,首先嚐試System32文件夾。