2011-12-30 14 views
2

OpenGLから無効なイメージ形式エラーが発生しました。私はプリコンパイルされたヘッダーを使用しているのか、OpenGLを適切に初期化していないのか分かりません。私が知る限り、私はC++/CLIを使用していません(私はVC++ Express 2010で空のプロジェクトを作成しました)。私はWindows7(x64)を実行しています。私のエラーコードは0xc000007bです。OpenGLが無効なイメージ形式を返します

これはOpenGLと共通ですか?また、私はFreeglutと一緒にGlewを使っています。

奇妙なことは、イメージや何かをレンダリングしようとしていないことです。私は単にウィンドウを表示しようとしています。

コード

#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でデバッグされていることを確認しました。

質問

私の主な質問は、可能な場合、私が間違っているの内容を正確に把握することです。

更新

は私がSysWOW64glew32.dllを移動しようとした、残念ながらそれは動作しませんでした。私はまた私のdraw_window機能をメインの先頭に移動することを含む提案を試みましたが、それはどちらも機能しませんでした。

+1

正確にこのエラーが発生していますか? OpenGL *自体には、 "無効なフォーマットエラー"という概念はありません。 –

+1

これはおそらく、64ビットアプリケーションで32ビットDLLを読み込もうとしていることを意味します。 –

+0

それは非常によく、私のsystem32(glew32、実際には)にロードされている32ビットdllを持っているだけかもしれません。私はSysWOW64に移動して何が起こるかを見てみましょう。 – zeboidlund

答えて

0

を呼び出しての後にまでOpenGL関数を呼び出して、OpenGLウィンドウを作成することはできません。したがっての呼び出しの前にdraw_windowの内容をとり、mainに入れてください。

+0

私はこれを、メインの一番上に移動して機能させるかどうかを試してみましたが、私はまだ同じエラーを受けました。私は、JonathonReinhartの提案がうまく機能するかどうかについて報告します。 – zeboidlund

0

GLEWではなくGLeeを試してみることもできます。どちらも同じ関数(OpenGL拡張関数の関数ポインタを参照)を実行しますが、GLeeは使いやすさに重点を置いていますが、GLEWはより強力です。

GLeeでは、最後にリリースされたバージョンがかなり古くなっているので、Subversionから最新バージョンを入手する必要があります。ただし、glee.hを追加してglee.cをプロジェクトに追加するだけです。 DLLは必要ありません。また、GLeeは必要に応じて拡張機能をロードします.GLEWとは異なり、スタートアップコードが何千もの拡張機能をロードしようとしているわけではありません。

2

問題を解決しました。

SysWOW64フォルダにfreeglut.dllを入れないでください。代わりに、System32フォルダに追加してください。

少なくとも、最初にSystem32フォルダをお試しください。

関連する問題