Не удается напечатать буфер OpenGL на консоль в приложении GLEW

Я использую учебник нашел Вот. Я использую 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 );
}

0

Решение

Он не может записать это на консоль, потому что связанный код никогда не достигается.

Существует почти бесконечный цикл 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);
}
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]