2013-01-09 2 views
0

이것은 일련의 튜토리얼에서 얻은 나의 소스 코드입니다. OpenGL 3+에 대해 살펴 보겠습니다.glfw openGL C++ 창 배경 및 제목

//#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 초 후 제목 변경 01 튜토리얼 초기화 때를 제외하고 잘 작동합니다 첫 번째 장소와 배경이 검은 색이되어야합니다.

내가 몇 년 전에했던 glut과 함께했던 opengl (2.x)의 이전 연구에서 나는 그와 같은 문제가 있었는데, 누군가가 잘못 된 것이 무엇인지 설명 할 수 있을까?

답변

0

실제로 IDE와 관련이있는 것처럼 보입니다. 실제 .exe를 실행하면 의도 한대로 작동하고 전혀 지연되지 않습니다.

0

창 배경색은 OpenGL 함수 glClearColor()을 호출하고 glClear() 함수로 새로 고칩니다.

창의 제목을 변경하는 데 지연이있을 수 있습니다. OpenGL 3.x를 만들려면 표준 OpenGL 컨텍스트 (버전 1.x 또는 2.x)를 만들어야합니다.) OpenGL 3.x 컨텍스트를 사용하도록 응용 프로그램을 선택하십시오. 그래도 1-2 초 지연이 많이 보인다.

+0

'GLFW_WINDOW'는'GLFW_FULLSCREEN'과 반대로 "창 만들기"를 의미합니다. 실제로는 창 제목 자체를 설정하지 않으며, else 블록은 새 창을 만들지 않고 단순히 설정합니다 현재 윈도우의 윈도우 제목. –

+0

감사합니다. 더 신중해야했습니다. – Grieverheart

+0

예 Victor는 정확하지만 Microsoft Visual Studio 2012 Express를 사용하고 있기 때문에 지연이 발생할 수 있다는 것을 이해할 수 없습니까? – Syd

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는 (최소한의 OpenGL 4.3의 수)는 엔비디아 GTX 580이다.

+0

똑같은 차이점 MV C++ studio 2012 Express를 사용한다는 사실을 잊어 버렸습니다. 아마도 이것과 관련이 있습니까? – Syd

+0

자습서를 진행하고있는 것처럼 보입니다 : http://www.opengl-tutorial.org/beginners-tutorials/tutorial-1-opening-a-window/.나는 그 튜토리얼을 직접적으로 따라 갔지만 리눅스에 대해서는 설명했다. 코드에 문제가없는 것은 아니지만 시스템 (하드웨어 또는 운영 체제) 또는 사용중인 소프트웨어 (IDE 또는 컴파일러)에 문제가있을 수 있습니다. 제 의견으로는 말하기 어렵습니다. :// 잠시 후 스스로를 수정하기 때문에 CPU/GPU가 해당 코드를 사용하여 설정을받는 데 시간이 걸릴 수 있습니다. –

+0

투명 배경 렌더링에 문제가 있습니다. glClear 덕분에 문제를 해결할 수있었습니다. 감사. – Nek

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