Я использую учебник нашел Вот. Я использую 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 );
}
Он не может записать это на консоль, потому что связанный код никогда не достигается.
Существует почти бесконечный цикл 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);
}
Других решений пока нет …