Simple and Fast Multimedia Library (Простая и быстрая мультимедиа библиотека).
Текущая версия: 2.1
По сути является огромным и реально простейшим фреймворком над разносторонними(в т.ч. бесплатными) библиотеками(OAL, OGL ...).
Преимущества:
1)Имеет лицензию zlib/png license (Предоставляется как есть, можно использовать в коммерческих целях с указанием использования библиотеки).
2)Полностью кроссплатформена(Win, MacOs X, Linux), вскоре ожидается порт на Android и IOS.
3)Полностью открытый исходный код.
4)Библиотеки как для х64 так и х86(тяжело поверить но это реально так и все сделано аккуратно), также поддержка разных компиляторов.
5)Официально поддерживает языки C и .Net, благодаря сообществу есть порты на Java, Ruby, Python, Go и множество других яп.
6)Библиотеки для работы:
- с сетью. HTTP|FTP|tcp\ip|udp|socks ...
- со звуком. Воспроизведение и т.п.| Запись | Работа со звуком в 3D | VoIP ...
- с графикой. Спрайты | текст | примитивы | лоадеры графики ...
- с системой. Таймеры | стримы(Streams) | потоки(Threads) | строки(поддерживает кирилицу =) ) | векторы ...
- с окнами. Окна на основе OpenGL(есть поточный рендер). Клава,мышь,джостик | эвенты ...
7)Все библиотеки независимы друг от друга. Т.е. можно взять только библиотеку звука или\и графики и т.п. Можно в совокупности всего написать игру.
8)Все реально проще некуда, отличная документация, уйма примеров.
9)Минимальный размер в 9 мегов с примерами, исходниками,документацией, скомпиленными либами и dll.
Недостатки пока не нашел.
Личное ощущение что нашел клад, sdl нервно курит в сторонке.
Приведу пару примеров:
Контекст OpenGL
#include <SFML/OpenGL.hpp>
...
sf::ContextSettings settings;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 4;
settings.majorVersion = 3; //Мажор версия OGL
settings.minorVersion = 0; //Минор версия OGL т.е. используем OpenGL 3.0 . Те кто пробовал инициализировать oGL от 2.0 и выше поймут какой это геморой
sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);
Гениально и просто.
...
sf::ContextSettings settings;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 4;
settings.majorVersion = 3; //Мажор версия OGL
settings.minorVersion = 0; //Минор версия OGL т.е. используем OpenGL 3.0 . Те кто пробовал инициализировать oGL от 2.0 и выше поймут какой это геморой
sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);
Гениально и просто.
Потоки
#include <SFML/System.hpp>
...
sf::Thread thread(&func); Создаем поток
// Запуск
thread.launch();
...
sf::Thread thread(&func); Создаем поток
// Запуск
thread.launch();
Звук
#include <SFML/Audio.hpp>
int main()
{
sf::SoundBuffer buffer;
if (!buffer.loadFromFile("sound.wav"))
return -1;
sf::Sound sound;
sound.setBuffer(buffer);
sound.play();
return 0;
}
int main()
{
sf::SoundBuffer buffer;
if (!buffer.loadFromFile("sound.wav"))
return -1;
sf::Sound sound;
sound.setBuffer(buffer);
sound.play();
return 0;
}
Это лишь минимум примеров, но абсолютно любой модуль также прост. На примере звука точно также работают текстуры и шейдеры, т.е. весь апи однообразен.
Жду вашего мнения, а сам потихоньку отхожу от шока и читаю api
PS: Существует книга по разработке игр на этих либах, гуглится в бухте пиратов по "SFML Game Development"