Final Platform Layer  0.9.6-beta
Changelog

v0.9.7-beta

Short

  • Added Vulkan support
  • Added seamless window resizing support for Win32
  • Added query functions for accessing video backend handles
  • Improved video system stability
  • Improved console window handling for Win32
  • Fixed some major & minor bugs

Detail

  • New: Added structs fplVideoRequirements, fplVideoRequirementsVulkan
  • New: Added function fplGetVideoRequirements() to query any requirements for a particular video backend
  • New: Added macro fplAssertPtr() for simply (exp != fpl_null) assertions
  • New: Added typedef fplVulkanValidationLayerCallback
  • New: Added enums fplVulkanValidationLayerMode, fplVulkanValidationSeverity
  • New: Added struct fplVulkanSettings
  • New: Added structs fplVideoWindow, fplVideoWindowWin32, fplVideoWindowX11
  • New: Added structs fplVideoSurface, fplVideoSurfaceOpenGL, fplVideoSurfaceVulkan
  • New: Added function fplGetVideoSurface() for query the current fplVideoSurface
  • New[#48]: Added function fplGetVideoProcedure() for query functions from the active video backend
  • New[#18]: [Win32] Support for message proc fibers to support seamless window resize -> works only with fplPollEvents()
  • New[#105]: [Win32] Added support for creating and using a console in addition to a window
  • New[#31]: [Win32] Added support for Vulkan
  • New[#32]: [X11] Added support for Vulkan
  • Changed: Changed video system to use jump tables instead, to support more backends in the future
  • Changed: Added field fplVulkanSettings to fplGraphicsApiSettings
  • Changed[#116]: AudioDriver/VideoDriver renamed to AudioBackend/VideoBackend
  • Changed[#98]: [Win32] Use YieldProcessor instead of SwitchToThread for fplThreadYield()
  • Changed[#111]: [Win32] Use SetConsoleTitle with fplConsoleSettings::title
  • Changed[#113]: [Win32] Properly show window on initialize (Foreground, Focus)
  • Fixed[#109]: fplS32ToString is not working anymore
  • Fixed[#121]: fplMutexHandle isValid flag was never working properly
  • Fixed[#122]: Compile errors on Arm32/C99 for "asm volatile"
  • Fixed[#123]: Compile error for wrong usage of fplStructInit in fplCPUID() for non-x86 architectures
  • Fixed[#110]: [Win32] Erasing of background when no video driver hides window always
  • Fixed[#114]: [Win32] Console window does not appear at the very first

v0.9.6-beta

Features

Improvements

  • Changed: New Changelog format with categories (Features, bugfixes, improvements, breaking changes, internal changes)
  • Changed[#74]: fplGetAudioDevices() allows to pass null-pointer as devices argument to return the number of audio devices only
  • Changed[#74]: fplWideStringToUTF8String() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplUTF8StringToWideString() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetExecutableFilePath() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetHomePath() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplExtractFilePath() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplChangeFileExtension() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplPathCombine() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplFormatStringArgs() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplFormatString() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetCurrentUsername() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetDisplayModes() allows to pass null-pointer as output argument to return the number of modes only
  • Changed[#74]: fplGetInputLocale() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetUserLocale() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetSystemLocale() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#74]: fplGetProcessorName() allows to pass null-pointer as output argument to return the number of characters only
  • Changed[#63]: Replaced usage of fplStackAllocate() with fpl__AllocateTemporaryMemory()
  • Changed[#92]: Use _offsetof() and ARRAY_SIZE() for fplArrayCount() instead
  • Updated: Better documentation for fplAssert*
  • Changed[#72]: [Win32] Query QueryPerformanceFrequency for every High-Precision timer calls instead of once per app start
  • Changed[#84]: [Win32] Moved windows.h include to the implementation and entry point block (all handles are void* or have correct size)

Bugfixes

  • Fixed[#76]: FPL__ERROR, FPL__WARNING, FPL__INFO was not passing the correct function name and line number in some cases
  • Fixed[#83]: fplGetAudioBufferSizeInFrames() does not return correct values always
  • Fixed[#83]: fplGetAudioBufferSizeInMilliseconds() does not return correct values always
  • Fixed[#94]: Fixed MINGW compile error for typo FPL_SUBPLATFORM_WINDOWS vs FPL_PLATFORM_WINDOWS (_WIN32_WINNT 0x0600)
  • Fixed: Corrected a few code documentation translation bugs
  • Fixed[#69]: [Win32] Removed the manual handling of ALT + F4 shut down of event handling
  • Fixed[#87]: [POSIX] fplGetWallDelta() was returning incorrect values

Internal changes

  • Renamed a lot of internal FPL_ defines to FPL__

Breaking changes

v0.9.5-beta

  • New: Added enum fplAudioDefaultFields
  • New: Added field defaultFields to fplAudioDeviceFormat struct
  • New: Added C++/11 detection (FPL_IS_CPP11)
  • New: Added enum fplAudioLatencyMode to fplAudioTargetFormat
  • New: Added function fplSetFileTimestamps()
  • New: Added fplAudioDriverType to fplAudioDeviceFormat
  • New: Added fplWallClock struct
  • New: Added function fplGetWallClock()
  • New: Added function fplGetWallDelta()
  • New: Support for logging out keyboard button events (FPL_LOG_KEY_EVENTS)
  • New: Added support for hard crashing on errors or warnings (define FPL_CRASH_ON_ERROR or FPL_CRASH_ON_WARNING) to enable it
  • New: [Win32] Added implementation for fplSetFileTimestamps()
  • New: [Win32] Added implementation for fplGetWallClock()
  • New: [Win32] Added implementation for fplGetWallDelta()
  • New: [POSIX] Added implementation for fplGetWallClock()
  • New: [POSIX] Added implementation for fplGetWallDelta()
  • Fixed: fplS32ToString() was not returning the last written character
  • Fixed: fplStringAppendLen() was not returning the last written character
  • Fixed: Fixed several warnings for doxygen
  • Fixed: [Core] Added empty functions for fplCPUID(), fplGetXCR0() for non-x86 platforms
  • Fixed: [Core] Implemented fplRDTSC() for non-x86 platforms
  • Fixed: [POSIX] Fixed several compile errors
  • Fixed: [Linux] Fixed non-joystick devices as gamepad detected
  • Fixed: [X11] Fixed keyrepeat issue for text input (finally!)
  • Fixed: [X11] Fixed duplicated key events in some cases
  • Changed: FPL_MAX_THREAD_COUNT and FPL_MAX_SIGNAL_COUNT can now be overridden by the user
  • Changed: Removed redundant field bufferSizeInBytes from fplAudioDeviceFormat struct
  • Changed: Simplified audio system default values initialization
  • Changed: Use default audio buffer size based on set fplAudioLatencyMode in fplAudioTargetFormat
  • Changed: [ALSA] Introduced audio buffer scaling for bad latency devices

v0.9.4 beta

  • New: Added callbacks fpl_memory_allocate_callback & fpl_memory_release_callback
  • New: Added enum fplMemoryAllocationMode
  • New: Added struct fplMemoryAllocationSettings
  • New: Added struct fplMemorySettings for controlling dynamic and temporary memory allocations
  • New: Added enum fplThreadPriority
  • New: Added function fplGetThreadPriority
  • New: Added function fplSetThreadPriority
  • New: Added function fplGetCurrentThreadId
  • New: Introduced dynamic/temporary allocations wrapping
  • New: Added FPL_WARNING macro for pushing on warnings only
  • New: Print out function name and line number in all log outputs
  • New: Added functions fplAtomicIncrement* used for incrementing a value by one atomically
  • New: Added macro fplRDTSC
  • New: Added struct fplProcessorCapabilities
  • New: Added function fplGetProcessorCapabilities
  • New: Added macro fplIsBitSet
  • New: Added function fplGetMainThread
  • New: Added field isActive to struct fplGamepadState
  • New: Added field deviceName to struct fplGamepadState and fplGamepadEvent
  • New: Added function fplSetWindowInputEvents
  • New: Added struct fplCPUIDLeaf
  • New: Added function fplCPUID and implemented it for X86/X64
  • New: Added function fplGetXCR0 and implemented it for X86/X64
  • New: Added macro fplHasInclude
  • New: Added power-pc 32/64 architecture detection
  • New: Added storage class identifier fpl_no_inline
  • New: Added macro fplAlwaysAssert()
  • New: Added function fplIsPlatformInitialized()
  • New: Added FPL_IS_IDE macro for checking if any source editor is active.
  • New: [MSVC] Always show implementation block when FPL_IS_IDE is set
  • Fixed: Corrected opengl example code in the header file
  • Fixed: Tons of documentation improvements
  • Fixed: fpl__PushError_Formatted was always pushing errors on regardless of the log level
  • Fixed: Invalid memory clear with zero bytes, when there was no audio samples to clear
  • Fixed: All non inlineable functions changed from fpl_internal_inline to fpl_internal instead (GCC/Clang compatible)
  • Fixed: Use actual window size for video initialization always instead of fixed size
  • Fixed: fplAtomicAddAndFetch* had no addend parameter
  • Fixed: All non-tab spacings replaced with tab spacings
  • Fixed: ARM64 was not detected properly
  • Fixed: Atomics was not detected for ICC (Intel C/C++ Compiler)
  • Changed: Removed fake thread-safe implementation of the internal event queue
  • Changed: Changed drop event structure in fplWindowEvent to support multiple dropped files
  • Changed: Renamed fplGetPlatformTypeString() to fplGetPlatformName()
  • Changed: Added stride to fplThreadWaitForAll() to support custom sized user structs
  • Changed: Added stride to fplThreadWaitForAny() to support custom sized user structs
  • Changed: Added stride to fplSignalWaitForAll() to support custom sized user structs
  • Changed: Added stride to fplSignalWaitForAny() to support custom sized user structs
  • Changed: Set audio worker thread to realtime priority
  • Changed: Use name table for fplArchType to string conversion
  • Changed: Use name table for fplPlatformType to string conversion
  • Changed: Use name table for fplPlatformResultType to string conversion
  • Changed: Use name table for fplVideoDriverType to string conversion
  • Changed: Use name table for fplAudioDriverType to string conversion
  • Changed: Use name table for fplAudioFormatType to string conversion
  • Changed: Use name table for fplLogLevel to string conversion
  • Changed: Values for fplPlatformResultType changed to be ascending
  • Changed: Moved fplInitFlags_All constant to fplInitFlags enum
  • Changed: CPU size detection is now independent from CPU architecture detection
  • Changed: fplGetProcessorName moved to common section with fallback to not supported architectures
  • Changed: Removed wrong compiler detection for LLVM (Clang is LLVM)
  • Changed: Removed pre-spaces from all code documentation comments
  • Changed: Changed from default audio sample rate of 48000 to 44100
  • Changed: Moved compiler includes into its own section
  • Changed: Moved rdtsc/cpuid, etc. into the implementation block
  • Changed: Renamed enum fplAudioResult to fplAudioResultType
  • Changed: Use fplLogLevel_Warning as max by default for all log functions
  • Renamed function fplGetAudioFormatString to fplGetAudioFormatTypeString
  • New: [Win32] Implemented function fplGetCurrentThreadId
  • New: [Win32] Support for multiple files in WM_DROPFILES
  • New: [Win32] Implemented fplGetThreadPriority
  • New: [Win32] Implemented fplSetThreadPriority
  • New: [Win32/Linux] Implemented isActive field for fplGamepadState for state querying, indicating any buttons are pressed or triggers have been moved
  • New: [Win32/XInput] Fill out the deviceName in fplGamepadState and fplGamepadEvent -> Generic name for now
  • New: [POSIX/Win32] Implemented functions fplAtomicIncrement*
  • New: [Linux/ALSA] Print compiler warning when alsa include was not found
  • New: [X11] Implemented fplSetWindowDecorated
  • New: [X11] Implemented fplIsWindowDecorated
  • Fixed: [Win32] Fixed missing WINAPI keyword for fpl__Win32MonitorCountEnumProc/fpl__Win32MonitorInfoEnumProc/fpl__Win32PrimaryMonitorEnumProc
  • Fixed: [Win32] Software video output was not outputing the image as top-down
  • Fixed: [Win32/X11] Mouse wheel delta message is not ignored anymore
  • Fixed: [X11] Fixed software video output (was broken)
  • Fixed: [POSIX] Moved __sync_synchronize before __sync_lock_test_and_set in fplAtomicStore*
  • Fixed: [POSIX/Win32] fplAtomicAddAndFetch* uses now addend parameter
  • Fixed: [Linux] Previous gamepad state was not cleared before filling in the new state
  • Fixed: [X11] Gamepad controller handling was broken
  • Changed: [POSIX] Use __sync_add_and_fetch instead of __sync_fetch_and_or in fplAtomicLoad*
  • Changed: [POSIX/Win32] When a dynamic library failed to load, it will push on a warning instead of a error
  • Changed: [POSIX/Win32] When a dynamic library procedure address failed to retrieve, it will push on a warning instead of a error
  • Changed: [POSIX/Win32] Reflect api changes for fplThreadWaitForAll()
  • Changed: [POSIX/Win32] Reflect api changes for fplThreadWaitForAny()
  • Changed: [POSIX/Win32] Reflect api changes for fplSignalWaitForAll()
  • Changed: [POSIX/Win32] Reflect api changes for fplSignalWaitForAny()
  • Changed: [X86/X64] fplGetProcessorName are only enabled on X86 or X64 architecture
  • Changed: [X86/X64] fplGetProcessorCapabilities are only enabled on X86 or X64 architecture
  • Changed: [MSVC] Implemented fplCPUID/fplGetXCR0 for MSVC
  • Changed: [GCC/Clang] Implemented fplCPUID/fplGetXCR0 for GCC/Clang
  • Changed: [Win32] Input events are not flushed anymore, when disabled

v0.9.3.0 beta

v0.9.2.0 beta

  • Changed: Removed "Ansi" part from all ansi functions
  • Changed: Debug/Release user define is always prefered
  • Changed: Properly define posix defines like _XOPEN_SOURCE
  • Changed: Renamed FPL_STACKALLOCATE to fplStackAllocate
  • Changed: Renamed FPL_OFFSETOF to fplOffsetOf
  • Changed: Renamed FPL_ARRAYCOUNT to fplArrayCount
  • Changed: Renamed FPL_ASSERT to fplAssert
  • Changed: Renamed FPL_STATICASSERT to fplStaticAssert
  • Changed: Renamed FPL_CLEAR_STRUCT to fplClearStruct
  • Changed: Renamed FPL_MIN to fplMin
  • Changed: Renamed FPL_MAX to fplMax
  • Changed: Renamed FPL_ZERO_INIT to fplZeroInit
  • Changed: Renamed FPL_STRUCT_SET to fplStructSet
  • Changed: Renamed FPL_STRUCT_INIT to fplStructInit
  • Changed: Renamed FPL_KILOBYTES to fplKiloBytes
  • Changed: Renamed FPL_MEGABYTES to fplMegaBytes
  • Changed: Renamed FPL_GIGABYTES to fplGigaBytes
  • Changed: Renamed FPL_TERABYTES to fplTeraBytes
  • Changed: Renamed FPL_ALIGNMENT_OFFSET to fplGetAlignmentOffset
  • Changed: Renamed FPL_ALIGNED_SIZE to fplGetAlignedSize
  • Changed: Renamed FPL_IS_ALIGNED to fplIsAligned
  • Changed: Renamed FPL_IS_POWEROFTWO to fplIsPowerOfTwo
  • Changed: Renamed fplFormatAnsiStringArgs() to fplFormatStringArgs()
  • Changed: Renamed fplFormatAnsiString() to fplFormatString()
  • Changed: Renamed fplCopyAnsiString() to fplCopyString()
  • Changed: Renamed fplCopyAnsiStringLen() to fplCopyStringLen()
  • Changed: Renamed fplGetAnsiStringLength() to fplGetStringLength()
  • Changed: Renamed fplOpenAnsiBinaryFile() to fplOpenBinaryFile()
  • Changed: Renamed fplCreateAnsiBinaryFile() to fplCreateBinaryFile()
  • Changed: Renamed fplSetWindowAnsiTitle() to fplSetWindowTitle()
  • Changed: Renamed fplGetClipboardAnsiText() to fplGetClipboardText()
  • Changed: Renamed fplSetClipboardAnsiText() to fplSetClipboardText()
  • Changed: Renamed all fplAtomicCompareAndExchange*() to fplAtomicCompareAndSwap*()
  • Changed: Renamed all fplAtomicAdd*() to fplAtomicFetchAndAdd*()
  • Changed: Renamed all fplAtomicInc*() to fplAtomicAddAndFetch*()
  • Changed: Renamed fplGetRunningArchitecture() to fplGetProcessorArchitecture()
  • Changed: Renamed fplAudioSettings.deviceFormat to fplAudioSettings.targetFormat
  • Changed: Renamed fplAudioSettings.deviceInfo to fplAudioSettings.targetDevice
  • Changed: All buffers or fixed char/byte arrays uses now either FPL_MAX_BUFFER_LENGTH or FPL_MAX_NAME_LENGTH except for device-id
  • Changed: All callback typedefs are now properly named as such
  • Changed: Auto-play/stop of audio samples when enabled in configuration
  • Changed: fplPlayAudio() will return fplAudioResult_Success when playback is already started
  • Changed: fplStopAudio() will return fplAudioResult_Success when playback is already stopped
  • Changed: Use nullptr for fpl_null when C++/11 is detected
  • Changed: Separated audio target format and device format
  • Removed: Removed obsolete to fplGetWideStringLength()
  • Removed: Removed obsolete to fplCopyWideString()
  • Removed: Removed obsolete to fplCopyWideStringLen()
  • Removed: Removed obsolete fplOpenWideBinaryFile()
  • Removed: Removed obsolete fplCreateWideBinaryFile()
  • Removed: Removed obsolete fplSetWindowWideTitle()
  • Removed: Removed obsolete fplGetClipboardWideText()
  • Removed: Removed obsolete fplSetClipboardWideText()
  • Removed: Removed obsolete fplWideStringToAnsiString()
  • Removed: Removed obsolete fplAnsiStringToWideString()
  • Removed: fplUpdateGameControllers()
  • Removed: fplPushEvent()
  • Removed: fplClearEvents()
  • Fixed: fplStaticAssert was not compiling on gcc/clang C99 mode
  • Fixed: Corrected a ton of misspellings in the documentation
  • Fixed: Define for FPL_DEBUG was missing a raute symbol
  • Fixed: Use va_copy for all va_list function arguments
  • New: Added fplFlushFile()
  • New: Added fplAtomicAddAndFetchPtr()
  • New: Added fplAtomicFetchAndAddPtr()
  • New: Added startAuto field to fplAudioSettings structure
  • New: Added stopAuto field to fplAudioSettings structure
  • New: Added fplInitFlags_GameController to fplInitFlags enumeration
  • New: Added fplPollEvents()
  • New: Added typedef fpl_window_event_callback
  • New: Added typedef fpl_window_exposed_callback
  • New: Added structure fplWindowCallbacks as a field in fplWindowSettings
  • New: Added support for disabling runtime linking -> FPL_NO_RUNTIME_LINKING
  • New: Added structure fplAudioTargetFormat
  • New: Added macro fplCopyStruct()
  • New: Added macro fplIsBigEndian()
  • New: Added macro fplIsLittleEndian()
  • New: Added fplGetWindowState()
  • New: Added fplSetWindowState()
  • Changed: [Win32] GetTickCount() replaced with GetTickCount64()
  • Changed: [Win32] Use unicode (*W) win32 api functions for everything now
  • Changed: [Win32] fplGetOperatingSystemInfos uses additional RtlGetVersion
  • Changed: [DirectSound] fplGetAudioDevices() uses DirectSoundEnumerateW instead of DirectSoundEnumerateA
  • Changed: [Win32/X11] Changed event handling from indirect to direct
  • Changed[*]: Optional runtime linking for OS library calls
  • Fixed: [Win32] fplGetProcessorArchitecture was not handling the WOW64-case
  • Fixed: [Win32] fplGetClipboardAnsiText() was broken
  • Fixed: [Win32] Forced compile error when compiling on < vista (FPL uses several features which requires vista or higher)
  • Fixed: [Win32] fplGetOperatingSystemInfos had no WINAPI call defined for GetVersion prototype
  • Fixed: [Win32] fplSetWindowFloating was not working
  • Fixed: [Win32] fplSetWindowDecorated was not working
  • Fixed: [Win32] fplSetWindowResizeable was not working
  • Fixed: [Alsa] fpl__AudioWaitForFramesAlsa was not compiling (commonAudio missing)
  • Fixed: [Alsa] Alsa output was not working anymore for certain playback devices
  • Fixed: [X11] fplButtonState_Repeat was not handled in keyboard events
  • New: [Win32/POSIX] Implemented fplFlushFile()
  • New: [Win32/X11] Handle fplInitFlags_GameController to enable/disable game controllers
  • New: [Win32/X11] Support for handling the OS event directly -> fpl_window_event_callback
  • New: [Win32/X11] Support for handling the exposed (Repaint) event directly -> fpl_window_exposed_callback
  • New: [Win32] Implemented fplSetWindowState / fplGetWindowState

v0.9.1.0 beta

  • Changed: Updated all the lists
  • Changed: Added known issues section
  • Changed: Renamed fplPlatformResultType to fplPlatformResultType
  • Changed: fplPlatformInit returns now bool instead fplPlatformResultType
  • Changed: Changed all comment prefix from \ to @, so it matches java-doc style
  • Changed: Disable compile error when unix or bsd is detected
  • Changed: Renamed fplGetKeyboardState to fplPollKeyboardState
  • Changed: Renamed fplGetGamepadStates to fplPollGamepadStates
  • Changed: fplDebugOut prints out to the console on non-MSVC
  • Changed: Added enum value fplLogWriterFlags_StandardConsole
  • Changed: Added enum value fplLogWriterFlags_ErrorConsole
  • Changed: Removed field logToError from fplLogWriterConsole
  • Changed: Internal audio system uses condition variables instead of signals now
  • Removed: Removed obsolete field skipRepeatKeys in fplInputSettings
  • Fixed: Clang compiler detection was not working because LLVM was detected first
  • Fixed: UINT32_MAX was missing on android POSIX
  • Fixed: fplFormatAnsiStringArgs was checking for argList as pointer which is wrong
  • Fixed: leftTrigger/rightTrigger field in fplGamepadState had incorrect documentation
  • New: Added function fplGetPlatformResult()
  • New: Added struct fplMouseState
  • New: Added function fplPollMouseState()
  • New: Added field disabledEvents to fplInputSettings
  • New: Added android platform detection
  • New: Added enum fplGamepadButtonType
  • Changed: [POSIX] Proper detection of all architecturess (x86, x86_64, x64, arm32, arm64)
  • Changed: [POSIX] Moved fplGetCurrentUsername from the linux-section into the posix-section
  • Changed: [POSIX] Moved fplGetProcessorCoreCount from Linux into the POSIX section
  • Changed: [POSIX] Moved fplGetOperatingSystemInfos from Linux into the POSIX section
  • Changed: [POSIX] Moved fplGetHomePath from Linux into the POSIX section
  • Changed: [POSIX] Made fplGetExecutableFilePath Unix/Linux complaint and moved it into the POSIX section
  • Changed: [POSIX] Added Clang/LLVM to atomics detection
  • Fixed: [POSIX]: Removed alloca.h include when nor win32 or linux is detected
  • Fixed: [POSIX]: Fixed typo in fplGetRunningArchitecture
  • Fixed: [POSIX]: fplSemaphoreInit() was testing INT32_MAX instead of UINT32_MAX
  • Fixed: [Win32] PeekMessage was not using our windowHandle at all
  • Fixed: [Win32] fplReadFileBlock64/fplWriteFileBlock64 was not working at all
  • Fixed: [Win32/XInput] Left/Right gamepad thumb buttons was not mapped
  • Fixed: [POSIX] fplReadFileBlock64/fplWriteFileBlock64 was not working at all
  • Fixed: [POSIX] Removed initialization (PTHREAD_MUTEX_INITIALIZER) of pthread_mutex_t in fpl__PosixMutexCreate
  • Fixed: [X11] Fixed broken fplPollKeyboardState
  • Fixed: [MSVC] Removed duplicated warning override in header
  • New: [Win32]: Use SetCapture/ReleaseCapture for mouse down/up events
  • New: [Win32]: Implemented fplPollMouseState()
  • New: [Win32] Disable keyboard/mouse/gamepad events when fplInputSettings.disabledEvents is enabled
  • New: [POSIX] Added __USE_LARGEFILE64 before including sys/types.h
  • New: [X11] Implemented fplPollMouseState
  • New: [X11] Implemented modifier keys in fplPollKeyboardState
  • New: [Linux] Implemented fplPollGamepadStates

v0.9.0.1 beta

  • Changed: Renamed fields "kernel*" to "os*" in fplOSInfos
  • Changed: Renamed fields "system*" to "distribution*" in fplOSInfos
  • Fixed: [X11] Fixed icon loading was not working at all
  • Fixed: [POSIX] fplWriteFileBlock64 was not properly implemented
  • Fixed: [POSIX] fplReadFileBlock64 was not properly implemented

v0.9.0.0 beta:

  • Changed: fplKey_Enter renamed to fplKey_Return
  • Changed: fplKey_LeftWin renamed to fplKey_LeftSuper
  • Changed: fplKey_RightWin renamed to fplKey_RightSuper
  • Changed: fplKey_Plus renamed to fplKey_OemPlus
  • Changed: fplKey_Minus renamed to fplKey_OemMinus
  • Changed: fplKey_Comma renamed to fplKey_OemComma
  • Changed: fplKey_Period renamed to fplKey_OemPeriod
  • Changed: fplKeyboardModifierFlags_Alt are split into left/right part respectively
  • Changed: fplKeyboardModifierFlags_Shift are split into left/right part respectively
  • Changed: fplKeyboardModifierFlags_Super are split into left/right part respectively
  • Changed: fplKeyboardModifierFlags_Ctrl are split into left/right part respectively
  • Changed: All bool fields in structs are replaced with fpl_b32
  • Changed: Added COUNTER macro to non-CRT FPL_STATICASSERT
  • Changed: Renamed fields in fplMemoryInfos to match correct meaning
  • Changed: String copy functions uses fplMemoryCopy instead of iterating and copy each char
  • Changed: fplSetFilePosition32 returns now uint32_t instead of void
  • Changed: Added field timeStamps to fplFileEntry
  • Changed: [X11] Window title uses XChangeProperty now instead of XStoreName
  • Changed: [Win32] Detection of left/right keyboard modifier flags
  • Changed: [Win32] Mapping OEM 1-8 keys
  • Changed: [Win32] Use MapVirtualKeyA to map key code to virtual key
  • Fixed: Corrected a ton of comments
  • Fixed: fpl__HandleKeyboardButtonEvent had incorrect previous state mapping
  • Fixed: [X11] fplMouseEventType_Move event was never created anymore
  • New: Added typedef fpl_b32 (32-bit boolean type)
  • New: Added struct fplKeyboardState
  • New: Added struct fplGamepadStates
  • New: Added function fplGetKeyboardState()
  • New: Added function fplGetSystemLocale()
  • New: Added function fplGetUserLocale()
  • New: Added function fplGetInputLocale()
  • New: Added function fplGetGamepadStates()
  • New: Added function fplKey_Oem1-fplKey_Oem8
  • New: Added function fplGetFileTimestampsFromPath
  • New: Added function fplGetFileTimestampsFromHandle
  • New: Added internal function fpl__ParseTextFile used for parsing /proc/cpuinfo or other device files
  • New: Added function fplGetFileSizeFromHandle
  • New: Added function fplGetFileSizeFromHandle64
  • New: Added function fplGetFileSizeFromPath
  • New: Added function fplGetFileSizeFromPath64
  • New: Added function fplGetFilePosition
  • New: Added function fplGetFilePosition64
  • New: Added function fplSetFilePosition
  • New: Added function fplSetFilePosition64
  • New: Added function fplWriteFileBlock
  • New: Added function fplWriteFileBlock64
  • New: Added function fplReadFileBlock
  • New: Added function fplReadFileBlock64
  • New: [Win32] Implemented fplGetKeyboardState
  • New: [Win32] Implemented fplGetGamepadStates
  • New: [Win32] Implemented fplGetSystemLocale
  • New: [Win32] Implemented fplGetUserLocale
  • New: [Win32] Implemented fplGetInputLocale
  • New: [Win32] Implemented fplGetFileTimestampsFromPath
  • New: [Win32] Implemented fplGetFileTimestampsFromHandle
  • New: [Win32] Implemented fplReadFileBlock64
  • New: [Win32] Implemented fplWriteFileBlock64
  • New: [Win32] Implemented fplSetFilePosition64
  • New: [Win32] Implemented fplGetFilePosition64
  • New: [Win32] Implemented fplGetFileSizeFromPath64
  • New: [Win32] Implemented fplGetFileSizeFromHandle64
  • New: [X11] Implemented fplGetKeyboardState
  • New: [X11] Set window icon title using XChangeProperty
  • New: [X11] Give window our process id
  • New: [X11] Load window icons on startup
  • New: [X11] Added ping support for letting the WM wakeup the window
  • New: [Linux] Implemented fplGetSystemLocale
  • New: [Linux] Implemented fplGetUserLocale
  • New: [Linux] Implemented fplGetInputLocale
  • New: [Linux] Reading first joystick as game controller in linux
  • New: [POSIX] Implemented fplGetFileTimestampsFromPath
  • New: [POSIX] Implemented fplGetFileTimestampsFromHandle
  • New: [POSIX] Implemented fplReadFileBlock64
  • New: [POSIX] Implemented fplWriteFileBlock64
  • New: [POSIX] Implemented fplSetFilePosition64
  • New: [POSIX] Implemented fplGetFilePosition64
  • New: [POSIX] Implemented fplGetFileSizeFromPath64
  • New: [POSIX] Implemented fplGetFileSizeFromHandle64

v0.8.4.0 beta:

  • New: Added macro function FPL_STRUCT_INIT
  • New: Added enum value fplWindowEventType_DropSingleFile
  • New: Added structure fplWindowDropFiles
  • New: Added enum value fplInitFlags_Console
  • New: [Win32] Support for WM_DROPFILES -> fplWindowEventType_DropSingleFile event
  • Changed: Move fplInitFlags_All out and made it a static constant
  • Changed: Use fplInitFlags_Console to activate console or not
  • Fixed: fplExtractFileExtension was returning wrong result for files with multiple separators
  • Fixed: [Win32] Fullscreen toggling was broken in maximize/minimize mode
  • Fixed: [Win32] ClientToScreen prototype was missing WINAPI call
  • Fixed: [POSIX] fplListDirNext() was broken
  • Fixed: [X11] Key up event was never fired (KeyRelease + KeyPress = Key-Repeat)

v0.8.3.0 beta:

  • Changed: fplVersionInfo is now parsed as char[4] instead of uint32_t
  • Changed: fplMouseEvent / fplKeyboardEvent uses fplButtonState instead of a bool for the state
  • Changed: Replaced fplMouseEventType_ButtonDown / fplMouseEventType_ButtonUp with fplMouseEventType_Button
  • Changed: Replaced fplKeyboardEventType_KeyDown / fplKeyboardEventType_KeyUp with fplKeyboardEventType_Button
  • Fixed: Fixed incompabilties with MingW compiler
  • New: Added function fplStringToS32
  • New: Added function fplStringToS32Len
  • New: Added function fplS32ToString
  • New: Added function fplAtomicLoadSize
  • New: Added function fplAtomicStoreSize
  • New: Added function fplAtomicExchangeSize
  • New: Added function fplAtomicCompareAndExchangeSize
  • New: Added function fplIsAtomicCompareAndSwapSize
  • New: Added function fplAtomicAddSize
  • New: Added function fplAtomicIncU32
  • New: Added function fplAtomicIncU64
  • New: Added function fplAtomicIncS32
  • New: Added function fplAtomicIncS64
  • New: Added function fplAtomicIncSize
  • New: Added macro FPL_IS_POWEROFTWO
  • New: Introduced FPL_CPU_32BIT and FPL_CPU_64BIT
  • New: fplAtomic*Ptr uses FPL_CPU_ instead of FPL_ARCH_ now
  • New: Added enumeration fplButtonState
  • New: Added field multiSamplingCount to fplOpenGLVideoSettings
  • Changed: [Win32] Changed keyboard and mouse handling to use fplButtonState now
  • Changed: [Win32] Changed fplListDirBegin/fplListDirNext to ignore . and ..
  • Changed: [Win32] Console activation is done when _CONSOLE is set as well
  • Changed: [X11] Changed keyboard and mouse handling to use fplButtonState now
  • Fixed: [Win32] fplGetTimeInMillisecondsHP was not returning a proper double value
  • Fixed: [Win32] Fixed crash when using fplThreadTerminate while threads are already exiting
  • Fixed: [Win32] fplThreadWaitForAll/fplThreadWaitForAny was not working properly when threads was already in the process of exiting naturally
  • Fixed: [Win32] Fixed incompabilties with MingW compiler
  • Fixed: [POSIX] Fixed crash when using fplThreadTerminate while threads are already exiting
  • New: [Win32] Support for OpenGL multi sampling context creation
  • New: [GLX] Support for OpenGL multi sampling context creation

v0.8.2.0 beta:

  • Changed: Ensures const correctness on all functions
  • Changed: Signature of fplDynamicLibraryLoad changed (Returns bool + Target handle parameter)
  • Fixed: Corrected code documentation for all categories
  • Fixed: FPL_ENUM_AS_FLAGS_OPERATORS had invalid signature for operator overloadings and missed some operators
  • Fixed: Fixed fplMemorySet was not working for values > 0
  • New: Forward declare thread handle for thread callback
  • New: Added fplKey for OEM keys (Plus, Comma, Minus, Period)
  • New: Added fplKey for Media & Audio keys
  • New: Added fplWindowEventType_Maximized / fplWindowEventType_Minimized / fplWindowEventType_Restored
  • New: Added documentation category: Assertions & Debug
  • New: Added documentation category: Storage class identifiers
  • New: Added documentation category: Constants
  • New: Added documentation category: Function macros
  • New: Undef annoying defined constants such as None, Success, etc.
  • New: Added fplImageType enumeration
  • New: Added fplImageSource structure
  • New: Added icons as fplImageSource array to fplWindowSettings
  • Changed: [Win32] Correct fplDynamicLibraryLoad to match signature change
  • Changed: [Win32] Corrected function prototype macro names
  • Fixed: [Win32] ClientToScreen prototype was defined twice
  • New: [Win32] OEM keys mapping
  • New: [Win32] Media & Audio key mapping
  • New: [Win32] Handle window maximized/minimized and restored events
  • New: [Win32] Load small/big icon from the fplWindowSettings icon imagesources
  • Changed: [X11] Corrected function prototype macro names
  • New: [X11] OEM keys mapping
  • Changed: [X11] Corrected function prototype macro names
  • Changed: [POSIX] Correct fplDynamicLibraryLoad to match signature change
  • Changed: [POSIX] Use of pthread_timedjoin_np to support timeout in fplThreadWaitForOne when available (GNU extension)

v0.8.1.0 beta:

v0.8.0.0 beta:

  • Changed: Changed from inline to api call for fplGetAudioBufferSizeInFrames/fplGetAudioFrameSizeInBytes/fplGetAudioBufferSizeInBytes
  • Changed: Changed from inline to api call for fplGetArchTypeString / fplGetPlatformResultTypeString / fplGetPlatformTypeString
  • Changed: Moved FPL_CLEAR_STRUCT to public api
  • New: Added fplThreadYield()
  • Changed: [GLX] Added types such as XVisualInfo directly without relying on glx.h
  • Fixed: [Win32] Console window was not working anymore the second time fplPlatformInit was called
  • Fixed: [GLX] XVisualInfo was manually defined, now we use Xutil.h
  • New: [Win32] Implemented fplThreadYield()
  • New: [POSIX] Implemented fplThreadYield()
  • New: [Linux] Implemented fplGetRunningArchitecture()
  • New: [Linux] Implemented fplGetOperatingSystemInfos()
  • New: [X11] Implemented Video Software output for X11

v0.7.8.0 beta:

  • Changed: Collapsed down all argument checking using macros
  • Changed: Use FPL_CLEAR_STRUCT only when it is appropriate
  • Changed: All public checks for fpl__global__AppState returns proper error now
  • Changed: fplGetAudioHardwareFormat returns bool and requires a outFormat argument now
  • Changed: fplSetAudioClientReadCallback returns bool now
  • Changed: fplListFiles* is renamed to fplListDir*
  • Changed: fplListDir* argument for fplFileEntry is renamed to entry for all 3 functions
  • Changed. fplFileEntry stores the fullPath instead of the name + internal root infos - Changed: Introduced fplFilePermissions in fplFileEntry
  • Changed: Removed flag fplFileAttributeFlags_ReadOnly from fplFileAttributeFlags
  • Fixed: Fixed a ton of wrong inline definitions
  • Fixed: Fixed GCC warning -Wwrite-strings
  • Fixed: fplDebugBreak() was missing function braces for __debugbreak
  • New: Added fplEnforcePathSeparatorLen()
  • New: Added fplEnforcePathSeparator()
  • New: Added fileSize field to fplFileEntry
  • New: Added struct fplFilePermissions
  • New: Added enum fplFilePermissionMasks
  • New: Added fplDebugOut()
  • New: Added fplDebugFormatOut()
  • New: Added fplWindowShutdown()
  • New: Added macro FPL_STRUCT_SET
  • Changed: [POSIX] Removed all pthread checks, because there is a check for platform initialization now
  • Changed: [Win32] Changed fplListDir* to support fplFilePermissions
  • Changed: [Win32] Showing cursor does not clip cursor anymore
  • Fixed: [POSIX] Fixed a ton of C99 compile errors
  • New: [POSIX] Implemented fplListDirBegin
  • New: [POSIX] Implemented fplListDirNext
  • New: [POSIX] Implemented fplListDirEnd
  • New: [X11] Implemented fplWindowShutdown()
  • New: [Win32] Fill out fileSize for fplFileEntry in fplListDir*
  • New: [Win32] Implemented fplWindowShutdown()

v0.7.7.0 beta:

  • New: Added fplMutexTryLock()
  • New: Added fplMakeDefaultSettings()
  • New: Added fplStringAppend() / fplStringAppendLen()
  • New: Added fplDebugBreak()
  • Changed: Any string buffer writing functions returns the last written character now
  • Changed: Changed fplGetClipboardAnsiText() to return bool instead of char *
  • Changed: Changed fplGetClipboardWideText() to return bool instead of wchar_t *
  • Changed: Entry point definition implementation is now a separated block and controlled by FPL_ENTRYPOINT
  • Changed: MSVC compiler warnings are only disabled inside the implementation block
  • Fixed: Never detected Win32 Path separator (Wrong define check)
  • Fixed: MSVC compiler warnings was overwritten always, now uses push/pop
  • Fixed: MSVC _Interlocked* functions has no signature for unsigned, so we use either LONG or LONG64
  • Fixed: MSVC _Interlocked* replaced with Interlocked* macros
  • New: [X11] Implemented fplIsWindowFullscreen
  • New: [X11] Implemented basic fplSetWindowFullscreen
  • Fixed: [POSIX] Create/Open*BinaryFile was wrong named
  • Fixed: [Win32] fplMemoryFree actually never freed any memory

v0.7.6.0 beta:

  • Changed: Renamed fplGetRunningArchitectureType to fplGetRunningArchitecture
  • Changed: Renamed fplThreadDestroy() to fplThreadTerminate() + signature changed (Returns bool)
  • Changed: fplSignalInit() + new parameter "initialValue"
  • Changed: All functions which uses timeout uses fplTimeoutValue instead of uint32_t
  • Changed: All string buffer writing functions returns the last written character instead
  • Changed: Removed timeout parameter from fplMutexLock()
  • New: Added struct fplConditionVariable
  • New: Added enum fplSignalValue
  • New: Added fplConditionInit()
  • New: Added fplConditionDestroy()
  • New: Added fplConditionWait()
  • New: Added fplConditionSignal()
  • New: Added fplConditionBroadcast()
  • New: Added typedef fplTimeoutValue
  • New: Added constant FPL_TIMEOUT_INFINITE
  • Changed: [Win32] Thread resources are automatically cleaned up when a thread is done running
  • Changed: [POSIX] Thread resources are automatically cleaned up when a thread is done running
  • Changed: [Win32] fplSignalInit updated to support isSetInitially
  • Changed: [Linux] fplSignalInit updated to support isSetInitially
  • Fixed: [GLX] Fallback to glXCreateContext was not working properly
  • New: [Linux] Implemented fplGetCurrentUsername
  • New: [Win32] Implemented all fplCondition*
  • New: [POSIX] Implemented all fplCondition*

v0.7.5.0 beta:

  • Changed: Updated documentations
  • Changed: Small refactoring of the internal audio system
  • Changed: Renamed fplMutexCreate to fplMutexInit + signature change (Returns bool, Mutex pointer argument)
  • Changed: Renamed fplSignalCreate to fplSignalInit + signature change (Returns bool, Signal pointer argument)
  • Changed: Removed mutex parameter from SignalWaitFor*
  • Changed: [GLX] Use glXCreateContext with visual info caching for GLX < 1.3 and glXCreateNewContext for GLX >= 1.3
  • Changed: [POSIX] All FPL__POSIX_GET_FUNCTION_ADDRESS_BREAK are wrapped around a do-while loop so it can "break" properly.
  • Removed: [POSIX] All signal functions removed
  • New: [ALSA] Added rudimentary ALSA playback support
  • New: [Linux] Implemented signal functions using eventfd

v0.7.4.0 beta:

  • Fixed: [Win32] Removed x64 detection for fplAtomicStoreS64 and fplAtomicExchangeS64 and use _InterlockedExchange*64 directly
  • Changed: [GLX] Implemented modern opengl context creation

v0.7.3.0 beta:

v0.7.2.0 beta:

  • Changed: Signature of fplGetRunningMemoryInfos() changed
  • Changed: Renamed fplGetSystemMemoryInfos to fplGetRunningMemoryInfos
  • Changed: Added "p" prefix to linux and unix app state
  • New: Added enum fplArchType
  • New: Added fplGetRunningArchitectureType()
  • New: Added fplGetArchTypeString()
  • New: Added enum fplPlatformType
  • New: Added fplGetPlatformType()
  • New: Added fplGetPlatformTypeString()
  • New: Added struct fplVersionInfo
  • New: Added struct fplOSInfos
  • New: Added fplGetOperatingSystemInfos()
  • New: Added fplGetCurrentUsername()
  • Changed: [Docs] Updated all documentations to match the current state
  • Fixed: [Docs] Missing brief for fpl_extern
  • Changed: [MSVC] Removed the compiler specific No-CRT block such as _fltused, etc. -> The caller is responsible for this!
  • New: [Win32] Implemented fplGetCurrentUsername()
  • New: [Win32] Implemented fplGetOperatingSystemInfos()
  • New: [Win32] Implemented fplGetRunningArchitectureType()

v0.7.1.0 beta:

  • Changed: fplConsoleFormatOut/fplConsoleFormatError is now common_api instead of platform_api
  • Changed: FPL uses a keyMap for mapping OS key codes to fplKey for every platform
  • Changed: [Win32] Console does not cache the output/input/error handles
  • Changed: [Win32] fplConsole* uses ReadFile/WriteFile instead of ReadConsole/WriteConsole
  • Changed: BSD Platform is detected as a Unix Platform, but has its own subplatform as well
  • Fixed: [Win32] Console was always allocated
  • Fixed: No CRT stub defintions such as memset and RTC was added for all compilers which is wrong
  • Fixed: Several bugfixes
  • New: Added stubs for Unix Platform

v0.7.0.0 beta:

  • Changed: Switched to C99
  • Changed: Changed Init/app state structs a lot
  • Changed: Removed most anonymous unions and structs
  • Changed: Renamed a lot of the internal handles
  • Changed: Renamed ThreadContext to ThreadHandle
  • Changed: Renamed ThreadSignal to SignalHandle
  • Changed: Renamed ThreadMutex to MutexHandle
  • Changed: All structs, functions with name API renamed to *Api
  • Changed: Moved internal functions around and restructured things
  • Changed: Moved platforms and subplatforms into its own namespace
  • Changed: Updated documentation a bit
  • Changed: Introduced common::Argument*Error functions
  • Changed: Removed MemoryStackAllocate()
  • Changed: App state memory size is aligned by 16-bytes as well
  • Changed: Video/Audio state memory block is included in app state memory as well
  • Changed: PlatformInit uses InitResultType
  • Changed: fpl*DefaultSettings is now fplSet*DefaultSettings and does not return a struct anymore
  • Fixed: Get rid of const char to char* warnings for Get*DriverString() functions
  • Fixed: [Win32] Icon was not default application icon
  • Fixed: ExtractFileName and ExtractFileExtension was not returning const char*
  • New: [X11][Window] Implemented X11 Subplatform
  • New: [X11][OpenGL] Implemented X11/GLX video driver
  • New: [X11][Software] Implemented Software video driver
  • New: [POSIX] Implemented all remaining posix functions
  • New: Introduced debug logging -> FPL_LOGGING
  • New: Added FPL_ALIGNMENT_OFFSET macro
  • New: Added FPL_ALIGNED_SIZE macro
  • New: Added InitResultType
  • New: CRT (C-Runtime) is not required anymore

v0.6.0.0 beta:

  • Changed: Documentation changed a bit
  • Changed: Renamed SignalWakeUp() to SignalSet()
  • Changed: [Win32] Start thread always immediatly
  • Changed: Included "Windows" prefix for output path in visual studio projects
  • Changed: Moved opengl settings into graphics union
  • Changed: All global functions use :: as a prefix
  • Deleted: Removed ThreadSuspend() -> Not complaint with pthread
  • Deleted: Removed ThreadResume() -> Not complaint with pthread
  • Deleted: Removed SignalReset() -> Not complaint with pthread
  • Fixed: Resize video backbuffer was not working anymore
  • Fixed: [Win32] Some _Interlocked* functions was not existing on x86
  • New: Introduced PrepareWindowForVideoAfter() so we can setup a video context after the window has been created
  • New: Introduced PrepareWindowForVideoBefore() so we can setup any window before initializing the video context
  • New: Added timings::GetTimeInMilliseconds() with [Win32] and [POSIX] implementation
  • New: [POSIX] Implemented all threading functions
  • New: [Linux] Added a makefile for each demo project
  • New: Added files::FileMove

v0.5.9.1 beta:

  • Changed: MemoryInfos uses uint64_t instead of size_t
  • Changed: Added BSD to platform detecton
  • Changed: Architecture detection does not use _WIN64 or _WIN32 anymore
  • Changed: fpl_api is now either fpl_platform_api or fpl_common_api
  • Changed: Internal code refactoring
  • Changed: Renamed VideoSettings driverType to driver
  • Changed: Video initialization is now platform independent
  • Changed: Window initialization is now platform independent
  • Changed: Moved window::WindowFlip to video::VideoFlip
  • Changed: [POSIX] Replaced file-io with POSIX open, read, write
  • Changed: [Win32] Removed fpl_api from main entry point forward declararation
  • Changed: [Win32] Moved main entry point inside the implementation block
  • Fixed: Arm64 was misdetected as X64, this is now its own arch
  • Fixed: GNUC and ICC are pure C-compilers, it makes no sense to detect such in a C++ library
  • Fixed: [Linux][POSIX] Refactor init and release to match PlatformInitState and PlatformAppState
  • Updated: Documentations updated
  • New: [POSIX][X11][Linux] Added missing functions as not-implemented

v0.5.9.0 beta:

  • Changed: Moved documentation inside its own file "final_platform_layer.documentation"
  • Changed: [Win32] Window creation uses CS_OWNDC always
  • Changed: Refactoring of platform and non-platform code
  • Changed: InitPlatform() and ReleasePlatform() is now platform independent

v0.5.8.1 beta:

  • Changed: KeyboardEventType::Char renamed to KeyboardEventType::CharInput
  • Changed: Completed basic documentation
  • Changed: Renamed VideoBackBuffer.stride to VideoBackBuffer.lineWidth
  • Changed: Moved a few internal inline audio functions to the global audio namespace
  • Fixed: [Win32] WM_CHAR was allowing unicode characters as well, which is wrong because it must be properly converted first.
  • Fixed: Audio driver selection was buggy
  • Added: pixelStride to fpl::video::VideoBackBuffer
  • Added: fpl::window::ClearWindowEvents()
  • Added: fpl::window::PushWindowEvent()
  • Added: fpl::window::UpdateGameControllers()
  • Added: fpl::audio::GetAudioBufferSizeInFrames()
  • Added: fpl::audio::GetAudioDriverString()
  • Added: fpl::audio::GetAudioFormatString()
  • Added: fpl::audio::GetAudioSampleSizeInBytes()
  • Added: fpl::audio::GetAudioFrameSizeInBytes()
  • Added: fpl::audio::GetAudioBufferSizeInBytes()

v0.5.8.0 beta:

  • Changed: SignalWaitFor* requires additional parameter for passing in the ThreadMutex reference (pthread compability)
  • Changed: Signal* does not use const reference anymore (pthread compability)
  • Changed: Updated documentation a ton
  • Changed: Decreased MAX_ERRORSTATE_COUNT from 1024 to 256
  • Changed: global__LastErrorState is a non-pointer global now
  • Changed: Renamed GetPlatformLastError() to GetPlatformError()
  • Changed: All array of objects parameters uses C++ array style -> int *arr[] instead of int **arr
  • Fixed: MemoryAlignedFree() had wrong signature (void **) instead of (void *)
  • Fixed: GetPlatformErrorCount() was not increasing when an empty error was pushed on for single error states
  • Fixed: [Win32] InitPlatform() was not cleaning up the Win32State when the initialization failed
  • Replaced: VideoCompabilityProfile is replaced by OpenGLCompabilityFlags (Only available with OpenGL)
  • New: Added ClearPlatformErrors()

v0.5.7.4 beta:

  • Changed: Updated code documentation for all functions and types to doxygen/javadoc style
  • Changed: SetFilePosition32 position is now int32_t instead of uint32_t to support negative positions as well
  • Changed: Renamed desiredFormat to deviceFormat in AudioSettings
  • Changed: [DirectSound] Use deviceID as GUID for the audio device
  • New: Introduced AudioDeviceID
  • New: Added deviceID field in AudioSettings
  • New: Added audio::GetAudioDevices()
  • New: Added strings::FormatString()

v0.5.7.3 beta:

  • Fixed: [Win32] Fixed SetWindowFullscreen was not working properly
  • New: Introduced outputRect in VideoBackBuffer + Win32 implementation
  • Changed: SetWindowFullscreen returns bool

v0.5.7.2 beta:

  • Added: Added new audio formats (AudioFormatType::F64, AudioFormatType::S64)

v0.5.7.1 beta:

  • Fixed: xInputSetState renamed to xInputGetState internally
  • Added: Introduced InputSettings
  • Added: [Win32] XInput controller detection is now limited to a fixed frequency, for improving performance (InputSettings.controllerDetectionFrequency)

v0.5.7.0 beta:

  • Changed: Total change of documentation style
  • Changed: [Win32] ThreadMutex uses a critical section instead of a event
  • Changed: [Win32] Include windows.h in the header, so we can define HANDLE, CRITICAL_SECTION in the api
  • Changed: [Win32] Changed lots of functions to use conditions instead of asserts
  • Changed: [Win32] Changed format specifiers to use either d or zu for integer types
  • Changed: All Thread*Wait functions returns if the wait was successful or not in the same way Signal*Wait
  • Changed: All ListFiles* functions uses reference instead of pointer

v0.5.6.0 beta:

  • Changed: We are back to C++/11 and we will never going back to C++/98

v0.5.5.1 beta:

  • New[POSIX]: Implemented fpl::timings
  • New[POSIX]: Implemented fpl::library
  • New[POSIX]: Implemented fpl::threading::ThreadSleep
  • Changed[POSIX]: Moved Linux fpl::console functions to Posix

v0.5.5.0 beta:

  • Changed: All internal handles are now unions now, so can have different sizes of handles
  • Changed: Introduced POSIX platform and moved linux atomics into it

v0.5.4.0 beta:

  • Fixed: Some enum types was not using the namespace version

v0.5.3.0 beta:

  • Changed: Use custom int types because C++/98 has no default types unfortunatly
  • Fixed: Changed compiler detection order, because some non-MSVC compilers define _MSVC
  • Changed: Better C++/11 feature detection for optional nullptr and constexpr

v0.5.2.1 beta:

  • Fixed: Corrected all doxygen statements to match new enum style or added missing exlamation marks.

v0.5.2 beta:

  • Changed: Library is now C++/98 complaint
  • Changed: The actual enum type for "flags" has no "s" at the end anymore.
  • Opimization: Changed some internal functions to "static inline"
  • Changed: Renamed audio::GetAudioNativeFormat to audio::GetAudioHardwareFormat
  • New: Added "periods", "bufferSizeInBytes", "bufferSizeInFrames" to AudioDeviceFormat

v0.5.1 beta:

  • New: audio::GetAudioNativeFormat()
  • New: audio::SetAudioClientReadCallback()
  • Fixed: InitFlags::Audio was never tested before InitAudio() was being called.
  • Changed: Renamed ThreadStop to ThreadDestroy

v0.5.0 beta:

  • Added: [Win32] DirectSound playback support
  • Added: Asyncronous audio playback

v0.4.11 alpha:

  • Fixed: [Win32] For now, load all user32 functions always, even when window is not used (This is to prepare for audio playback)
  • Fixed: [Win32] ThreadStop was not releasing the thread handle
  • Added: [Win32] ThreadWaitForAny
  • Added: [Win32] SignalWaitForAll
  • Added: [Win32] SignalWaitForAny
  • Added: [Win32] SignalReset
  • Added: FPL_NO_VIDEO
  • Changed: ThreadWaitForSingle renamed to ThreadWaitForOne
  • Changed: ThreadWaitForMultiple renamed to ThreadWaitForAll
  • Changed: SignalWait renamed to SignalWaitForOne

v0.4.10 alpha:

  • Removed: Removed all _internal _INTERNAL postfixes from types, functions and macros
  • Changed: Proper identitation for compiler directives based on context
  • Added: [Win32] Dynamically loading ole32 functions (CoCreateInstance, CoInitializeEx, etc.)
  • Fixed: [Win32] GetCursor was not using the dynamic loaded function
  • Fixed: [Win32] Missing Clipboard dynamic functions

v0.4.9 alpha:

  • Removed: Removed all audio code for now
  • Changed: A total cleanup of all internal stuff, so its much easier to add in new features

v0.4.8 alpha:

  • New: AtomicLoadU32, AtomicLoadU64, AtomicLoadS32, AtomicLoadS64, AtomicLoadPtr
  • New: AtomicStoreU32, AtomicStoreU64, AtomicStoreS32, AtomicStoreS64, AtomicStorePtr
  • New: AtomicExchangePtr, AtomicCompareAndExchangePtr, IsAtomicCompareAndExchangePtr
  • New: [Win32] Implementation for AtomicLoadU32, AtomicLoadU64, AtomicLoadS32, AtomicLoadS64, AtomicLoadPtr
  • New: [Win32] Implementation for AtomicStoreU32, AtomicStoreU64, AtomicStoreS32, AtomicStoreS64, AtomicStorePtr
  • New: [Linux] Implementation for AtomicLoadU32, AtomicLoadU64, AtomicLoadS32, AtomicLoadS64, AtomicLoadPtr
  • New: [Linux] Implementation for AtomicStoreU32, AtomicStoreU64, AtomicStoreS32, AtomicStoreS64, AtomicStorePtr
  • New: [Win32] Loading of DirectSound (Prepare for audio output support)
  • Draft: Added first audio output api
  • Fixed: Threading context determination
  • Fixed: [Win32] Fixed all thread implementations
  • Fixed: [Win32] SetWindowLongPtrA does not exists on X86
  • Fixed: [Win32] Missing call convention in SHGetFolderPathA and SHGetFolderPathW
  • Changed: Improved header documentation (More examples, better descriptions, proper markdown syntax, etc.)
  • Changed: All threading functions uses pointer instead of reference
  • Changed: [Linux] Atomic* uses __sync instead of __atomic
  • Changed: A bit of internal cleanup

v0.4.7 alpha:

  • Changed: [Win32] Load all user32 and shell32 functions dynamically
  • Changed: FPL_ENUM_AS_FLAGS_OPERATORS_INTERNAL requires a int type as well
  • Fixed: MemoryAlignedAllocate and MemoryAlignedFree was broken
  • Added: FPL_IS_ALIGNED macro

v0.4.6 alpha:

  • Fixed: [Win32] Crash when window is not set in the InitFlags but FPL_USE_WINDOW is set.

v0.4.5 alpha:

  • Changed: [Win32] Use CommandLineToArgvW for command line parsing

v0.4.4 alpha:

  • New: [Win32] Implemented argument parsing for WinMain and wWinMain
  • Fixed: Corrected small things for doxygen
  • Changed: Renamed CopyAFile to FileCopy
  • Changed: Renamed DeleteAFile to FileDelete

v0.4.3 alpha:

  • New: Introduced IsAtomicCompareAndExchange
  • Added: [Linux] Implemented IsAtomicCompareAndExchange for all 32 and 64 bit integer types
  • Added: [Win32] Implemented IsAtomicCompareAndExchange for all 32 and 64 bit integer types
  • Added: [Win32] Loading gdi32.dll dynamically for ChoosePixelFormat, etc.
  • Added: [Win32] Loading opengl32.dll dynamically for wglGetProcAddress, wglMakeCurrent, etc.
  • Fixed: [Win32] Adding memory fence for AtomicReadWriteFence on non-x64 architectures
  • Fixed: [Win32] Adding memory fence for AtomicReadFence on non-x64 architectures
  • Fixed: [Win32] Adding memory fence for AtomicWriteFence on non-x64 architectures
  • Fixed: Solidified descriptions for all Atomic*Fence
  • Changed: Enabled FPL_FORCE_ASSERTIONS will ensure that C asserts are never used, because it may be compiled out.
  • Changed: Removed all FPL_WIN32_ kernel32 macros and replaced it with normal calls.
  • Changed: [Win32] Changed a lof ot the internals

v0.4.2 alpha:

  • Added: [Linux] Started linux implementation
  • Added: [Linux] Memory allocations
  • Added: [Linux] Atomic operations
  • Added: Check for C++/11 compiler and fail if not supported
  • Added: Nasty vstudio 2015+ workaround to detect C++/11
  • Added: &= operator overloading for enums
  • Changed: AtomicCompareAndExchange argument "comparand" and "exchange" flipped.
  • Changed: constexpr is now fpl_constant to make clear what is a constant
  • Removed: [Win32] CreateDIBSection is not needed for a software backbuffer
  • Fixed: [Win32] Software rendering was not working properly.
  • Fixed: Some AtomicCompareAndExchange signatures was still AtomicAndCompareExchange

v0.4.1 alpha:

  • Cleanup: Internal cleanup
  • Changed: All the settings constructors removed and replaced by a simple inline function.
  • Added: Added native C++ unit test project to demos solution
  • Fixed: FPL_OFFSETOF was not working
  • Fixed: All file size macros like FPL_MEGABYTES was returning invalid results.
  • Removed: FPL_PETABYTES and higher are removed, just because its useless.

v0.4.0 alpha:

  • Changed: All FPL_ENABLE_ defines are internal now, the caller must use FPL_NO_ or FPL_YES_ respectivily.
  • Changed: AtomicCompareExchange* is now AtomicCompareAndExchange*
  • Changed: InitFlags::VideoOpenGL is now InitFlags::Video
  • Added: Software rendering support
  • Added: VideoDriverType enumeration for selecting the active video driver
  • Added: video::GetVideoBackBuffer with [Win32] implementation
  • Added: video::ResizeVideoBackBuffer with [Win32] implementation
  • Added: FPL_PETABYTES macro
  • Added: FPL_EXABYTES macro
  • Added: FPL_ZETTABYTES macro
  • Added: FPL_YOTTABYTES macro
  • Added: FPL_MIN macro
  • Added: FPL_MAX macro
  • Added: MutexCreate with [Win32] implementation
  • Added: MutexDestroy with [Win32] implementation
  • Added: MutexLock with [Win32] implementation
  • Added: MutexUnlock with [Win32] implementation
  • Added: SignalCreate with [Win32] implementation
  • Added: SignalDestroy with [Win32] implementation
  • Added: SignalWait with [Win32] implementation
  • Added: SignalWakeUp with [Win32] implementation
  • Added: GetClipboardAnsiText with [Win32] implementation
  • Added: GetClipboardWideText with [Win32] implementation
  • Added: SetClipboardText with [Win32] implementation for ansi and wide strings
  • Added [MSVC]: AtomicExchangeS32 (Signed integer)
  • Added [MSVC]: AtomicExchangeS64 (Signed integer)
  • Added [MSVC]: AtomicAddS32 (Signed integer)
  • Added [MSVC]: AtomicAddS64 (Signed integer)
  • Added [MSVC]: AtomicCompareExchangeS32 (Signed integer)
  • Added [MSVC]: AtomicCompareExchangeS64 (Signed integer)
  • Fixed [MSVC]: AtomicExchangeU32 was not using unsigned intrinsic
  • Fixed [MSVC]: AtomicExchangeU64 was not using unsigned intrinsic
  • Fixed [MSVC]: AtomicAddU32 was not using unsigned intrinsic
  • Fixed [MSVC]: AtomicAddU64 was not using unsigned intrinsic
  • Fixed [MSVC]: AtomicCompareExchangeU32 was not using unsigned intrinsic
  • Fixed [MSVC]: AtomicCompareExchangeU64 was not using unsigned intrinsic
  • Implemented [Win32]: GetProcessorCoreCount
  • Implemented [Win32]: Main thread infos
  • Performance [Win32]: GetProcessorName (3 loop iterations at max)

v0.3.6 alpha:

  • Cleanup: All win32 functions are macro calls now (prepare for dynamic function loading)
  • Fixed: FPL_ENABLE_WINDOW was enabling window features even when it was deactivated by the caller

v0.3.5 alpha:

  • Renamed: All memory/library/threading functions
  • Removed: FPL_ENABLE_PUSHMEMORY removed entirely

v0.3.4 alpha:

  • Renamed: CopyFile/DeleteFile/All memory functions renamed (Stupid win32!)
  • Renamed: All internal opengl defines renamed, so that it wont conflict with other libraries
  • Fixed: [Win32] strings::All Wide conversions was not working properly
  • Removed: [Win32] Undefs for CopyFile
  • Changed: [Win32/OpenGL] Test for already included gl.h

v0.3.3 alpha:

  • Basic threading creation and handling
  • Fixed strings::All Wide convertions was not working properly

v0.3.2 alpha:

  • Introduced: Automatic namespace inclusion (FPL_AUTO_NAMESPACE)
  • Introduced: Push memory (FPL_ENABLE_PUSHMEMORY)
  • Signature changed for: ExtractFilePath/ChangeFileExtension (source first, destination second)
  • Window features not not compiled out anymore when FPL_ENABLE_WINDOW is 0
  • New overloaded CombinePath without any destination arguments
  • New: AllocateStackMemory function
  • Optional destination arguments for: GetExecutableFilePath/GetHomePath/ChangeFileExtension/CombinePath
  • Fixed strings::CopyAnsiString/CopyWideString was not returning the correct value

v0.3.1 alpha:

  • All types/structs/fields/functions documented
  • [Win32] Fixed legacy opengl (GL_INVALID_OPERATION)

v0.3.0 alpha:

  • Updated documentation a lot
  • [Win32] Support for WGL opengl profile selection

v0.2.6 alpha:

  • Added memory::CopyMemory
  • Added fpl::GetLastError and fpl::GetLastErrorCount for proper error handling
  • Added files::CreateBinaryFile and files::OpenBinaryFile for wide file paths
  • Added basic support for creating a modern opengl rendering context, see VideoCompabilityProfile in VideoSettings
  • Added support for enabling opengl vsync through WGL
  • Returns char * for all paths:: get like functions
  • Returns char/wchar_t * for all strings:: functions
  • Fixed files::CreateBinaryFile was never able to overwrite the file.
  • Fixed include was in some namespaces defined
  • Fixed files::ClearMemory was wrong
  • Replaced all const constants with fpl_constant
  • Removed template code / Replaced it with macros

v0.2.5 alpha:

  • Added CreateDirectories
  • Returns char * for all path get like functions
  • Fixed CreateBinaryFile was never able to overwrite the file.

v.2.4 alpha:

  • Changed to a doxygen + vc complaint documentation style
  • CopyFile2, DeleteFile2 and CloseFile2 are now CopyFile, DeleteFile, CloseFile

v0.2.3 alpha:

  • Support for doxygen in documentations

v0.2.2 alpha:

  • Added XInput support

v0.2.1 alpha:

  • Changed a lot of pointer arguments to reference
  • Added gamepad event structures

v0.2 alpha:

  • Dropped C support and moved to a more C++ ish api
  • Dropped no C-Runtime support

v0.1 alpha:

  • Initial version