Skip to content

Initialization Release

Finalspace edited this page May 29, 2026 · 2 revisions

Table of Contents

Include the Library

In one of your C/C++ translation units include this:

#define FPL_IMPLEMENTATION
#include "final_platform_layer.h"

You can then include this file in any other C/C++ source or header file as you would with any other header file.

Entry Point

Simply provide the typical main entry point:

int main(int argc, char **argv) {
    // code goes here
}

Initialization with default settings

Call fplPlatformInit() (inside the main Entry Point) and provide the desired fplInitFlags and fpl_null as arguments, to initialize FPL with default settings.

int main(int argc, char **argv) {
    // With defaults (Window, Video, Audio)
    (, );

    // Only audio
    (, );

    // Only window and audio
    ( | , );

    return 0;
}

It is recommended to always pass a pointer to a fplSettings structure, but you can leave it as fpl_null as well.

Call fplSetDefaultSettings() with a pointer to your local settings container to initialize the settings container with default values.

Initialization with custom settings

Call fplPlatformInit() (inside the main Entry Point) and provide the desired fplInitFlags and a pointer to fplSettings argument to initialize FPL with custom settings.

// Overwrite settings
 settings;
(&settings);

// or
 settings = ();

// change the settings here

(, &settings);

Releasing the Platform

Call fplPlatformRelease() when you are done. This will release all internal resources.

();

Result/Error checking

There is no guarantee that fplPlatformInit() will always work with the fplSettings you specified, maybe the audio device does not support a sample rate of 1337 kHz or your video card does not support OpenGL version 3.7 - who knows.

Therefore, you should always check the result using fplGetPlatformResult() !

This returns a fplPlatformResultType enum which is fplPlatformResultType_Success when initialization succeeded.

Also, you should release the platform only when initialization was successful!

If something goes wrong the remaining resources are already cleaned up by FPL automatically.

Also, you should use fplGetLastError() to print out the actual error when the initialization fails!

Very bad: (But will work)

(, );

// your code here

();

Bad: (But will work)

if ((, )) {
    // your code here
}
();

Good:

if ((, )) {
    // your code here
    ();
}

Better:

if ((, )) {
    // your code here
    ();
} else {
    const char *errStr = ();
    ("FPL-ERROR: %s\n", errStr);
}

Much better:

if ((, )) {
    // your code here
    ();
} else {
     initResult = ();
    const char *initResultStr = (initResult);
    const char *errStr = ();
    ("FPL-ERROR[%s]: %s\n", initResultStr, errStr);
}

See the Error handling page for more details about error handling.

Tips

After releasing FPL you can call fplPlatformInit() again if needed - for example: Finding the proper audio device, Testing for OpenGL compatibility, etc. may require you to call fplPlatformInit() and fplPlatformRelease() multiple times.

For more details see Getting started

Optionally you can use fplMakeDefaultSettings to create a default filled fplSettings structure, which can be directly used for fplPlatformInit()

If needed you can get the currently used fplSettings configuration by calling fplGetCurrentSettings()

Final Platform Layer

Pages

Topics

Data Structures

Clone this wiki locally