vgl 1.0.0
Virtual Globe Library: API reference
Loading...
Searching...
No Matches
render.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2026 Jeremiah van Oosten
4 *
5 * The render interface (docs/render-interface.md): the contract between the core and whatever
6 * draws the globe. Each frame, on the render thread, a backend or host takes the resources to
7 * destroy and create, and the list of tiles to draw; the core never calls into it.
8 */
9#ifndef VGL_RENDER_H
10#define VGL_RENDER_H
11
12#include <vgl/base.h>
13#include <vgl/context.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19/* ---------------------------------------------------------------------------------------- */
20/* Data formats (sections 6 and 7) */
21/* ---------------------------------------------------------------------------------------- */
22
27#define VGL_TERRAIN_VERTEX_SIZE 24
29#define VGL_TERRAIN_VERTEX_POSITION_OFFSET 0
31#define VGL_TERRAIN_VERTEX_HEIGHT_OFFSET 12
33#define VGL_TERRAIN_VERTEX_UV_OFFSET 16
35#define VGL_TERRAIN_VERTEX_NORMAL_OFFSET 20
36
42#define VGL_TERRAIN_SAMPLE_SIZE 8
44#define VGL_TERRAIN_SAMPLE_HEIGHT_OFFSET 0
46#define VGL_TERRAIN_SAMPLE_NORMAL_OFFSET 4
47
52typedef struct vgl_star
53{
56 float direction[3];
58 float magnitude;
60 float color[3];
61 float reserved;
62} vgl_star;
63
74
92 const vgl_texture_format* formats,
93 uint32_t format_count);
94
95/* ---------------------------------------------------------------------------------------- */
96/* Depth conventions (section 8) */
97/* ---------------------------------------------------------------------------------------- */
98
124
126#define VGL_LOGARITHMIC_DEPTH_FAR_DEFAULT 1.0e8
127
128/* ---------------------------------------------------------------------------------------- */
129/* Resources (section 4) */
130/* ---------------------------------------------------------------------------------------- */
131
132typedef struct vgl_tile_id
133{
134 uint32_t level;
135 uint32_t x;
136 uint32_t y;
137 uint32_t reserved;
139
142{
143 uint64_t resource;
145 const void* indices;
146 VGL_POINTER_PADDING(indices_padding)
147 uint32_t index_count;
149 uint32_t index_size;
151
153typedef struct vgl_mesh_data
154{
155 uint64_t resource;
157 uint64_t index_list;
159 const void* vertices;
160 VGL_POINTER_PADDING(vertices_padding)
161 uint32_t vertex_count;
162 uint32_t vertex_size;
165 vgl_dvec3 centre;
166 double min_height;
167 double max_height;
170 const void* samples;
171 VGL_POINTER_PADDING(samples_padding)
172 uint32_t sample_grid;
173 uint32_t sample_size;
175
177typedef struct vgl_texture_data
178{
179 uint64_t resource;
181 uint32_t width;
182 uint32_t height;
183 uint32_t mip_count;
185 const void* const* mip_data;
186 VGL_POINTER_PADDING(mip_data_padding)
187 const size_t* mip_sizes;
188 VGL_POINTER_PADDING(mip_sizes_padding)
190
191/* ---------------------------------------------------------------------------------------- */
192/* Frames (sections 3 and 5) */
193/* ---------------------------------------------------------------------------------------- */
194
195typedef struct vgl_frame vgl_frame;
196
198typedef struct vgl_draw_layer
199{
200 uint64_t texture;
205 float uv_scale_offset[4];
206 float opacity;
207 uint32_t reserved;
209
211typedef struct vgl_draw_item
212{
214 uint64_t mesh;
216 uint64_t mesh_handle;
217 uint64_t index_list;
219 uint32_t index_count;
221 uint32_t index_size;
223 uint32_t first_layer;
224 uint32_t layer_count;
227 float model_view[16];
238 float geoid_heights[4];
240 uint32_t reserved;
242
267
288 const vgl_frame_begin_info* info,
289 vgl_frame** out_frame);
290
306 const uint64_t** out_resources,
307 uint32_t* out_count);
308
324 const vgl_index_list_data** out_index_lists,
325 uint32_t* out_count);
326
342 const vgl_mesh_data** out_meshes,
343 uint32_t* out_count);
344
360 const vgl_texture_data** out_textures,
361 uint32_t* out_count);
362
380 const vgl_draw_item** out_items,
381 uint32_t* out_count);
382
399 const vgl_draw_layer** out_layers,
400 uint32_t* out_count);
401
419 uint64_t resource,
420 uint64_t handle);
421
438 uint64_t resource,
439 vgl_result reason);
440
453
470
471/* ---------------------------------------------------------------------------------------- */
472/* What backends draw */
473/* ---------------------------------------------------------------------------------------- */
474
480typedef uint32_t vgl_draw_features;
481
511
516typedef uint32_t vgl_debug_views;
517
535
537#define VGL_UPLOAD_BUDGET_DEFAULT (16ull * 1024 * 1024)
539#define VGL_CONTOUR_INTERVAL_DEFAULT 500.0
542#define VGL_CLOUD_HEIGHT_DEFAULT 6000.0
544#define VGL_STAR_COUNT_MAX 400000u
546#define VGL_CLOUD_IMAGE_SIZE_MIN 2u
547#define VGL_CLOUD_IMAGE_WIDTH_MAX 16384u
548#define VGL_CLOUD_IMAGE_HEIGHT_MAX 8192u
549
550#ifdef __cplusplus
551}
552#endif
553
554#endif /* VGL_RENDER_H */
vgl_result
Definition base.h:98
#define VGL_API
Definition base.h:28
uint32_t vgl_bool
Definition base.h:56
#define VGL_POINTER_PADDING(name)
Definition base.h:46
struct vgl_context vgl_context
Definition context.h:23
vgl_debug_view
Definition render.h:519
@ VGL_DEBUG_VIEW_HEIGHT_COLORS
Definition render.h:532
@ VGL_DEBUG_VIEW_IMAGERY_SOURCE
Definition render.h:529
@ VGL_DEBUG_VIEW_MAX_ENUM
Definition render.h:533
@ VGL_DEBUG_VIEW_WIREFRAME
Definition render.h:524
@ VGL_DEBUG_VIEW_LEVEL_COLORS
Definition render.h:526
vgl_result vgl_frame_destroys_get(const vgl_frame *frame, const uint64_t **out_resources, uint32_t *out_count)
vgl_result vgl_frame_draw_list_get(const vgl_frame *frame, const vgl_draw_item **out_items, uint32_t *out_count)
vgl_result vgl_frame_end(vgl_frame *frame)
uint32_t vgl_draw_features
Definition render.h:480
vgl_result vgl_frame_meshes_get(const vgl_frame *frame, const vgl_mesh_data **out_meshes, uint32_t *out_count)
vgl_result vgl_context_resources_reset(vgl_context *context)
struct vgl_frame vgl_frame
Definition render.h:195
vgl_result vgl_frame_resource_handle_set(vgl_frame *frame, uint64_t resource, uint64_t handle)
vgl_texture_format
Definition render.h:65
@ VGL_TEXTURE_FORMAT_MAX_ENUM
Definition render.h:72
@ VGL_TEXTURE_FORMAT_RGBA8_SRGB
Definition render.h:67
@ VGL_TEXTURE_FORMAT_ETC2_RGB8
Definition render.h:70
@ VGL_TEXTURE_FORMAT_BC7
Definition render.h:69
@ VGL_TEXTURE_FORMAT_RGBA8
Definition render.h:66
@ VGL_TEXTURE_FORMAT_ASTC_4X4
Definition render.h:71
@ VGL_TEXTURE_FORMAT_BC1
Definition render.h:68
vgl_result vgl_frame_index_lists_get(const vgl_frame *frame, const vgl_index_list_data **out_index_lists, uint32_t *out_count)
vgl_result vgl_frame_textures_get(const vgl_frame *frame, const vgl_texture_data **out_textures, uint32_t *out_count)
vgl_depth_convention
Definition render.h:105
@ VGL_DEPTH_CONVENTION_LOGARITHMIC
Definition render.h:112
@ VGL_DEPTH_CONVENTION_CONVENTIONAL
Definition render.h:121
@ VGL_DEPTH_CONVENTION_REVERSED_Z
Definition render.h:118
@ VGL_DEPTH_CONVENTION_MAX_ENUM
Definition render.h:122
vgl_result vgl_context_texture_formats_set(vgl_context *context, const vgl_texture_format *formats, uint32_t format_count)
uint32_t vgl_debug_views
Definition render.h:516
vgl_result vgl_frame_resource_failed(vgl_frame *frame, uint64_t resource, vgl_result reason)
vgl_result vgl_frame_draw_layers_get(const vgl_frame *frame, const vgl_draw_layer **out_layers, uint32_t *out_count)
vgl_result vgl_context_frame_begin(vgl_context *context, const vgl_frame_begin_info *info, vgl_frame **out_frame)
vgl_draw_feature
Definition render.h:483
@ VGL_DRAW_FEATURE_STARS
Definition render.h:499
@ VGL_DRAW_FEATURE_CLOUDS
Definition render.h:504
@ VGL_DRAW_FEATURE_ATMOSPHERE
Definition render.h:494
@ VGL_DRAW_FEATURE_MAX_ENUM
Definition render.h:509
@ VGL_DRAW_FEATURE_SEA_SURFACE
Definition render.h:487
@ VGL_DRAW_FEATURE_CONTOURS
Definition render.h:508
Definition base.h:88
Definition render.h:212
uint32_t reserved
Definition render.h:240
vgl_bool has_geoid
Definition render.h:239
uint32_t index_size
Definition render.h:221
uint32_t first_layer
Definition render.h:223
uint64_t index_list_handle
Definition render.h:218
vgl_tile_id tile
Definition render.h:213
uint64_t index_list
Definition render.h:217
double max_height
Definition render.h:231
uint32_t layer_count
Definition render.h:224
uint32_t index_count
Definition render.h:219
uint64_t mesh_handle
Definition render.h:216
vgl_dvec3 centre
Definition render.h:229
double min_height
Definition render.h:230
uint64_t mesh
Definition render.h:214
Definition render.h:199
uint64_t texture_handle
Definition render.h:202
float opacity
Definition render.h:206
uint64_t texture
Definition render.h:200
uint32_t reserved
Definition render.h:207
Definition base.h:69
Definition render.h:245
uint32_t index_list_data_size
Definition render.h:256
uint32_t struct_size
Definition render.h:246
uint64_t upload_budget
Definition render.h:261
uint32_t draw_layer_size
Definition render.h:255
uint32_t mesh_data_size
Definition render.h:257
uint32_t draw_item_size
Definition render.h:254
uint32_t texture_data_size
Definition render.h:258
const vgl_dmat4 * view_matrix
Definition render.h:264
Definition render.h:142
const void * indices
Definition render.h:145
uint32_t index_count
Definition render.h:147
uint32_t index_size
Definition render.h:149
uint64_t resource
Definition render.h:143
Definition render.h:154
uint64_t index_list
Definition render.h:157
const void * vertices
Definition render.h:159
uint64_t resource
Definition render.h:155
Definition render.h:53
float color[3]
Definition render.h:60
float reserved
Definition render.h:61
float magnitude
Definition render.h:58
float direction[3]
Definition render.h:56
Definition render.h:178
uint64_t resource
Definition render.h:179
vgl_texture_format format
Definition render.h:180
const void *const * mip_data
Definition render.h:185
uint32_t height
Definition render.h:182
uint32_t mip_count
Definition render.h:183
uint32_t width
Definition render.h:181
Definition render.h:133
uint32_t y
Definition render.h:136
uint32_t reserved
Definition render.h:137
uint32_t x
Definition render.h:135
uint32_t level
Definition render.h:134