2016-07-07 49 views
0

私は、Visual Studio 2013とOpenGLを使ってシミュレーションを作成しています。 理想的には、作成しているウィンドウを開いたままにして、キーを使用して変更を加え、同じウィンドウで別の結果を表示できるようにする必要があります。 しかし、それはエラーコードで起動した直後にウィンドウがOpenGLウィンドウがすぐにエラー-1073740777(0xc0000417)で終了する

を閉じPROGRAM.EXE」のコード-1073740777(0xc0000417)

で終了しました私はいくつかのデバッグを行なったし、様々なラインにコメントしようとしたことを見ました私が 'glutSwapBuffers()'をコメントとして作成した場合、ウィンドウは開いたままですが空です。

誰かがこれにどのような光を当てることができますか?

void keyboard (unsigned char key, int x, int y) 
{ 
switch (key) 
{ 
    case 'r': case 'R': 
    if (filling==0) 
    { 
     glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); 
     filling=1; 
    } 
    else 
    { 
     glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); 
     filling=0; 
    } 
    break; 
    case 27: 
    exit(0); 
    break; 
} 
} 

void display(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(-90,0.0,1.0,0.0); 
glRotatef(-90,1.0,0.0,0.0); 

rotation_x = rotation_x + (rotation_x_increment - rotation_x)/50; 
rotation_y = rotation_y + (rotation_y_increment - rotation_y)/50; 
rotation_z = rotation_z + rotation_z_increment; 

if (rotation_x > 359) rotation_x = 0; 
if (rotation_y > 359) rotation_y = 0; 
if (rotation_z > 359) rotation_z = 0; 

if(rotation_x_increment > 359) rotation_x_increment = 0; 
if(rotation_y_increment > 359) rotation_y_increment = 0; 
if(rotation_z_increment > 359) rotation_z_increment = 0; 

glRotatef(rotation_x,1.0,0.0,0.0); 
glRotatef(rotation_y,0.0,1.0,0.0); 
glRotatef(rotation_z,0.0,0.0,1.0); 

glTranslatef(x_translate,0.0,0.0); 
glTranslatef(0.0,y_translate,0.0); 
glTranslatef(0,0,z_translate); 

glFlush(); // This force the execution of OpenGL commands 
glutSwapBuffers(); 
glFinish(); 
} 

int main(int argc, char **argv) 
{ 
IntroDisplay(); 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
glutInitWindowSize(screen_width,screen_height); 
glutInitWindowPosition(0,0); 
glutCreateWindow("Ultrasonic Testing"); 
glutDisplayFunc(display); 
glutIdleFunc(display); 
glutReshapeFunc (resize); 
glutKeyboardFunc (keyboard); 
glutSpecialFunc (keyboard_s); 
glutMouseFunc(mouse); 
glutMotionFunc(mouseMove); 
init(); 
glutMainLoop(); 
return 0; 
} 
+0

STATUS_INVALID_CRUNTIME_PARAMETER - おそらく混在しているなど、ソースからすべてを再構築します。 – paulm

+0

@paulm再構築を試みました。クリーニングと再構築を試しました。まだ変更はありません。 Windowsやglut32.dllに関連するものでしょうか?私はしばらくコードを変更していないので、突然これをやり始めました。 –

+0

glutを含む? – paulm

答えて

0

問題はドライバに関係していました。すべてを再インストールしてもうまくいきました。

スワップ機能もシステムに依存し、ライブラリだけではないためだと思います。私はそれをどこかで読んだ。

0

あなただけクリアし、スワップバッファをし、それはそれだ表示機能を登録し、GLUTでウィンドウを作成除いて何もしない、絶対に最小限の、むき出しの骨プログラムをコンパイルして実行してみました。私。あなたの悩みの原因でこの

#include <GL/glut.h> 
static void display(void) 
{ 
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
    glutSwapBuffers(); 
} 
int main(int argc, char *argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
    glutCreateWindow("test"); 
    glutDisplayFunc(display); 
    glutIdleFunc(glutPostRedisplay); 
    glutMainLoop(); 
    return 0; 
} 

私の推測では、使用しているいくつかのライブラリが使用していると予想されるランタイムの違いは、あなたのためのいくつかのhickupsを引き起こすものとは異なるコンパイラで構築されたこと、です。上記の最小限のプログラムがクラッシュした場合、これが最も可能性の高い原因です。

glFinishglFlushへの呼び出しは、フラッシングとフィニッシングがバッファスワップによって暗示されるため、余分なものです。また、表示機能をGLUTアイドルハンドラとして登録することは、通常はお勧めできません。継続的な表示更新が必要な場合は、代わりにglutPostRedisplayを登録してください。

+0

私は最小限のプログラムを試しましたが、それもクラッシュします。ランタイムエラーを修正するために私は何を提案しますか? –

+0

@RahulK:glutSwapBuffersが呼び出されたときに問題が発生したと述べたので、GLUTの特定のビルドが原因と思われます。あなたの最善の行動は、FreeGLUT(http://prdownloads.sourceforge.net/freeglut/freeglut-3.0.0.tar.gz?download)のソースを引き出し、独自のコンパイラで直接ビルドすることです。実際にはFreeGLUTをプロジェクトにドロップしてソリューションとしてVisualStudioプロジェクトに追加するだけで、メインプログラムと一緒にビルドすることができます。 – datenwolf

+0

私はそれを修正しました。 Visual Studio全体とすべての更新プログラムを再インストールしました。しかし、正確な問題は何だったのかまだ分かりません。助けてくれてありがとう。 :) –

関連する問題