OpenGL 쉐이더 프로그래밍 - GLFW 프로그래밍

타입·2024년 6월 20일

컴퓨터 그래픽스

목록 보기
2/24

윈도우 시스템과 GLFW

  • 다양한 윈도우 시스템
    X Window, Macintosh, Microsoft Windows 등
    OpenGL 입장에서는 윈도우 생성/제거 등을 각각 다르게 처리해야 함
    • GLFW
      다양한 윈도우 시스템에서 작동하는 abstract window system
      단점: 모든 윈도우 시스템에 공통인 기능만 제공
  • 윈도우 시스템의 대화형 처리
    • 일괄 처리 (Batch Processing)
      대부분의 텍스트 처리용 프로그램
      입력 -> 처리 -> 출력
      출력 결과만 나오면 모든 처리 끝
    • 대화형(Interactive) 처리
      대부분의 그래픽스 처리 프로그램
      입력 -> 처리 -> 출력 무한 반복
      출력 결과를 보고 다시 새로운 입력
  • Event Loop Model
    event-driven paradigm
    • main loop가 무한 반복
      1 화면 출력
      2 input event 발생 여부 체크
      3 (event 발생 시) 대응되는 처리
      1 새로운 화면 출력
    • callback 함수 도입
      event 별로 callback 함수를 미리 등록
      (event 발생 시) 대응되는 callback 함수 호출

GLFW 기능들

  • GLFW features
    • Initialization (초기화)
    • Window Management (윈도우 관리)
    • Callback Registration (콜백 등록)
  • GLFW Functions
    • glfwInit()
      초기화
    • glfwTerminate()
      종료, 모든 윈도우와 리소스 정리
    • glfwCreateWindow()
      윈도우 생성
      OpenGL context로 현재 OpenGL 상태를 가짐
    • glfwMakeContextCurrent()
      어느 윈도우로 출력할지 결정
    • glfwDestroyWindow()
      해당 윈도우 소멸
    • glfwWindowShouldClose()
      윈도우가 닫혀야 하는 상황인지 close flag로 확인
    • glfwSwapBuffers()
      화면 업데이트
    • glfwPollEvents()
      루프 구조 내에서 이벤트 처리
      대응되는 callback 함수 호출
  • 윈도우 시스템 좌표계
    integer 좌표, upper-left corner가 원점
  • 3D 그래픽스 좌표계
    float 좌표, lower-left 또는 center에 원점

Refresh Callback

  • Callback 함수
    사용자가 이벤트를 입력 했을 때 자동 호출되는 함수
    미리 등록 필요

  • Refresh callback
    역할: 윈도우에 전체 화면 그릴 때 호출
    처음 윈도우를 띄울 때 / 윈도우 사이즈 변경

Clear와 Delayed Excution

  • Clear
    OpenGL이 스테이트 머신이란 걸 보여줌
    • glClearColor(r, g, b, a)
      컬러 값으로 클리어
    • glClear()
      mask로 GL_COLOR_BUFFER_BIT를 받아 클리어
  • Delayed Execution
    OpenGL 함수는 효율성을 높이기 위해 명령어 큐에 기록하고 바로 return
    실제 그 함수의 실행은 명령어 큐에서 지연 실행됨
    • glFlush()
      OpenGL 명령 큐를 flush
      대부분 바로 실행되지만 일부는 시간이 더 필요할 수 있음
    • glFinish()
      OpenGL 명령어 큐를 flush하고 모두 완료되는 걸 확인하고 return
      시간이 오래 걸릴 수도 있음

Keyboard Callback

  • GLFWkeyfun
    키보드 키, 액션(Press/Release/Repeat), modifier key(Ctrl/Alt/Shift) 등을 받는 콜백 함수
  • glfwSetKeyCallback()
    키보드 입력 콜백 함수 등록
  • glfwSetWindowShouldClose()
    close flag를 세팅
    이후 main 루프의 glfwWindowShouldClose()에서 닫음
  • 컴파일 오류 시 참고
// 헤더파일 순서 지키기
#include <GL/glew.h>
#include <GLFW/glfw3.h>

glew32.dll 파일이 없다고 나오면 "C:\Windows\System32"에 glew32.dll 파일 복사

profile
주니어 언리얼 프로그래머

0개의 댓글