This is the official CSFML 3 release! π
CSFML is the C binding for the C++ library SFML.
This is a release brings CSFML it in line with SFML 3 and will allow for properly updating SFML.Net as well.
Changes
A lot of work went into updating the CMake infrastructure to bring it closer to the same setup used by SFML, also leaning more into the fact that CSFML is internally still a C++ library, but with a C interface.
Updates for SFML 3
- Begin work on CSFML v3 by @ChrisThrasher in #225
- Compile CSFML with SFML 3.0 by @Marioalexsan in #238
- Catch up with SFML 3 API changes by @ChrisThrasher in #247
- Update to latest SFML 3 API by @ChrisThrasher in #255
- Remove references to OpenAL by @ChrisThrasher in #263
- Update to latest SFML 3 API by @ChrisThrasher in #264
- Simplify event conversion by @ChrisThrasher in #290
- Add missing
sfSoundBufferRecorderfunctions inherited fromsf::SoundRecorderby @ChrisThrasher in #294 - Add missing
sfSoundBufferRecorderfunctions inherited fromsf::SoundRecorderby @ChrisThrasher in #300 - Add missing window state parameters by @ChrisThrasher in #316
- Update to new anti-aliasing naming by @ChrisThrasher in #319
- Match return types with underlying SFML interface by @ChrisThrasher in #324
- Implement
getGeometricCenterby @ChrisThrasher in #345 - Implement new
sf::Clockfunctions by @ChrisThrasher in #346 - make sfRenderStates_default an extern const variable like sfColor constants by @ZXShady in #348
- Implement new graphics, system and window functions by @Marioalexsan in #350
- Implement new audio functions by @Marioalexsan in #349
- Update enumerations to match SFML 3 by @ChrisThrasher in #354
- Align sfRenderStates with sf::RenderStates by @Marioalexsan in #368
- Use SFML 3.0.0 tag by @ChrisThrasher in #376
- Centrally define SFML version by @ChrisThrasher in #377
- Update Network module code by @Marioalexsan in #388
- Add missing setMinimumSize and setMaximumSize window methods by @eXpl0it3r in #399
- Implement resize for Texture by @dogunbound in #402
- Split texture's resize function into sRGB and non-sRGB by @eXpl0it3r in #408
- Update SFML version to 3.0.2 by @eXpl0it3r in #415
General Build Code Improvements
- Remove trailing whitespace by @ChrisThrasher in #231
- Remove unused code by @ChrisThrasher in #232
- Set compiler warnings on a per-target basis by @ChrisThrasher in #240
- Reenable some MSVC warnings by @ChrisThrasher in #268
- Switch to
#pragma onceby @ChrisThrasher in #266 - Remove references to removed types by @ChrisThrasher in #271
- Remove deprecated interfaces by @ChrisThrasher in #272
- Move CSFML source files to CSFML/ directory by @ChrisThrasher in #269
- Convert private C++ headers to .hpp file extension by @ChrisThrasher in #220
- Remove unnecessary
(void)parameters from C++ implementations by @ChrisThrasher in #274 - Add
tidytarget for running clang-tidy by @ChrisThrasher in #276 - CMake: Fix installing HTML Help with newer Doxygen version by @Biswa96 in #270
- Added functions to convert between corresponding SFML and CSFML types by @ChrisThrasher in #273
- Stop leaving variables unused in release builds by @ChrisThrasher in #277
- Use vectors for pairs of scalar parameters by @ChrisThrasher in #279
- Add new clang-format integration and reformat codebase by @ChrisThrasher in #280
- Clean up implementation of
sf<T>Rect_intersectsby @ChrisThrasher in #282 - Remove unnecessary
externfrom C function declarations by @ChrisThrasher in #283 - Use
assertto protect against dereferencing null pointers by @ChrisThrasher in #287 - Remove leading newlines by @ChrisThrasher in #292
- Put common configuration settings in a CMakePresets file by @ChrisThrasher in #281
- Use
SFML_ROOTto find SFML installation by @ChrisThrasher in #286 - Simplify FTP types by @ChrisThrasher in #293
- Ensure CMake options include
CSFML_prefix by @ChrisThrasher in #296 - Use more
[[nodiscard]]by @ChrisThrasher in #297 - Use parentheses for constructor calls by @ChrisThrasher in #303
- Use project-local CMake variables by @ChrisThrasher in #304
- Move
copyToChar32to the one file where it's used by @ChrisThrasher in #305 - Add missing
sfprefix by @ChrisThrasher in #307 - Revert "Remove unnecessary
externfrom C function declarations" by @ChrisThrasher in #308 - Remove unnecessary .gitignore entries by @ChrisThrasher in #310
- Support building CSFML as static libraries by @ChrisThrasher in #311
- Enforce variable and parameter casing style by @ChrisThrasher in #312
- Use modern CMake property to handle static runtime linking with MSVC by @ChrisThrasher in #313
- Use
ONandOFFfor CMake booleans by @ChrisThrasher in #321 - Remove redundant definition by @ChrisThrasher in #322
- Stop using deprecated
DOXYGEN_EXECUTABLEvariable by @ChrisThrasher in #323 - Improve const correctness of
_destroyfunctions by @ChrisThrasher in #327 - Clean up documentation and corresponding build system code by @ChrisThrasher in #328
- Assert that shader uniform names are not null by @ChrisThrasher in #330
- Assert that filepath strings are not null by @ChrisThrasher in #333
- Assert string arguments are not null by @ChrisThrasher in #335
- Assert against arguments which would invoke UB by @ChrisThrasher in #339
- possible null pointer dereference in sfRenderTexture_destroy by @ZXShady in #340
- fix clang tidy warning about reserved identifier in WindowHandle.h by @ZXShady in #341
- Remove all
deletecalls outside of_destroyfunctions by @ChrisThrasher in #337 - add missing asserts in Font.cpp by @ZXShady in #343
- Remove unnecessary constructors by @ChrisThrasher in #342
- Manually inline
sfShapeImplby @ChrisThrasher in #344 - Use inheritance to remove
Thisdata member by @ChrisThrasher in #347 - Simplify shader creation functions by @ChrisThrasher in #351
- Prefix library options with
CSFML_by @ChrisThrasher in #352 - Use functions from the C++ standard library by @ChrisThrasher in #355
- remove unnecessary boolean comparison
!= 0by @ZXShady in #356 - make sfTime_Zero const global variable by @ZXShady in #357
- remove cstyle default init by @ZXShady in #359
- use aggregate initialization to initialize by @ZXShady in #358
- make static variables const via lamdbas by @ZXShady in #362
- cast to larger type before doing arithmetic to avoid signed integer o⦠by @ZXShady in #360
- Remove unnecessary
static_casts by @ChrisThrasher in #363 - check malloc return value for NULL and update docs by @ZXShady in #361
- Move ConvertEvent.hpp file into window module folder. by @ZXShady in #364
- Pass by reference if it is never null by @ZXShady in #365
- Make enumeration counts constant expressions by @ZXShady in #366
- Clean up
sfIpAddressimplementation by @ChrisThrasher in #369 - Remove references to
sf::types in public documentation by @ChrisThrasher in #371 - Remove unused headers by @ChrisThrasher in #370
- Match parameter types with SFML types by @ZXShady in #372
- Upgrade to clang-format-17 by @ChrisThrasher in #375
- update copyright year to 2025 by @JupiterRider in #411
CI Improvements and Updates
- Remove $GITHUB_WORKSPACE where not needed by @ChrisThrasher in #241
- Use bash by default in all CI jobs by @ChrisThrasher in #242
- Revert "Temporarily lock SFML revision used in CI" by @ChrisThrasher in #265
- Add missing apt package dependency by @ChrisThrasher in #278
- Build with newer macOS image by @ChrisThrasher in #289
- Add clang-tidy
modernize-checks by @ChrisThrasher in #284 - Add clang-tidy
cppcoreguidelines-*checks by @ChrisThrasher in #295 - Fix NuGet Build for
masterby @eXpl0it3r in #320 - Add Doxygen CI job by @ChrisThrasher in #325
- Add missing Freetype dependency by @ChrisThrasher in #383
- Correct macOS rpath reference for vorbisenc by @eXpl0it3r in #386
- Update NuGet Release Builds by @eXpl0it3r in #389
- Update Release Builds by @eXpl0it3r in #390
- Add ReadMe to the NuGet package project by @eXpl0it3r in #391
- Test with oldest possible CMake version by @ChrisThrasher in #400
- Remove VS2019 CI jobs by @ChrisThrasher in #401
- Improve readability of CI commands by @ChrisThrasher in #404
- Improve NuGet and Release CI Builds by @eXpl0it3r in #406
- Remove Fedora Target for the NuGet Build by @eXpl0it3r in #407
- Package runtime DLLs for NuGet by @eXpl0it3r in #412
- Update NuGet package version by @eXpl0it3r in #413
Tests and Test Infrastructure
- Add unit testing infrastructure and initial unit tests by @ChrisThrasher in #243
- Update Catch2 by @ChrisThrasher in #267
- Add
sfJoysticktests by @ChrisThrasher in #245 - Add tests for Network module by @ChrisThrasher in #291
- Copy SFML DLLs alongside test executables by @ChrisThrasher in #298
- Add more tests for the Window module by @ChrisThrasher in #315
- Add tests for
sfContextAttributeby @ChrisThrasher in #318 - Add tests for Audio module by @ChrisThrasher in #379
- Add tests for Graphics module by @ChrisThrasher in #380
- Add more tests for Graphics module by @ChrisThrasher in #381
- Add more unit tests by @ChrisThrasher in #384
- Avoid doing a real name resolution in sfIpAddress_fromString test by @jcowgill in #393
- Add tests for
sfImageby @ChrisThrasher in #403
Fixes
- [FIX] just a spelling mistake in the TcpSocket.h by @laiheau in #237
- Misc comment editions by @Guigui220D in #259
- Fix typos in public documentation by @ChrisThrasher in #275
- Fix documentation bug by @ChrisThrasher in #285
- Fix typo in documentation by @ChrisThrasher in #288
- Documentation: Fix last value of index range in FTP listing response by @mgrojo in #258
- Fix Doxygen warnings by @ChrisThrasher in #326
- Fix const correctness issues by @ChrisThrasher in #382
Contributors
A big thank you to everyone who helped shape this release! π