FPL 0.9.3.0 beta

Finalspace
Hi everyone,

finally its here -> The new release of FPL!

So what has changed since the last release? Not that much, i just added a multi-monitor api, added support for using FPL as a dynamic link library, fixed some bugs and updated the documentations a lot.

Delay

I know its not that much, so why took it so long?

There was several reasons for that:
- Changes in real life, resulting in less time to do any private coding
- I am still working on a tool for helping me writing documentations, faster and more reliably

Roadmap

There are a lot of @IMPLEMENT tasks left, which needs to be completed. So my plan for next version is simple:
- Finish up all the @IMPLEMENT tasks
- Finish up the doxygen-editor
- Finish up the documentations

After that, i will add vulkan support and starting the network api.

-------------------------------------------------------------------------------------------

As usual the release is tagged, but documentations will be updated later (due to server issues).

Here is the full changelog:

## v0.9.3.0 beta
- Changed: Renamed fplSetWindowFullscreen to fplSetWindowFullscreenSize
- Changed: Replaced windowWidth and windowHeight from fplWindowSettings with windowSize structure
- Changed: Replaced fullscreenWidth and fullscreenHeight from fplWindowSettings with fullscreenSize structure
- Changed: Renamed macro FPL_PLATFORM_WIN32 to FPL_PLATFORM_WINDOWS
- Changed: Renamed fplGetWindowArea() to fplGetWindowSize()
- Changed: Renamed fplSetWindowArea() to fplSetWindowSize()
- Changed: Renamed fplWindowSettings.windowTitle to fplWindowSettings.title
- Changed: Reversed buffer/max-size argument of fplS32ToString()
- Changed: Renamed fullPath into name in the fplFileEntry structure and limit its size to FPL_MAX_FILENAME_LENGTH
- Changed: Introduced fpl__m_ for internal defines mapped to the public define
- Changed: FPL_ENABLE renamed to FPL__ENABLE
- Changed: FPL_SUPPORT renamed to FPL__SUPPORT
- Changed: [CPP] Export every function without name mangling -> extern "C"
- Changed: [Win32] Moved a bit of entry point code around, so that every linking configuration works
- Fixed: fplPlatformInit() was using the width for the height for the default window size
- Fixed: fplExtractFileExtension() was not favour the last path part
- Fixed [Win32/MSVC]: Workaround for "combaseapi.h(229): error C2187: syntax error: 'identifier' was unexpected here"
- Fixed: [POSIX] Parse version string (isdigit was not found)
- Fixed: [X11] Added missing fpl*Display* stubs
- New: Added fplSetWindowFullscreenRect()
- New: Added fplGetDisplayCount()
- New: Added fplGetDisplays()
- New: Added fplGetWindowDisplay()
- New: Added fplGetPrimaryDisplay()
- New: Added fplGetDisplayFromPosition()
- New: Added fplGetDisplayModeCount()
- New: Added fplGetDisplayModes()
- New: Added fplGetWindowTitle()
- New: Added docs back-references from atomic functions
- New: Added support for compiling FPL as a dynamic library

- Changed: [Win32] fplSetWindowFullscreenSize does not use virtual screen coordinates anymore
- Changed: [Win32/POSIX] Store filename in fplFileEntry instead of the full path
- Fixed: [Win32] fplGetExecutableFilePath was not returning the last written character
- Fixed: [Win32] fplGetHomePath was not returning the last written character
- New: [Win32/X11] Use fplWindowSettings.fullscreenRefreshRate for startup when needed
- New: [Win32] Implemented fplSetWindowFullscreenRect()
- New: [Win32] Implemented fplGetDisplayCount()
- New: [Win32] Implemented fplGetDisplays()
- New: [Win32] Implemented fplGetWindowDisplay()
- New: [Win32] Implemented fplGetPrimaryDisplay()
- New: [Win32] Implemented fplGetDisplayFromPosition()
- New: [Win32] Implemented fplGetDisplayModeCount()
- New: [Win32] Implemented fplGetDisplayModes()

Comments

A month ago I tried to use fpl and the simple opengl example in the header file contains errors. I forgot to report them at the time, so here they are:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#define FPL_IMPLEMENTATION
#include <final_platform_layer.h>

int main(int argc, char **args){
    fplSettings settings;
    fplSetDefaultSettings(&settings);
    /* We are getting a copy of settings.video here, so modification wont be taken into account. */
    fplVideoSettings videoSettings = settings.video;

    videoSettings.driver = fplVideoDriverType_OpenGL;

    /* In the lines below it should be videoSettings.graphics.opengl. ...
       Having a struct name fplVideoSettings with a fied name graphics seems a bit redundant. */

    /* "compatibility" is misspelled "compability" in the field name and flags. */
    // Legacy OpenGL
    // videoSettings.opengl.compabilityFlags = fplOpenGLCompabilityFlags_Legacy;

    // or

    // Modern OpenGL
    videoSettings.opengl.compabilityFlags = fplOpenGLCompabilityFlags_Core;
    videoSettings.opengl.majorVersion = 3;
    videoSettings.opengl.minorVersion = 3;

    if (fplPlatformInit(fplInitFlags_Video, &settings)) {
        // Event/Main loop
        while (fplWindowUpdate()) {
            // Poll events
            fplEvent ev;
            /* We need to take the address of ev here. */
            while (fplPollEvent(ev)) {
                /// ...
            }

            // your code goes here

            fplVideoFlip();
        }
        fplPlatformRelease();
        return 0;
    } else {
        return -1;
    }
}


mrmixer
A month ago I tried to use fpl and the simple opengl example in the header file contains errors. I forgot to report them at the time, so here they are:


Thanks for pointing that out, it seems that this example i never touched since a very long time.
I fixed it in the develop branch ;)

About the graphics structure inside the video settings:

The only reason why there is a graphics structure inside the video settings, is simply to have a union which just corresponce to the specific api (opengl, software, vulkan, etc.). So "graphics" means more like "apisettings" or something. I am open to better terms :)