SFML
1. 개요
SFML은 C++로 작성된 멀티미디어 라이브러리이며, 시스템, 창, 그래픽스, 오디오, 네트워크 모듈로 구성되어 있다. C++ 인터페이스와 공식 C 인터페이스를 제공하며, Ada, C, .NET, Crystal, D, Euphoria, Free Pascal, Go, Haskell, Java, Julia, Nim, OCaml, Pascal, Python, Ruby, Rust, Zig 등 다양한 프로그래밍 언어를 위한 바인딩을 지원한다. 주로 취미 게임 개발자, 인디 게임 개발사, 스타트업에서 사용되며, 대학 교육 및 과학 프로젝트에도 활용된다.
이미지 준비중입니다.
| 이름 | Simple and Fast Multimedia Library |
|---|
| 저자 | Laurent Gomila, 외 |
|---|---|
| 개발자 | SFML 팀 |
| 처음 출시일 | 2007년 8월 9일 |
|---|---|
| 최신 안정화 버전 | 2.6.1 |
| 최신 안정화 버전 출시일 | 2023년 11월 4일 |
| 상태 | 활성 |
| 프로그래밍 언어 | C++ |
|---|---|
| 운영 체제 | 리눅스 macOS 마이크로소프트 윈도우 FreeBSD |
| 라이선스 | zlib 라이선스 |
| 웹사이트 | SFML 공식 웹사이트 |
|---|
-
Zlib 라이선스 소프트웨어 -
심플 다이렉트미디어 레이어
심플 다이렉트미디어 레이어(SDL)는 다양한 운영체제에서 게임 및 멀티미디어 응용 프로그램 개발에 사용되는 크로스 플랫폼 개발 라이브러리로서 비디오, 오디오, 키보드, 마우스, 조이스틱과 같은 멀티미디어 기능에 대한 낮은 수준의 접근을 제공하며 OpenGL, Vulkan과 같은 3D 렌더링 API와 다양한 프로그래밍 언어 바인딩을 지원한다. -
Zlib 라이선스 소프트웨어 -
NSIS
NSIS는 윈도우용 오픈 소스 설치 프로그램 제작 시스템으로, 스크립트 기반의 유연한 제어, 다양한 기능, 다국어 및 플러그인 지원, Modern UI를 통한 사용자 친화적 환경 구축을 제공하며, 윈앰프 설치 시스템에서 시작되어 여러 유명 소프트웨어에 활용되었고 POSIX 플랫폼 지원으로 리눅스, macOS 등에서도 컴파일이 가능하다. -
윈도우 API -
유니버설 윈도우 플랫폼
유니버설 윈도우 플랫폼(UWP)은 마이크로소프트에서 개발한 애플리케이션 모델로, Windows 10, 11 등 다양한 기기에서 실행되는 앱 개발을 위한 통합 플랫폼이며, Visual Studio를 통해 개발되고 XAML Islands를 통해 기존 WinAPI 기반 애플리케이션에서도 활용 가능하다. -
윈도우 API -
WinG
WinG는 윈도우 3.x의 그래픽 성능 향상을 위해 개발된 기술로, DirectX로 발전하는 기반이 되었으며 한국 게임 산업에도 영향을 미쳤다. -
오디오 라이브러리 -
ASIO
ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다. -
오디오 라이브러리 -
FFmpeg
FFmpeg은 오디오 및 비디오 데이터를 다루는 자유 소프트웨어 프로젝트로, 다양한 코덱과 형식을 지원하며 멀티미디어 응용 프로그램에 활용되고 2011년 Libav로 포크되기도 했으나 통합 과정을 거쳤다.
2. 소프트웨어 구조
SFML은 특정 기능을 분리하여 사용할 수 있도록 여러 모듈로 구성된 유연한 구조를 가지고 있다. 이를 통해 사용자는 필요한 모듈만 선택적으로 사용할 수 있다. 기본적으로 C++로 작성되었으며 공식적인 C 바인딩과 .NET 바인딩을 제공하고, 다양한 커뮤니티 기반 언어 바인딩을 통해 다른 프로그래밍 언어에서도 활용 가능하다. 또한, 커뮤니티에서 개발한 비공식 확장 라이브러리를 통해 기본 기능 외에 다양한 추가 기능을 구현할 수 있다.
2.1. 모듈
SFML은 다양한 모듈로 구성되어 있다:
* 시스템 – 벡터 및 유니코드 문자열 클래스, 이식 가능한 스레딩 및 타이머 기능을 제공한다.
* 창 – 창 생성 및 관리, 입력 장치(조이스틱 포함) 처리, OpenGL 컨텍스트 관리를 지원한다.
* 그래픽스 – 스프라이트, 다각형, 텍스트 렌더링 등 2차원 그래픽스의 하드웨어 가속을 지원한다.
* 오디오 – 하드웨어 가속을 이용한 공간화된 오디오 재생 및 녹음 기능을 제공한다.
* 네트워크 – TCP 및 UDP 네트워크 소켓, 데이터 캡슐화 기능, HTTP 및 FTP 클래스를 제공한다.
그래픽스 모듈은 SFML의 주요 기능 중 하나이지만, OpenGL에서 직접 프로그래밍하는 환경을 만들고 싶은 개발자는 그래픽스 모듈 없이 창 모듈만 사용할 수도 있다. 마찬가지로 시스템 모듈을 제외한 다른 모듈들은 서로 독립적으로 사용될 수 있으며, 시스템 모듈은 모든 모듈에서 필요로 한다.
2.2. 언어 바인딩
SFML은 C++로 작성되어 있으며 C++ 인터페이스를 제공한다. 공식 CSFML 바인딩을 통해 C 인터페이스도 제공한다. SFML을 다른 프로그래밍 언어에서 사용할 수 있도록 해주는 여러 언어 바인딩이 존재한다.
다음 표는 SFML에 대한 지원되는 바인딩을 나열한다.
| 이름 | 언어 | 지원 버전 |
|---|---|---|
| [https://github.com/mgrojo/ASFML ASFML] | Ada | 2.6 |
| [http://www.sfml-dev.org/download/csfml CSFML]1 | C | 2.6 |
| [http://www.sfml-dev.org/download/sfml.net SFML.Net]1 | .NET | 2.6 |
| [https://github.com/oprypin/crsfml CrSFML] | [https://crystal-lang.org Crystal] | 2.6 |
| [https://github.com/BindBC/bindbc-sfml bindbc-sfml] | D | 2.5 |
| [https://github.com/Jebbs/DSFML DSFML] | D | 2.1 |
| [https://github.com/gAndy50/EuSFML2 EuSFML2] | Euphoria | 2.4 |
| [https://github.com/DJMaster/csfml-fpc csfml-fpc] | 프리 파스칼 | 2.5 |
| [https://github.com/telroshan/go-sfml go-sfml] | Go | 2.5 |
| [https://bitbucket.org/krepa098/gosfml2/wiki/Home GoSFML2] | Go | 2.0 |
| [https://hackage.haskell.org/package/SFML Hackage] | Haskell | 2.3 |
| [https://jsfml.sfmlprojects.org/ JSFML] | Java | 2.2 |
| [https://github.com/JuliaMultimedia/CSFML.jl CSFML.jl] | Julia | 2.5.1 |
| [https://github.com/oprypin/nim-csfml nim-csfml] | Nim | 2.3 |
| [https://github.com/JoeDralliam/Ocsfml Ocsfml] | OCaml | 2.3 |
| [http://ocaml-sfml.forge.ocamlcore.org/ OCaml-SFML] | OCaml | 2.5 |
| [https://github.com/CWBudde/PasSFML PasSFML] | Pascal | 2.4 |
| [https://python-sfml.org/ pySFML] | Python | 2.3.2 |
| [https://web.archive.org/web/20180527120743/https://groogy.se/mainsite/rbsfml/ rbSFML] | Ruby | 2.3.2 |
| [https://github.com/jeremyletang/rust-sfml rust-sfml] | Rust | 2.5.1 |
| [https://github.com/Guigui220D/sfml-wrapper zig-sfml] | Zig | 2.6.1 |
1 공식 바인딩
2.3. 비공식 확장
SFML은 상위 수준 소프트웨어를 구축할 수 있는 기본 기능을 제공한다. 그래픽 사용자 인터페이스(GUI), 2D 조명, 입자 시스템 및 애니메이션, 비디오 재생 및 타일맵에 대한 추가 지원을 제공하는 애드온 라이브러리가 있다.
3. 활용 사례
SFML은 주로 취미로 게임을 개발하는 개발자, 소규모의 인디 게임 개발사 및 개발자가 몇 명 안 되는 스타트업 회사에서 사용된다. SFML은 많은 양의 코드를 작성할 필요가 없기 때문에, 많은 루덤 데어 참가자들 또한 채택했다. Simple DirectMedia Layer(SDL) 및 알레그로(Allegro)와 같은 기존 라이브러리에 비해 SFML 사용자 기반은 비교적 작지만 성장하고 있다. 2023년 6월 20일 기준, 해당 깃허브(GitHub) 소프트웨어 저장소는 8,774명의 사용자가 즐겨찾기 했다.
SFML은 대학교 교육 및 과학 프로젝트에도 사용되었다.
3.1. 비디오 게임
* Atom Zombie Smasher: 실시간 전략 게임.
* [https://awayteam.space Away Team]: 시뮬레이션 인터랙티브 픽션 게임.
* [http://playchesster.com Chesster]: 퍼즐 게임.
* [https://github.com/abodelot/cosmoscroll Cosmoscroll]: 무료 오픈 소스 기반 우주 슈팅 게임.
* [http://playcrea.com/ Crea]: 모드 가능한 2D 샌드박스 게임.
* [http://www.magic-games.net/pc/enchanted-forest.html Enchanted Forest]:
* Extreme Tux Racer: Tux를 특징으로 하는 무료 오픈 소스 북극 레이싱 게임 (버전 0.7부터 SFML 사용).
* [http://www.desura.com/games/holyspirit HolySpirit]: 3D 등각 투영 핵 앤 슬래시 게임.
* [https://hope.glusoft.com/ Hope]: 포인트 앤 클릭 어드벤처 게임 (Myst와 유사).
* [https://play.google.com/store/apps/details?id=com.isdaouda.icantransform&hl=en I Can Transform]: 안드로이드용 2D 플랫폼 게임.
* [https://jin-conception.com/presskit Jin Conception]: 닌텐도 스위치용 2D 픽셀 아트 JRPG.
* [http://keeperrl.com/ KeeperRL]: 로그라이크 및 RPG 요소가 있는 던전 시뮬레이터.
* [https://play.google.com/store/apps/details?id=com.alexaut.kroniax Kroniax]: 미니멀리즘 사이드 스크롤러, 안드로이드용 첫 번째 SFML 게임.
* [http://ltheory.com/ Limit Theory]: 무한한, 절차적 우주 게임.
* [http://mars-game.sourceforge.net/ M.A.R.S.]: 멀티플레이어 슈팅 게임.
* [http://moonman.io/ Moonman]: 픽셀 아트 탐험 샌드박스 게임.
* [http://vittorioromeo.info/projects.html Open Hexagon]: 무료 오픈 소스 Super Hexagon 복제품.
* [http://lzr.cc/Ovid.htm Ovid The Owl]: 퍼즐 플랫폼 게임.
* [http://eigen.pri.ee/pioneers/ Pioneers]: 턴 기반 탐험 게임으로, 일부 RPG 요소 포함.
* [http://postmortemgame.com/ Postmortem: one must die]: 내러티브 어드벤처 게임.
* [http://www.starflowergames.com/blacksun.html Project Black Sun]: 복고풍 2D 사이드 스크롤 비디오 게임.
* [https://www.facebook.com/TacWars-1926055650985786/ TacWars]: 드워프와 고블린을 대결시키는 퍼즐 RPG.
* [http://forums.tigsource.com/index.php?topic=6637.0 The Duke]: 액션 플랫폼 게임.
* [http://philippeoffermann.com/?page_id=72 The Shooting of Isaac]: 수직 슈팅 게임.
* [http://vagantegame.com/ Vagante]: 액션 RPG 플랫폼 게임.
* [http://www.bromeon.ch/games/zloxx/ Zloxx]: 2D 액션 플랫폼 게임.
SFML을 사용하는 더 많은 게임 예시는 IndieDB에 나열되어 있다.
3.2. 기타 소프트웨어
* [[https://aquila-dsp.org/|Aquila]], C++용 오픈 소스 디지털 신호 처리 (DSP) 라이브러리.
* [[https://otter2d.com/|Otter]], SFML 2를 기반으로 구축된 2D C# 프레임워크.
* [[GDevelop]], 오픈 소스 게임 제작 소프트웨어.
* [[https://www.immersion-engine.com/|Immersion Engine]], 상세한 풍경과 건축물을 시각화하는 도구.
* [[https://github.com/Is-Daouda/is-Engine/|is::Engine]], 안드로이드 및 PC용 2D C++ 게임 엔진.