vgl 1.0.0
Virtual Globe Library: API reference
Loading...
Searching...
No Matches
base.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2026 Jeremiah van Oosten
4 *
5 * vgl base header: export macros, basic types, result codes and version.
6 * See docs/c-api.md for the conventions every declaration follows.
7 */
8#ifndef VGL_BASE_H
9#define VGL_BASE_H
10
11#include <vgl/version.h>
12
13#include <stddef.h>
14#include <stdint.h>
15
16/* Symbol visibility. VGL_SHARED is defined for consumers of a shared build. */
17#if defined(VGL_SHARED)
18# if defined(_WIN32)
19# if defined(VGL_BUILDING)
20# define VGL_API __declspec(dllexport)
21# else
22# define VGL_API __declspec(dllimport)
23# endif
24# else
25# define VGL_API __attribute__((visibility("default")))
26# endif
27#else
28# define VGL_API
29#endif
30
31/* Marks a declaration as deprecated (docs/c-api.md, section 14.4). */
32#if defined(_MSC_VER)
33# define VGL_DEPRECATED(message) __declspec(deprecated(message))
34#elif defined(__GNUC__) || defined(__clang__)
35# define VGL_DEPRECATED(message) __attribute__((deprecated(message)))
36#else
37# define VGL_DEPRECATED(message)
38#endif
39
40/*
41 * Pads a pointer field to 8 bytes on targets with 32-bit pointers. Placed after each pointer
42 * in a structure that also holds 64-bit fields, it gives the structure the same layout, without
43 * implicit padding, on every target (docs/c-api.md, section 8.2).
44 */
45#if UINTPTR_MAX == UINT32_MAX
46# define VGL_POINTER_PADDING(name) uint32_t name;
47#else
48# define VGL_POINTER_PADDING(name)
49#endif
50
51#ifdef __cplusplus
52extern "C" {
53#endif
54
56typedef uint32_t vgl_bool;
57
58#define VGL_FALSE 0u
59#define VGL_TRUE 1u
60
62typedef struct vgl_dvec2
63{
64 double x;
65 double y;
66} vgl_dvec2;
67
68typedef struct vgl_dvec3
69{
70 double x;
71 double y;
72 double z;
73} vgl_dvec3;
74
75typedef struct vgl_dvec4
76{
77 double x;
78 double y;
79 double z;
80 double w;
81} vgl_dvec4;
82
87typedef struct vgl_dmat4
88{
89 double m[16];
90} vgl_dmat4;
91
130
132#define VGL_SUCCEEDED(result) ((result) >= 0)
134#define VGL_FAILED(result) ((result) < 0)
135
150VGL_API vgl_result vgl_result_name_get(vgl_result result, const char** out_name);
151
166VGL_API vgl_result vgl_version_get(uint32_t* out_major, uint32_t* out_minor, uint32_t* out_patch);
167
168#ifdef __cplusplus
169}
170#endif
171
172#endif /* VGL_BASE_H */
vgl_result
Definition base.h:98
@ VGL_RESULT_IO_ERROR
Definition base.h:117
@ VGL_RESULT_SUCCESS
Definition base.h:100
@ VGL_RESULT_VERSION_MISMATCH
Definition base.h:121
@ VGL_RESULT_CORRUPT_DATA
Definition base.h:119
@ VGL_RESULT_MAX_ENUM
Definition base.h:128
@ VGL_RESULT_OUT_OF_MEMORY
Definition base.h:109
@ VGL_RESULT_NOT_READY
Definition base.h:105
@ VGL_RESULT_NOT_FOUND
Definition base.h:115
@ VGL_RESULT_INVALID_OPERATION
Definition base.h:113
@ VGL_RESULT_INVALID_ARGUMENT
Definition base.h:107
@ VGL_RESULT_CANCELLED
Definition base.h:123
@ VGL_RESULT_INTERNAL_ERROR
Definition base.h:127
@ VGL_RESULT_NOT_SUPPORTED
Definition base.h:111
@ VGL_RESULT_INCOMPLETE
Definition base.h:102
@ VGL_RESULT_BACKEND_ERROR
Definition base.h:125
vgl_result vgl_version_get(uint32_t *out_major, uint32_t *out_minor, uint32_t *out_patch)
#define VGL_API
Definition base.h:28
uint32_t vgl_bool
Definition base.h:56
vgl_result vgl_result_name_get(vgl_result result, const char **out_name)
Definition base.h:88
double m[16]
Definition base.h:89
Definition base.h:63
double y
Definition base.h:65
double x
Definition base.h:64
Definition base.h:69
double x
Definition base.h:70
double y
Definition base.h:71
double z
Definition base.h:72
Definition base.h:76
double y
Definition base.h:78
double x
Definition base.h:77
double w
Definition base.h:80
double z
Definition base.h:79