SBgl 0.1.0
A graphics framework in C99
Loading...
Searching...
No Matches
sbgl_types.h
Go to the documentation of this file.
1#ifndef SBGL_TYPES_H
2#define SBGL_TYPES_H
3
4#include <stdbool.h>
5
6#include <stdint.h>
7
8#define SBGL_INVALID_HANDLE 0
9#define SBGL_INVALID_OFFSET ((uint32_t)-1)
10
11#include "sbgl_math.h"
12
23
28typedef struct {
29 int16_t position[4];
30 uint32_t color;
31 uint32_t _padding;
33
37typedef uint32_t sbgl_Buffer;
38
42typedef uint32_t sbgl_Shader;
43
47typedef uint32_t sbgl_Pipeline;
48
52typedef uint32_t sbgl_ComputePipeline;
53
57typedef uint64_t sbgl_SortKey;
58
59#define SBGL_PACKET_MESH_MASK 0x7FF
60#define SBGL_PACKET_MAT_MASK 0x7FF
61#define SBGL_PACKET_BLEND_MASK 0x3
62#define SBGL_PACKET_SIDED_MASK 0x1
63#define SBGL_PACKET_TAGS_MASK 0x7F
64
65#define SBGL_PACKET_MAT_SHIFT 11
66#define SBGL_PACKET_BLEND_SHIFT 22
67#define SBGL_PACKET_SIDED_SHIFT 24
68#define SBGL_PACKET_TAGS_SHIFT 25
69
70/* Voxel instance layout:
71 Word 0: 18 bits VoxelID, 8 bits Y-Scale, 6 bits MaterialID
72 Word 1: 16 bits AO (8 corners * 2 bits), 16 bits Reserved */
73#define SBGL_VOXEL_ID_MASK 0x3FFFF
74#define SBGL_VOXEL_SCALE_MASK 0xFF
75#define SBGL_VOXEL_SCALE_SHIFT 18
76#define SBGL_VOXEL_MAT_MASK 0x3F
77#define SBGL_VOXEL_MAT_SHIFT 26
78
79#define SBGL_PACK_VOXEL_INSTANCE(id, scale, mat) \
80 (((id) & SBGL_VOXEL_ID_MASK) | (((scale) & SBGL_VOXEL_SCALE_MASK) << SBGL_VOXEL_SCALE_SHIFT) | (((mat) & SBGL_VOXEL_MAT_MASK) << SBGL_VOXEL_MAT_SHIFT))
81
82#define SBGL_PACK_HEADER(mesh, mat, blend, sided, tags) \
83 (((mesh) & SBGL_PACKET_MESH_MASK) | \
84 (((mat) & SBGL_PACKET_MAT_MASK) << SBGL_PACKET_MAT_SHIFT) | \
85 (((blend) & SBGL_PACKET_BLEND_MASK) << SBGL_PACKET_BLEND_SHIFT) | \
86 (((sided) & SBGL_PACKET_SIDED_MASK) << SBGL_PACKET_SIDED_SHIFT) | \
87 (((tags) & SBGL_PACKET_TAGS_MASK) << SBGL_PACKET_TAGS_SHIFT))
88
89#define SBGL_GET_MESH_ID(h) ((h) & SBGL_PACKET_MESH_MASK)
90#define SBGL_GET_MAT_ID(h) (((h) >> SBGL_PACKET_MAT_SHIFT) & SBGL_PACKET_MAT_MASK)
91#define SBGL_GET_BLEND_MODE(h) (((h) >> SBGL_PACKET_BLEND_SHIFT) & SBGL_PACKET_BLEND_MASK)
92
97typedef struct {
99 uint32_t header;
100 uint32_t _padding;
102
107
111typedef struct {
112 uint32_t indexCount;
113 uint32_t instanceCount;
114 uint32_t firstIndex;
115 int32_t vertexOffset;
116 uint32_t firstInstance;
118
129
138
150
162
166typedef struct {
167 uint32_t location;
168 uint32_t offset;
171
175typedef struct {
179 uint32_t draw_calls;
180 uint32_t instance_count;
182
186typedef struct {
187 uint32_t stride;
191
200
210
229
239
246
259
288
296typedef struct {
297 uint32_t maxBuffers;
298 uint32_t maxShaders;
299 uint32_t maxPipelines;
301
315
328#define sbgl_DefaultInitConfig ((sbgl_InitConfig){ \
329 .windowWidth = 800, \
330 .windowHeight = 600, \
331 .windowTitle = "SBgl Application", \
332 .limits = { .maxBuffers = 1024, .maxShaders = 256, .maxPipelines = 256 }, \
333 .enableValidation = true \
334})
335
343
345
346#endif // SBGL_TYPES_H
Single-header math library for SBgl.
sbgl_BlendMode
Blending modes for pipeline color attachments.
Definition sbgl_types.h:195
@ SBGL_BLEND_MODE_ADDITIVE
Definition sbgl_types.h:198
@ SBGL_BLEND_MODE_ALPHA
Definition sbgl_types.h:197
@ SBGL_BLEND_MODE_NONE
Definition sbgl_types.h:196
sbgl_platform_Result
Result codes for platform layer operations.
Definition sbgl_types.h:233
@ SBGL_PLATFORM_SUCCESS
Definition sbgl_types.h:234
@ SBGL_PLATFORM_ERROR_INIT_FAILED
Definition sbgl_types.h:237
@ SBGL_PLATFORM_ERROR_NO_DISPLAY
Definition sbgl_types.h:236
@ SBGL_PLATFORM_ERROR_WINDOW_FAILED
Definition sbgl_types.h:235
struct sbgl_Context sbgl_Context
Engine context.
sbgl_BufferUsage
Buffer usage flags.
Definition sbgl_types.h:122
@ SBGL_BUFFER_USAGE_INDEX
Definition sbgl_types.h:124
@ SBGL_BUFFER_USAGE_INDIRECT
Definition sbgl_types.h:126
@ SBGL_BUFFER_USAGE_TRANSFER_DST
Definition sbgl_types.h:127
@ SBGL_BUFFER_USAGE_STORAGE
Definition sbgl_types.h:125
@ SBGL_BUFFER_USAGE_VERTEX
Definition sbgl_types.h:123
sbgl_Result
Result codes for engine operations.
Definition sbgl_types.h:214
@ SBGL_ERROR_INITIALIZATION_FAILED
Definition sbgl_types.h:218
@ SBGL_ERROR_DEVICE_BUSY
Definition sbgl_types.h:222
@ SBGL_ERROR_OUT_OF_MEMORY
Definition sbgl_types.h:221
@ SBGL_ERROR_PLATFORM_FAILED
Definition sbgl_types.h:227
@ SBGL_ERROR_SWAPCHAIN_FAILED
Definition sbgl_types.h:224
@ SBGL_ERROR_PIPELINE_FAILED
Definition sbgl_types.h:226
@ SBGL_SUCCESS
Definition sbgl_types.h:215
@ SBGL_ERROR_WINDOW_CREATION_FAILED
Definition sbgl_types.h:219
@ SBGL_ERROR_GRAPHICS_FAILED
Definition sbgl_types.h:220
@ SBGL_ERROR_SHADER_FAILED
Definition sbgl_types.h:225
@ SBGL_ERROR_INVALID_HANDLE
Definition sbgl_types.h:223
@ SBGL_ERROR_INVALID_ARGUMENT
Definition sbgl_types.h:217
@ SBGL_ERROR_NULL_CONTEXT
Definition sbgl_types.h:216
sbgl_Format
Data formats for vertex attributes.
Definition sbgl_types.h:154
@ SBGL_FORMAT_R8G8B8A8_UNORM
Definition sbgl_types.h:160
@ SBGL_FORMAT_R32G32_SFLOAT
Definition sbgl_types.h:156
@ SBGL_FORMAT_R16G16B16A16_SNORM
Definition sbgl_types.h:159
@ SBGL_FORMAT_R32G32B32_SFLOAT
Definition sbgl_types.h:157
@ SBGL_FORMAT_R32G32B32A32_SFLOAT
Definition sbgl_types.h:158
@ SBGL_FORMAT_R32_SFLOAT
Definition sbgl_types.h:155
sbgl_BarrierType
Memory barrier types for compute synchronization.
Definition sbgl_types.h:142
@ SBGL_BARRIER_COMPUTE_TO_INDIRECT
Definition sbgl_types.h:144
@ SBGL_BARRIER_GRAPHICS_TO_COMPUTE
Definition sbgl_types.h:146
@ SBGL_BARRIER_COMPUTE_TO_COMPUTE
Definition sbgl_types.h:143
@ SBGL_BARRIER_HOST_TO_GRAPHICS
Definition sbgl_types.h:148
@ SBGL_BARRIER_HOST_TO_COMPUTE
Definition sbgl_types.h:147
@ SBGL_BARRIER_COMPUTE_TO_GRAPHICS
Definition sbgl_types.h:145
uint32_t sbgl_Buffer
Handle for a GPU-side buffer.
Definition sbgl_types.h:37
uint32_t sbgl_Shader
Handle for a shader module.
Definition sbgl_types.h:42
uint64_t sbgl_SortKey
Bit-packed key used for sorting draw commands to minimize state changes.
Definition sbgl_types.h:57
sbgl_ShaderStage
Shader stage flags.
Definition sbgl_types.h:133
@ SBGL_SHADER_STAGE_COMPUTE
Definition sbgl_types.h:136
@ SBGL_SHADER_STAGE_FRAGMENT
Definition sbgl_types.h:135
@ SBGL_SHADER_STAGE_VERTEX
Definition sbgl_types.h:134
uint32_t sbgl_ComputePipeline
Handle for a compute pipeline.
Definition sbgl_types.h:52
uint32_t sbgl_Pipeline
Handle for a graphics pipeline.
Definition sbgl_types.h:47
sbgl_BackendType
Backend types supported by the engine.
Definition sbgl_types.h:243
@ SBGL_BACKEND_VULKAN
Definition sbgl_types.h:244
Engine context.
Definition sbgl_types.h:268
void * inner
Opaque pointer to the internal engine state.
Definition sbgl_types.h:278
sbgl_Result result
Status of the last major operation.
Definition sbgl_types.h:286
Encapsulates all data required to submit a single draw call. Optimized for cache density (16 bytes).
Definition sbgl_types.h:97
uint32_t _padding
Definition sbgl_types.h:100
sbgl_SortKey key
Definition sbgl_types.h:98
uint32_t header
Definition sbgl_types.h:99
Detailed error information for debugging.
Definition sbgl_types.h:253
uint32_t extension
Definition sbgl_types.h:257
sbgl_BackendType type
Definition sbgl_types.h:254
sbgl_Result coreResult
Definition sbgl_types.h:255
Standard Vulkan Indirect Draw command layout.
Definition sbgl_types.h:111
Configuration for engine initialization.
Definition sbgl_types.h:308
uint32_t windowWidth
Definition sbgl_types.h:309
sbgl_ResourceLimits limits
Definition sbgl_types.h:312
const char * windowTitle
Definition sbgl_types.h:311
uint32_t windowHeight
Definition sbgl_types.h:310
Result structure for initialization.
Definition sbgl_types.h:339
sbgl_Context * ctx
Definition sbgl_types.h:340
sbgl_Result error
Definition sbgl_types.h:341
Per-instance data for automated batching.
Definition sbgl_types.h:19
sbgl_Mat4 transform
Definition sbgl_types.h:20
sbgl_Vec4 color
Definition sbgl_types.h:21
4x4 Matrix, 16-byte aligned, column-major.
Definition sbgl_math.h:83
Configuration for creating a graphics pipeline.
Definition sbgl_types.h:204
sbgl_Shader fragmentShader
Definition sbgl_types.h:206
sbgl_Shader vertexShader
Definition sbgl_types.h:205
sbgl_BlendMode blendMode
Definition sbgl_types.h:208
sbgl_VertexLayout vertexLayout
Definition sbgl_types.h:207
Internal storage for draw packets awaiting submission.
Definition sbgl_core.c:25
Resource limits for engine initialization.
Definition sbgl_types.h:296
Performance telemetry data for a single frame.
Definition sbgl_types.h:175
float gpu_render_time
Definition sbgl_types.h:178
float cpu_sort_time
Definition sbgl_types.h:177
uint32_t draw_calls
Definition sbgl_types.h:179
uint32_t instance_count
Definition sbgl_types.h:180
float cpu_frame_time
Definition sbgl_types.h:176
Vertex attribute definition.
Definition sbgl_types.h:166
Vertex input layout definition.
Definition sbgl_types.h:186
const sbgl_VertexAttribute * attributes
Definition sbgl_types.h:189
uint32_t attributeCount
Definition sbgl_types.h:188
Standard vertex structure for basic geometry rendering. Optimized for cache density (16 bytes).
Definition sbgl_types.h:28
uint32_t color
Definition sbgl_types.h:30
uint32_t _padding
Definition sbgl_types.h:31
Native X11 window state.
4D Vector, 16-byte aligned.
Definition sbgl_math.h:61