C++ 多媒体 API SFML
jopen 13年前
SFML 是一个免费的 C++ 多媒体 API,提供了低级和高级的图形、输入、音频等信息的访问。 <br /> <br /> 项目地址: <a href="/misc/goto?guid=4958196653779083640" target="_blank">http://sfml-dev.org/</a> <br /> <h3>What is SFML ? Why should I use it ?</h3> <p>SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL.<br /> SFML is composed of several packages to perfectly suit your needs. You can use SFML as a minimal windowing system to interface with OpenGL, or as a fully-featured multimedia library for building games or interactive programs.</p> <h3>Main features</h3> <p></p> <ul> <li><strong>Portable</strong><br /> SFML compiles on standard platforms like Windows (98, 2000, XP, Vista) and Unix systems (Linux, Mac OS X). As the library grows up, support for more operating systems will be added. </li> <li><strong>Object-oriented</strong><br /> SFML is written in C++ and provides an efficient, object-oriented design. It relies on standard patterns and idioms to provide a simple and robust framework. </li> <li><strong>Easy to use</strong><br /> SFML aims at being easy to manipulate. Effort is put on internal code to provide the simplest public interface. </li> <li><strong>Flexible</strong><br /> Instead of being one big API, SFML rather contains a lot of small packages, that can be chosen and combined according to the intended usage. You can use only the base package to get input and windowing, as well as the full graphics package with sprites and post-effects. </li> <li><strong>Easily integrable</strong><br /> SFML can be used in one or more windows, and/or can be integrated in existing interface components. Integration with existing graphical user interface (GUI) libraries is easy, so that you can add SFML views into complex interfaces built with Qt, wxWidgets, MFC or whatever. </li> </ul> <h3>Languages</h3> <p>SFML is available in the following languages :</p> <ul> <li>C++</li> <li>C</li> <li>.Net (C#, VB.Net, C++/CLI, ...)</li> <li>Python</li> <li>D</li> <li>Ruby</li> </ul> <h3>System</h3> <p></p> <ul> <li>Portable and accurate time measurement</li> <li>Simple and object oriented threads and mutexes</li> <li>Unicode module for proper conversions between UTF and locale-dependant encodings</li> </ul> <h3>Window</h3> <p></p> <ul> <li>Can be used as a minimal, portable package to replace GLUT or SDL for windowing and input with OpenGL</li> <li>Can create several rendering windows</li> <li>Can be integrated into components of existing Qt / MFC / wxWidgets / Win32 / X11 / ... interfaces</li> <li>Provides both a message-based and a real-time interface for handling input</li> <li>Can handle mouses with up to 5 buttons</li> <li>Can handle four joysticks with up to 7 axes and 32 buttons</li> </ul> <h3>Graphics</h3> <p></p> <ul> <li>Interfaces very easily with OpenGL (see OpenGL samples)</li> <li>Modern effects available and hardware-accelerated : alpha-blending, rotations, shaders, ...</li> <li>Manages memory efficiently, so that you don't have to worry about resources lifetime or storage ; you can even load your graphical resources before any window is created</li> <li>Can load and save standard image formats : bmp, dds, jpg, png, tga, psd</li> <li>Can load all graphics resources directly from files in memory</li> <li>Can use views like in a 3D scene, to zoom / translate / rotate the whole world</li> <li>Uses a simplified shader language for adding real-time post-effects</li> <li>Easy manipulation of graphical text through bitmap fonts</li> <li>Supports unicode characters</li> <li>Can load standard font file formats : ttf, cff, pcf, fnt, bdf, pfr, sfnt, type 1, type 42</li> </ul> <h3>Audio</h3> <p></p> <ul> <li>Uses hardware acceleration whenever possible</li> <li>Can load and save standard sound formats : ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64</li> <li>Can load all audio resources directly from files in memory</li> <li>3D sound spacialization</li> <li>Easy interface for capturing audio</li> <li>Manages memory efficiently, so that you don't have to worry about resources lifetime or storage</li> <li>Supports streaming for big files ; you can even write your custom streaming class for any source (network, ...)</li> <li>Supports multi-channels formats (mono, stereo, 4.0, 5.1, 6.1, 7.1)</li> </ul> <h3>Network</h3> <p></p> <ul> <li>Implements a portable layer over TCP and UDP sockets</li> <li>Easy data transfers through stream-based extensible packets</li> <li>Classes to use the HTTP and FTP internet protocols</li> </ul>