raymath.h: Use C99 inline semantics

RAYMATH_EXTERN_INLINE was renamed to RAYMATH_HEADER_ONLY, which user code
may define if they want to use it as header-only library. If multiple
files in the same project define RAYMATH_HEADER_ONLY, they might each
have duplicate out-of-line definitions of the same functions.

By default, raymath.h exposes inline definitions, which instructs the
compiler _not_ to generate out-of-line definitons, if out-of-line
definitions are required, those of the file defined with
RAYLIB_IMPLEMENTATION are used instead. There may be only one such file.

In C++ mode, the compiler will select only one out-of-line definition
automatically, so no need to define a RAYLIB_IMPLEMENTATION.

Unfortunately, we have to remove raymath function declaration from
raylib.h as those declarations would lead to duplicate out-of-line
definitions which would yield linker errors. This problem didn't
exist with GNU89 or C++, because there multiple defintions are ok,
but in C99 they aren't.
This commit is contained in:
Ahmad Fatoum
2018-02-22 02:05:00 +01:00
parent e4d7bbec1e
commit 6ffc8cb799
4 changed files with 30 additions and 141 deletions

View File

@@ -338,14 +338,6 @@ typedef struct Matrix {
float m3, m7, m11, m15;
} Matrix;
typedef struct Float3 {
float f[3];
} Float3;
typedef struct Float16 {
float f[16];
} Float16;
// Color type, RGBA (32bit)
typedef struct Color {
unsigned char r;
@@ -750,19 +742,6 @@ RLAPI Vector3 ColorToHSV(Color color); // Returns HSV
RLAPI Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value
RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
// Math useful functions (available from raymath.h)
RLAPI Vector3 Vector3Zero(void); // Vector with components value 0.0f
RLAPI Vector3 Vector3One(void); // Vector with components value 1.0f
RLAPI Matrix MatrixIdentity(void); // Returns identity matrix
#ifndef Vector3ToFloat
#define Vector3ToFloat(vec) (Vector3ToFloat_(vec).f) // Returns Vector3 as float array
RLAPI Float3 Vector3ToFloat_(Vector3 vec); // don't use, use above
#endif
#ifndef MatrixToFloat
#define MatrixToFloat(mat) (MatrixToFloat_(mat).f) // Returns Matrix as float array
RLAPI Float16 MatrixToFloat_(Matrix mat); // don't use, use above
#endif
// Misc. functions
RLAPI void ShowLogo(void); // Activate raylib logo at startup (can be done with flags)
RLAPI void SetConfigFlags(unsigned char flags); // Setup window configuration flags (view FLAGS)