2012-04-23 7 views
2

GLFWを使用してアプリケーションを開発しています。これにより、コンソールに情報を入力したり、情報を処理したり、GLFW )を押して結果を表示します。ユーザーはウィンドウを閉じてメインメニューに戻り、必要に応じて詳細情報を入力することができます。GLFWウィンドウの開閉後にコンソール入力に問題が発生しました

現在、問題は、GLFW/OpenGLウィンドウを閉じると、コンソールがscanf()からの入力を受け付けなくなってしまうことです。私はGLFWを適切に閉じていることをかなり確信しているので、問題が何であるかはわかりません。

私が使用していたコードは以下の通りです:

のmain.c:

#include <stdio.h> 
#include <stdlib.h> 
#include "glfw.h" 
#include "pantograph.h" 
int main(int argc, char** argv) 
{ 
    printf("program start"); 
    int a = 0; 
    scanf("%i",&a); //this works 
    printf("%c",a); 
    p_open_window(1000, 500, 0, "hi there"); 
    int i = 0; 
    for(i=0;i<1000;i++) 
    { 
     p_begin_render(); 
     glBegin(GL_POINTS); 
      glVertex2i(i,i/2); 
     glEnd(); 
     scanf("%i",&a); 
     p_end_render(); 
    } 
    p_close_window(); 
    scanf("%i",&a); //this does not work 
    printf("%i",a); 
    return 0; 
} 

pantograph.h:

int p_open_window(int width, int height, int fullscreen, const char* title) 
{ 
    glfwInit(); 
    glfwDisable(GLFW_AUTO_POLL_EVENTS); 
    if(fullscreen) 
    { 
     glfwOpenWindow(width,height,8,8,8,8,0,0,GLFW_FULLSCREEN); 
    }else{ 
     glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE); 
     glfwOpenWindow(width,height,8,8,8,8,0,0,GLFW_WINDOW);  
    } 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, width, height, 0, 0, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glDisable(GL_DEPTH_TEST); 

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    return 1; 
} 
void p_begin_render() 
{ 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glColor4f(1.0, 1.0, 1.0, 1.0); 
    glLoadIdentity(); 
} 
void p_end_render() 
{ 
    glfwSwapBuffers(); 
} 
void p_close_window() 
{ 
    glfwCloseWindow(); 
    glfwTerminate(); 
} 

答えて

0

私はあなたのプログラムの流れで少し混乱しています。あなたは 'ユーザーはウィンドウを閉じてメインメニューに戻ることができます'と言います。しかし、プログラムは(i < 1000)ループからどのように出るのですか?ユーザーがウィンドウを閉じるだけであれば、forループを実行しているように思えます(特にループ内のscanfが原因です)。

デバッガを使用して、プログラムがどの時点で捕捉されたのか確認しましたか?私はややハック解決策を見つけることができた#glfwの人々へ

+0

奇妙に思えますが、何とかうまくいけば、私はopenglの呼び出しが黙って失敗すると思いますが、ループを終了するだけです。私は完全には確信していません。 いずれにせよ、私はそれを解決することができました。私はすぐに答えとして投稿します。 – AdamHarries

0

おかげで...

あなたは「フラッシュ」の入力バッファを直接GLFWウィンドウのscanfを閉じた後、再び作業を開始します場合。なぜ私は完全にはわかりませんが、今のところうまくいくと思われるので、私は飽き飽きしています。

(ウィンドウを閉じた後)、次のように私はそれを行うために使用しているコードは次のとおりです。この後

int ch; 
while ((ch = getchar()) != '\n' && ch != EOF); 

、scanf関数は再び働き始めました。

関連する問題