> 백엔드 개발 > C++ > 본문

RGFW 소개: 경량 단일 헤더 윈도우 프레임워크 및 GLFW 대안

王林
풀어 주다: 2024-07-26 09:29:41
원래의
935명이 탐색했습니다.

Introducing RGFW: A lightweight Single Header Windowing framework & GLFW alternative

소개

RGFW는 창 생성 및 관리를 추상화하는 크로스 플랫폼 단일 헤더 프레임워크입니다. RGFW는 사용이 간편하므로 복잡한 저수준 창 API, 오버헤드가 많은 라이브러리 또는 플랫폼별 API 지원을 처리하는 대신 게임이나 애플리케이션 프로그래밍에 집중할 수 있습니다. RGFW는 방해하지 않고 낮은 수준의 API를 처리합니다. 현재 X11(Linux), Windows(XP+), Emscripten(HTML5), MacOS를 지원합니다.
창을 생성하는 동안 RGFW는 선택한 그래픽 컨텍스트를 초기화합니다. 옵션에는 OpenGL(변형 포함), DirectX, 직접 소프트웨어 렌더링 또는 그래픽 API 없음이 포함됩니다. Vulkan 컨텍스트를 직접 만드는 것이 권장되지만 Vulkan 지원을 위한 별도의 헤더도 있습니다.

설계

RGFW는 설계상 유연성도 있습니다. 예를 들어 이벤트 루프 시스템이나 이벤트 콜백 시스템을 사용할 수 있습니다. (RGFW 저장소의 example/events/main.c 및 example/callbacks/main.c에서 자세한 내용을 확인하세요).

while (RGFW_window_checkEvent(win)) {
  switch (win->event.type) {
     case RGFW_quit:
       break;  
     case RGFW_keyPressed:
       break;
     case RGFW_mousePosChanged:
        break;
     ...
  }
}
void mouseposfunc(RGFW_window* win, RGFW_point point) {

} 
void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) {

}

void windowquitfunc(RGFW_window* win) {

}

RGFW_setMousePosCallback(mouseposfunc);
RGFW_setKeyCallback(keyfunc);
RGFW_setWindowQuitCallback(windowquitfunc);
로그인 후 복사

RGFW 대 GLFW

RGFW는 GLFW의 대안으로 설계되었습니다. 이는 GLFW의 코드베이스가 가볍지 않고 유연성이 부족하기 때문입니다.
GLFW의 모든 소스 코드를 가져와 하나의 큰 단일 헤더 라이브러리에 저장하는 GitHub 저장소가 있습니다. 이 GLFW.h 파일은 10.7MB이며 GitHub에서 볼 수 없습니다. RGFW는 244KB이고 RGFW 바이너리도 일반적으로 GLFW 바이너리 크기의 약 1/3 크기이므로 GitHub에서 볼 수 있습니다. 또한 RGFW는 GLFW보다 RAM을 덜 사용하는 경향이 있습니다.
RGFW가 GLFW보다 훨씬 가볍다면 RGFW에 기능이 부족하다는 의미입니까? 아니요, RGFW는 GLFW와 거의 동일한 기능을 가지고 있습니다. 차이점을 알고 싶다면 RGFW 저장소에 RGFW와 GLFW를 비교하는 표가 포함되어 있습니다.

RGFW 사용/컴파일

RGFW를 사용하려면 소스 파일 중 하나에 이 줄을 추가해야 합니다.
#RGFW_IMPLEMENTATION 정의
이를 통해 RGFW 소스 정의가 포함될 수 있습니다. 
다른 라이브러리처럼 RGFW를 컴파일할 수도 있습니다.

cc -x c -c RGFW.h -D RGFW_IMPLEMENTATION -fPIC -D 

RGFW_EXPORT
(Linux): 
cc -shared RGFW.o -lX11 -lXrandr -lm -lGL

(window mingw): 
cc -shared RGFW.o -lgdi32 -lopengl32 -lwinmm -lm

(macOS)
cc -shared RGFW.o -framework Foundation -framework AppKit -framework OpenGL -framework CoreVideo -lm 
로그인 후 복사

RGFW 예

창을 만들고 RGFW를 초기화하려면 첫 번째 창인 경우 RGFW_createWindow(const char* name, RGFW_ect, u16 args)를 사용하세요
예를 들어 화면 중앙에 크기를 조정할 수 없는 창을 만들려면

RGFW_window* win = RGFW_createWindow("Window", RGFW_RECT(0, 0, 200, 200) RGFW_CENTER | RGFW_NO_RESIZE);

... // do software stuff

RGFW_window_close(win); // close window now that we're done
로그인 후 복사

렌더링을 마친 후에는 윈도우 버퍼를 교체해야 합니다.
RGFW_window_swapBuffers(RGFW_window* win);
지원되지 않는 API를 사용하는 경우 해당 기능을 직접 처리해야 합니다.
이제 전체 RGFW 예는 다음과 같습니다.

#define RGFW_IMPLEMENTATION
#include "RGFW.h"

u8 icon[4 * 3 * 3] = {0xFF, 0x00, 0x00, 0xFF,    0xFF, 0x00, 0x00, 0xFF,     0xFF, 0x00, 0x00, 0xFF,   0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,     0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF};

void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) {
    printf("this is probably early\n");
}

int main() {
    RGFW_window* win = RGFW_createWindow("name", RGFW_RECT(500, 500, 500, 500), (u64)RGFW_CENTER);

    RGFW_window_setIcon(win, icon, RGFW_AREA(3, 3), 4);

    RGFW_setKeyCallback(keyfunc); // you can use callbacks like this if you want 

    i32 running = 1;

    while (running) {
        while (RGFW_window_checkEvent(win)) { // or RGFW_window_checkEvents(); if you only want callbacks
            if (win->event.type == RGFW_quit || RGFW_isPressed(win, RGFW_Escape)) {
                running = 0;
                break;
            }

            if (win->event.type == RGFW_keyPressed) // this is the 'normal' way of handling an event
                printf("This is probably late\n");
        }

        glClearColor(0xFF, 0XFF, 0xFF, 0xFF);
        glClear(GL_COLOR_BUFFER_BIT);

        RGFW_window_swapBuffers(win);
    }

    RGFW_window_close(win);
}
로그인 후 복사

최종 메모

RGFW 예제 스크린샷과 PureDoom-RGFW더 많은 예제 코드 및 RGFW에 대한 정보는 저장소에서 확인할 수 있습니다. 예제는 RGFW 예제 사이트에서 HTML5를 사용하여 실행할 수도 있습니다. RGFW에 관심이 있으시면 언제든지 RGFW 저장소를 확인하거나 별표를 표시하거나 RGFW에 대해 궁금한 점이 있으면 저에게 물어보세요. 나는 또한 귀하의 비판, 조언 또는 기능 요청에 열려 있습니다.

RGFW가 GLFW보다 훨씬 가볍지만 그렇다고 GLFW보다 더 가벼워야 한다는 의미는 아닙니다. 결국 선택은 당신에게 달려 있습니다. RGFW는 더 가볍지만 더 새롭고 작은 커뮤니티를 가지고 있습니다. 따라서 지원이 적고 아직 프로덕션 준비 프로젝트에서 테스트되지 않았습니다.

RGFW가 흥미롭다면 저장소를 확인해 보세요. RGFW를 지원할 수 있는 한 가지 방법은 RGFW에 별표를 표시하는 것입니다.

https://github.com/ColleagueRiley/RGFW

위 내용은 RGFW 소개: 경량 단일 헤더 윈도우 프레임워크 및 GLFW 대안의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿