1

ここにあるチュートリアルを使用しています。GLFWを使用しています。ウィンドウは正常に読み込まれていますが、

GLuint vertexBuffer;
glGenBuffers( 1, &vertexBuffer );
printf( "%u\n", vertexBuffer );

コンソールに書き込んでおらず、openGLウィンドウを閉じると壊れます(コンソールを閉じた場合ではありません)。ポインタがおかしいと思いますか?しかし、それは私には正しいように思われ、それはまさに彼が彼のチュートリアルでそれを持っている方法です。

これが私の全体の非常に小さな.cpp(VS2012)です:

#define GLEW_STATIC

#include <GL/glew.h>
#include <GL/glfw.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment( lib, "glfw.lib")
#pragma comment( lib, "opengl32.lib")
#pragma comment( lib, "glew32s.lib")

int main() {

    glfwInit();
    glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 );
    glfwOpenWindowHint( GLFW_OPENGL_VERSION_MINOR, 2 );
    glfwOpenWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );

    glfwOpenWindowHint( GLFW_WINDOW_NO_RESIZE, GL_TRUE );
    glfwOpenWindow( 800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW );
    glfwSetWindowTitle( "OpenGL" );

    printf("This works");
    while( glfwGetWindowParam( GLFW_OPENED ) ) {
        glfwSwapBuffers();
    }

    glewExperimental = GL_TRUE;
    glewInit();

    GLuint vertexBuffer;
    glGenBuffers( 1, &vertexBuffer );
    printf( "%u\n", vertexBuffer );

    glfwTerminate();

    exit( EXIT_SUCCESS );
}
4

1 に答える 1

7

関連するコードに到達しないため、それをコンソールに書き込むことはできません。

ウィンドウが開いている限り、実行中のコードにはほぼ無限の while ループがあります。

while(glfwGetWindowParam(GLFW_OPENED))
{
    glfwSwapBuffers();
}

このループの前にすべての初期化コードを配置する必要があります。

glewExperimental = GL_TRUE;
glewInit();

そして、ループの前またはループ内でバッファオブジェクトを作成します。実際には、新しいコンテンツを既存のシーンにロードする場合は、ループ内にバッファー オブジェクトを作成します。

GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
printf("%u\n", vertexBuffer);

最終的なmain関数は次のようになります。

int main()
{
    // GLFW initialization
    glfwInit();
    // ...
    glfwOpenWindow(800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
    glfwSetWindowTitle("My first OpenGL Application");

    // GLEW initialization
    glewExperimental = GL_TRUE;
    glewInit();

    // vertex buffer
    GLuint vertexBuffer;
    glGenBuffers(1, &vertexBuffer);
    printf("%u\n", vertexBuffer);

    // main loop
    bool running = true;
    while(running) {
        // exit
        if (!glfwGetWindowParam(GLFW_OPENED))
            running = false;

        // display
        glfwSwapBuffers();
    }

    // clean up
    glfwTerminate();
    exit(EXIT_SUCCESS);
}
于 2012-11-13T21:45:38.107 に答える