Это мой исходный код из серии уроков, которые я изучаю в отношении opengl 3+.
//#include <stdio.h>
//#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glfw.h>
#include <glm/glm.hpp>
using namespace glm;
#include <iostream>
using namespace std;int main()
{
if( !glfwInit() )
{
fprintf( stderr, "Failed to initialize GLFW\n" );
return -1;
}
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); // 4x antialiasing
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // We want OpenGL 3.3
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL
// Open a window and create its OpenGL context
if( !glfwOpenWindow( 1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW ) )
{
fprintf( stderr, "Failed to open GLFW window\n" );
glfwTerminate();
return -1;
}
else
{
glfwSetWindowTitle( "Tutorial 01" );
}
// Initialize GLEW
glewExperimental=true; // Needed in core profile
if (glewInit() != GLEW_OK) {
fprintf(stderr, "Failed to initialize GLEW\n");
return -1;
}glfwEnable( GLFW_STICKY_KEYS );
do{
// Draw nothing, see you in tutorial 2 !
// Swap buffers
glfwSwapBuffers();
} // Check if the ESC key was pressed or the window was closed
while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS &&
glfwGetWindowParam( GLFW_OPENED ) );
return 0;
}
Все работает отлично, за исключением того, что когда окно инициализируется, оно имеет белый цвет фона и заголовок «ОКНО GLFW», но через 1-2 секунды заголовок меняется на Tutorial 01, как это должно было быть на первом месте, и фон становится черным как и следовало ожидать.
В предыдущих исследованиях opengl (2.x) с переизбытком, которые я делал пару лет назад, у меня не было подобных проблем, может кто-нибудь объяснить, что здесь не так?
Я получаю такое же поведение (даже запускаю выпуск exe за пределами IDE) на ATI FirePro V5700. Если вы действительно обеспокоены этим, скачать исходный код GLFW и измените строку 764 из carbon_window.c, строку 1210 из win32_window.c и строку 962 из x11_window.c.
.\ Lib \ углерод \ carbon_window.c
(void)SetWindowTitleWithCFString( _glfwWin.window, CFSTR( "GLFW Window" ) );
.\ Lib \ win32 \ win32_window.c
_glfwWin.window = CreateWindowEx( _glfwWin.dwExStyle, // Extended style
_GLFW_WNDCLASSNAME, // Class name
"GLFW Window", // Window title
_glfwWin.dwStyle, // Defined window style
wa.left, wa.top, // Window position
fullWidth, // Decorated window width
fullHeight, // Decorated window height
NULL, // No parent window
NULL, // No menu
_glfwLibrary.instance, // Instance
NULL ); // Nothing to WM_CREATE
.\ Lib \ x11 \ x11_window.c
_glfwPlatformSetWindowTitle( "GLFW Window" );
Я не испытываю проблем, которые вы описываете. Я скопировал и вставил, скомпилировал, а затем запустил ваш код, когда вы его опубликовали (комментируя ссылки на GLM, так как у меня не установлена эта библиотека). Заголовок для меня меняется мгновенно — я даже не вижу окна с заголовком «ОКНО GLFW», а цвет графической области сразу становится черным. Может быть, ваш компьютер просто не очень быстрый?
Что произойдет, если вы сделаете следующее?
do{
// Draw nothing, see you in tutorial 2 !
glClear(GL_COLOR_BUFFER_BIT);
// Swap buffers
glfwSwapBuffers();
glfwSleep(0.016);
} // Check if the ESC key was pressed or the window was closed
while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS && glfwGetWindowParam( GLFW_OPENED ) );
Редактировать: Мой графический процессор — Nvidia GTX 580 (способный по крайней мере OpenGL 4.3).
Цвет фона окна настраивается путем вызова функции openGL glClearColor () и обновился с glClear () функция.
Задержка в изменении заголовка окна, возможно, может быть связана с тем, что для создания openGL 3.x необходимо создать стандартный контекст OpenGL (версия 1.x или 2.x), а затем получить ваше приложение должно использовать контекст OpenGL 3.x. Задержка 1-2 секунды, хотя кажется большой.
Ну, как кажется, это связано с IDE, если вы запустите реальный .exe-файл, он работает так, как задумано, и без каких-либо задержек.