glfw openGL c ++窗口背景和标题

时间:2013-01-09 20:56:16

标签: c++ opengl glew glfw

这是我在一系列教程中的源代码,我正在研究一下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 WINDOW”,但是在1-2秒之后,标题会改为Tutorial 01,因为它应该是第一个位置,并且背景变得黑暗,因为它应该也是。

在之前的几年前我做过的opengl(2.x)和过量的研究中,我没有遇到过这样的问题,有人可以解释这里有什么问题吗?

4 个答案:

答案 0 :(得分:2)

我在ATI FirePro V5700上获得了相同的行为(甚至在IDE之外运行发布exe)。如果你真的为此烦恼,download the GLFW source并更改carbon_window.c的第764行,win32_window.c的第1210行和x11_window.c的第962行。

。\ 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" );

答案 1 :(得分:1)

我没有遇到你描述的任何问题。我复制并粘贴,编译,然后在发布时运行您的代码(注释掉GLM的引用,因为我没有安装该库)。标题瞬间改变了 - 我甚至从未看到窗口标题为“GLFW WINDOW”,图形区域的颜色立即变黑。难道你的电脑不是很快吗?

如果您执行以下操作会发生什么?

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 ) );

编辑:我的GPU是Nvidia GTX 580(至少能够支持OpenGL 4.3)。

答案 2 :(得分:0)

窗口的背景颜色通过调用openGL函数glClearColor()进行配置,并使用glClear()函数进行刷新。

更改窗口标题的延迟可能与创建openGL 3.x的事实有关,需要创建标准的OpenGL上下文(版本1.x或2.x)然后让您的应用程序选择使用OpenGL 3.x上下文。虽然延迟了1-2秒但似乎很多。

答案 3 :(得分:0)

好像它似乎与IDE有关,如果你运行实际的.exe它按预期工作,并且没有任何延迟。