summaryrefslogtreecommitdiffstatsci
path: root/src/recording
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2024-10-27 20:03:31 +0000
committerj-p <jp_bruyere@hotmail.com>2025-03-24 19:12:00 +0100
commit15ecf40ff47bfbdedddd3161b7d6d9d1418e64bb (patch)
tree49001433bd5b102118593642bf1a749494e7ea54 /src/recording
parent7b2f17b8d8f3763d974c52bfbe9a429779aa6f7b (diff)
clang format
Diffstat (limited to 'src/recording')
-rw-r--r--src/recording/vkvg_record.c81
-rw-r--r--src/recording/vkvg_record_internal.c804
-rw-r--r--src/recording/vkvg_record_internal.h180
3 files changed, 526 insertions, 539 deletions
diff --git a/src/recording/vkvg_record.c b/src/recording/vkvg_record.c
index a70ee18..9184b5f 100644
--- a/src/recording/vkvg_record.c
+++ b/src/recording/vkvg_record.c
@@ -25,53 +25,52 @@
#include "vkvg_record_internal.h"
#ifdef VKVG_RECORDING
-void vkvg_start_recording (VkvgContext ctx) {
- if (ctx->status)
- return;
- _start_recording(ctx);
+void vkvg_start_recording(VkvgContext ctx) {
+ if (ctx->status)
+ return;
+ _start_recording(ctx);
}
-VkvgRecording vkvg_stop_recording (VkvgContext ctx) {
- if (ctx->status)
- return NULL;
- return _stop_recording (ctx);
+VkvgRecording vkvg_stop_recording(VkvgContext ctx) {
+ if (ctx->status)
+ return NULL;
+ return _stop_recording(ctx);
}
-uint32_t vkvg_recording_get_count (VkvgRecording rec) {
- if (!rec)
- return 0;
- return rec->commandsCount;
+uint32_t vkvg_recording_get_count(VkvgRecording rec) {
+ if (!rec)
+ return 0;
+ return rec->commandsCount;
}
-void* vkvg_recording_get_data (VkvgRecording rec) {
- if (!rec)
- return 0;
- return rec->buffer;
+void *vkvg_recording_get_data(VkvgRecording rec) {
+ if (!rec)
+ return 0;
+ return rec->buffer;
}
-void vkvg_recording_get_command (VkvgRecording rec, uint32_t cmdIndex, uint32_t* cmd, void** dataOffset) {
- if (!rec)
- return;
- if (cmdIndex < rec->commandsCount) {
- *cmd = rec->commands[cmdIndex].cmd;
- *dataOffset = (void*)rec->commands[cmdIndex].dataOffset;
- } else {
- *cmd = 0;
- *dataOffset = NULL;
- }
-
+void vkvg_recording_get_command(VkvgRecording rec, uint32_t cmdIndex, uint32_t *cmd, void **dataOffset) {
+ if (!rec)
+ return;
+ if (cmdIndex < rec->commandsCount) {
+ *cmd = rec->commands[cmdIndex].cmd;
+ *dataOffset = (void *)rec->commands[cmdIndex].dataOffset;
+ } else {
+ *cmd = 0;
+ *dataOffset = NULL;
+ }
}
-void vkvg_replay (VkvgContext ctx, VkvgRecording rec) {
- if (!rec)
- return;
- for (uint32_t i=0; i<rec->commandsCount; i++)
- _replay_command(ctx, rec, i);
+void vkvg_replay(VkvgContext ctx, VkvgRecording rec) {
+ if (!rec)
+ return;
+ for (uint32_t i = 0; i < rec->commandsCount; i++)
+ _replay_command(ctx, rec, i);
}
-void vkvg_replay_command (VkvgContext ctx, VkvgRecording rec, uint32_t cmdIndex) {
- if (!rec)
- return;
- if (cmdIndex < rec->commandsCount)
- _replay_command(ctx, rec, cmdIndex);
+void vkvg_replay_command(VkvgContext ctx, VkvgRecording rec, uint32_t cmdIndex) {
+ if (!rec)
+ return;
+ if (cmdIndex < rec->commandsCount)
+ _replay_command(ctx, rec, cmdIndex);
}
-void vkvg_recording_destroy (VkvgRecording rec) {
- if (!rec)
- return;
- _destroy_recording(rec);
+void vkvg_recording_destroy(VkvgRecording rec) {
+ if (!rec)
+ return;
+ _destroy_recording(rec);
}
#endif
diff --git a/src/recording/vkvg_record_internal.c b/src/recording/vkvg_record_internal.c
index 29c91c9..e30363c 100644
--- a/src/recording/vkvg_record_internal.c
+++ b/src/recording/vkvg_record_internal.c
@@ -24,429 +24,419 @@
#include "vkvg_record_internal.h"
#include "vkvg_context_internal.h"
-#define VKVG_RECORDING_INIT_BUFFER_SIZE_TRESHOLD 64
-#define VKVG_RECORDING_INIT_BUFFER_SIZE 1024
-#define VKVG_RECORDING_INIT_COMMANDS_COUNT 64
+#define VKVG_RECORDING_INIT_BUFFER_SIZE_TRESHOLD 64
+#define VKVG_RECORDING_INIT_BUFFER_SIZE 1024
+#define VKVG_RECORDING_INIT_COMMANDS_COUNT 64
-vkvg_recording_t* _new_recording () {
+vkvg_recording_t *_new_recording() {
- vkvg_recording_t* rec = (vkvg_recording_t*)calloc(1,sizeof (vkvg_recording_t));
+ vkvg_recording_t *rec = (vkvg_recording_t *)calloc(1, sizeof(vkvg_recording_t));
- rec->commandsReservedCount = VKVG_RECORDING_INIT_COMMANDS_COUNT;
- rec->bufferReservedSize = VKVG_RECORDING_INIT_BUFFER_SIZE;
- rec->commands = (vkvg_record_t*)malloc(rec->commandsReservedCount * sizeof (vkvg_record_t));
- rec->buffer = malloc (rec->bufferReservedSize);
+ rec->commandsReservedCount = VKVG_RECORDING_INIT_COMMANDS_COUNT;
+ rec->bufferReservedSize = VKVG_RECORDING_INIT_BUFFER_SIZE;
+ rec->commands = (vkvg_record_t *)malloc(rec->commandsReservedCount * sizeof(vkvg_record_t));
+ rec->buffer = malloc(rec->bufferReservedSize);
- return rec;
+ return rec;
}
-void _destroy_recording (vkvg_recording_t* rec) {
- if (!rec)
- return;
- for (uint32_t i=0; i<rec->commandsCount; i++) {
- if (rec->commands[i].cmd == VKVG_CMD_SET_SOURCE)
- vkvg_pattern_destroy((VkvgPattern)(rec->buffer + rec->commands[i].dataOffset));
- else if (rec->commands[i].cmd == VKVG_CMD_SET_SOURCE_SURFACE)
- vkvg_surface_destroy ((VkvgSurface)(rec->buffer + rec->commands[i].dataOffset + 2 * sizeof(float)));
- }
- free(rec->commands);
- free(rec->buffer);
- free(rec);
+void _destroy_recording(vkvg_recording_t *rec) {
+ if (!rec)
+ return;
+ for (uint32_t i = 0; i < rec->commandsCount; i++) {
+ if (rec->commands[i].cmd == VKVG_CMD_SET_SOURCE)
+ vkvg_pattern_destroy((VkvgPattern)(rec->buffer + rec->commands[i].dataOffset));
+ else if (rec->commands[i].cmd == VKVG_CMD_SET_SOURCE_SURFACE)
+ vkvg_surface_destroy((VkvgSurface)(rec->buffer + rec->commands[i].dataOffset + 2 * sizeof(float)));
+ }
+ free(rec->commands);
+ free(rec->buffer);
+ free(rec);
}
-void _start_recording (VkvgContext ctx) {
- if (ctx->recording)
- _destroy_recording(ctx->recording);
- ctx->recording = _new_recording();
+void _start_recording(VkvgContext ctx) {
+ if (ctx->recording)
+ _destroy_recording(ctx->recording);
+ ctx->recording = _new_recording();
}
-vkvg_recording_t* _stop_recording (VkvgContext ctx) {
- vkvg_recording_t* rec = ctx->recording;
- if (!rec)
- return NULL;
- if (!rec->commandsCount) {
- _destroy_recording(rec);
- ctx->recording = NULL;
- return NULL;
- }
- /*rec->buffer = realloc(rec->buffer, rec->bufferSize);
- rec->commands = (vkvg_record_t*)realloc(rec->commands, rec->commandsCount * sizeof (vkvg_record_t));*/
- ctx->recording = NULL;
- return rec;
+vkvg_recording_t *_stop_recording(VkvgContext ctx) {
+ vkvg_recording_t *rec = ctx->recording;
+ if (!rec)
+ return NULL;
+ if (!rec->commandsCount) {
+ _destroy_recording(rec);
+ ctx->recording = NULL;
+ return NULL;
+ }
+ /*rec->buffer = realloc(rec->buffer, rec->bufferSize);
+ rec->commands = (vkvg_record_t*)realloc(rec->commands, rec->commandsCount * sizeof (vkvg_record_t));*/
+ ctx->recording = NULL;
+ return rec;
}
-void* _ensure_recording_buffer (vkvg_recording_t* rec, size_t size) {
- if (rec->bufferReservedSize >= rec->bufferSize - VKVG_RECORDING_INIT_BUFFER_SIZE_TRESHOLD - size) {
- rec->bufferReservedSize += VKVG_RECORDING_INIT_BUFFER_SIZE;
- rec->buffer = realloc(rec->buffer, rec->bufferReservedSize);
- }
- return rec->buffer + rec->bufferSize;
+void *_ensure_recording_buffer(vkvg_recording_t *rec, size_t size) {
+ if (rec->bufferReservedSize >= rec->bufferSize - VKVG_RECORDING_INIT_BUFFER_SIZE_TRESHOLD - size) {
+ rec->bufferReservedSize += VKVG_RECORDING_INIT_BUFFER_SIZE;
+ rec->buffer = realloc(rec->buffer, rec->bufferReservedSize);
+ }
+ return rec->buffer + rec->bufferSize;
}
-void* _advance_recording_buffer_unchecked (vkvg_recording_t* rec, size_t size) {
- rec->bufferSize += size;
- return rec->buffer + rec->bufferSize;
+void *_advance_recording_buffer_unchecked(vkvg_recording_t *rec, size_t size) {
+ rec->bufferSize += size;
+ return rec->buffer + rec->bufferSize;
}
-#define STORE_FLOATS(floatcount) \
- for (i=0; i<floatcount; i++) { \
- buff = _ensure_recording_buffer (rec, sizeof(float)); \
- *(float*)buff = (float)va_arg(args, double); \
- buff = _advance_recording_buffer_unchecked (rec, sizeof(float));\
- }
-#define STORE_BOOLS(count) \
- for (i=0; i<count; i++) { \
- buff = _ensure_recording_buffer (rec, sizeof(bool)); \
- *(bool*)buff = (bool)va_arg(args, int); \
- _advance_recording_buffer_unchecked (rec, sizeof(bool)); \
- }
-#define STORE_UINT32(count) \
- for (i=0; i<count; i++) { \
- buff = _ensure_recording_buffer (rec, sizeof(uint32_t)); \
- *(uint32_t*)buff = (uint32_t)va_arg(args, uint32_t); \
- buff = _advance_recording_buffer_unchecked (rec, sizeof(uint32_t)); \
- }
+#define STORE_FLOATS(floatcount) \
+ for (i = 0; i < floatcount; i++) { \
+ buff = _ensure_recording_buffer(rec, sizeof(float)); \
+ *(float *)buff = (float)va_arg(args, double); \
+ buff = _advance_recording_buffer_unchecked(rec, sizeof(float)); \
+ }
+#define STORE_BOOLS(count) \
+ for (i = 0; i < count; i++) { \
+ buff = _ensure_recording_buffer(rec, sizeof(bool)); \
+ *(bool *)buff = (bool)va_arg(args, int); \
+ _advance_recording_buffer_unchecked(rec, sizeof(bool)); \
+ }
+#define STORE_UINT32(count) \
+ for (i = 0; i < count; i++) { \
+ buff = _ensure_recording_buffer(rec, sizeof(uint32_t)); \
+ *(uint32_t *)buff = (uint32_t)va_arg(args, uint32_t); \
+ buff = _advance_recording_buffer_unchecked(rec, sizeof(uint32_t)); \
+ }
-void _record (vkvg_recording_t* rec,...) {
- va_list args;
- va_start(args, rec);
+void _record(vkvg_recording_t *rec, ...) {
+ va_list args;
+ va_start(args, rec);
- uint32_t cmd = va_arg(args, uint32_t);
+ uint32_t cmd = va_arg(args, uint32_t);
- if (rec->commandsCount == rec->commandsReservedCount) {
- rec->commandsReservedCount += VKVG_RECORDING_INIT_COMMANDS_COUNT;
- rec->commands = (vkvg_record_t*)realloc(rec->commands, rec->commandsReservedCount * sizeof (vkvg_record_t));
- }
- vkvg_record_t* r = &rec->commands[rec->commandsCount++];
- r->cmd = cmd;
- r->dataOffset = rec->bufferSize;
+ if (rec->commandsCount == rec->commandsReservedCount) {
+ rec->commandsReservedCount += VKVG_RECORDING_INIT_COMMANDS_COUNT;
+ rec->commands = (vkvg_record_t *)realloc(rec->commands, rec->commandsReservedCount * sizeof(vkvg_record_t));
+ }
+ vkvg_record_t *r = &rec->commands[rec->commandsCount++];
+ r->cmd = cmd;
+ r->dataOffset = rec->bufferSize;
- char* buff;
- int i = 0;
+ char *buff;
+ int i = 0;
- if (cmd & VKVG_CMD_PATH_COMMANDS) {
- if ((cmd & VKVG_CMD_PATHPROPS_COMMANDS) == VKVG_CMD_PATHPROPS_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_SET_LINE_WIDTH:
- case VKVG_CMD_SET_MITER_LIMIT:
- STORE_FLOATS(1);
- break;
- case VKVG_CMD_SET_LINE_JOIN:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SET_LINE_CAP:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SET_OPERATOR:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SET_FILL_RULE:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SET_DASH:
- break;
- }
- } else {
- switch (cmd) {
- case VKVG_CMD_MOVE_TO:
- case VKVG_CMD_LINE_TO:
- case VKVG_CMD_REL_MOVE_TO:
- case VKVG_CMD_REL_LINE_TO:
- STORE_FLOATS(2);
- break;
- case VKVG_CMD_RECTANGLE:
- case VKVG_CMD_QUADRATIC_TO:
- case VKVG_CMD_REL_QUADRATIC_TO:
- STORE_FLOATS(4);
- break;
- case VKVG_CMD_ARC:
- case VKVG_CMD_ARC_NEG:
- STORE_FLOATS(5);
- break;
- case VKVG_CMD_CURVE_TO:
- case VKVG_CMD_REL_CURVE_TO:
- STORE_FLOATS(6);
- break;
- case VKVG_CMD_ELLIPTICAL_ARC_TO:
- case VKVG_CMD_REL_ELLIPTICAL_ARC_TO:
- STORE_FLOATS(5);
- STORE_BOOLS(2);
- break;
- case VKVG_CMD_NEW_PATH:
- case VKVG_CMD_NEW_SUB_PATH:
- case VKVG_CMD_CLOSE_PATH:
- break;
- }
- }
- } else if (!(r->cmd & VKVG_CMD_DRAW_COMMANDS)) {
- if (r->cmd & VKVG_CMD_TRANSFORM_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_TRANSLATE:
- case VKVG_CMD_SCALE:
- STORE_FLOATS(2);
- break;
- case VKVG_CMD_ROTATE:
- STORE_FLOATS(1);
- break;
- case VKVG_CMD_IDENTITY_MATRIX:
- break;
- case VKVG_CMD_SET_MATRIX:
- case VKVG_CMD_TRANSFORM:
- {
- buff = _ensure_recording_buffer (rec, sizeof(vkvg_matrix_t));
- vkvg_matrix_t* mat = (vkvg_matrix_t*)va_arg(args, vkvg_matrix_t*);
- memcpy(buff, mat, sizeof(vkvg_matrix_t));
- buff = _advance_recording_buffer_unchecked (rec, sizeof(vkvg_matrix_t));
+ if (cmd & VKVG_CMD_PATH_COMMANDS) {
+ if ((cmd & VKVG_CMD_PATHPROPS_COMMANDS) == VKVG_CMD_PATHPROPS_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_SET_LINE_WIDTH:
+ case VKVG_CMD_SET_MITER_LIMIT:
+ STORE_FLOATS(1);
+ break;
+ case VKVG_CMD_SET_LINE_JOIN:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SET_LINE_CAP:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SET_OPERATOR:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SET_FILL_RULE:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SET_DASH:
+ break;
+ }
+ } else {
+ switch (cmd) {
+ case VKVG_CMD_MOVE_TO:
+ case VKVG_CMD_LINE_TO:
+ case VKVG_CMD_REL_MOVE_TO:
+ case VKVG_CMD_REL_LINE_TO:
+ STORE_FLOATS(2);
+ break;
+ case VKVG_CMD_RECTANGLE:
+ case VKVG_CMD_QUADRATIC_TO:
+ case VKVG_CMD_REL_QUADRATIC_TO:
+ STORE_FLOATS(4);
+ break;
+ case VKVG_CMD_ARC:
+ case VKVG_CMD_ARC_NEG:
+ STORE_FLOATS(5);
+ break;
+ case VKVG_CMD_CURVE_TO:
+ case VKVG_CMD_REL_CURVE_TO:
+ STORE_FLOATS(6);
+ break;
+ case VKVG_CMD_ELLIPTICAL_ARC_TO:
+ case VKVG_CMD_REL_ELLIPTICAL_ARC_TO:
+ STORE_FLOATS(5);
+ STORE_BOOLS(2);
+ break;
+ case VKVG_CMD_NEW_PATH:
+ case VKVG_CMD_NEW_SUB_PATH:
+ case VKVG_CMD_CLOSE_PATH:
+ break;
+ }
+ }
+ } else if (!(r->cmd & VKVG_CMD_DRAW_COMMANDS)) {
+ if (r->cmd & VKVG_CMD_TRANSFORM_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_TRANSLATE:
+ case VKVG_CMD_SCALE:
+ STORE_FLOATS(2);
+ break;
+ case VKVG_CMD_ROTATE:
+ STORE_FLOATS(1);
+ break;
+ case VKVG_CMD_IDENTITY_MATRIX:
+ break;
+ case VKVG_CMD_SET_MATRIX:
+ case VKVG_CMD_TRANSFORM: {
+ buff = _ensure_recording_buffer(rec, sizeof(vkvg_matrix_t));
+ vkvg_matrix_t *mat = (vkvg_matrix_t *)va_arg(args, vkvg_matrix_t *);
+ memcpy(buff, mat, sizeof(vkvg_matrix_t));
+ buff = _advance_recording_buffer_unchecked(rec, sizeof(vkvg_matrix_t));
- }
- break;
- }
- } else if (r->cmd & VKVG_CMD_PATTERN_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_SET_SOURCE_RGBA:
- STORE_FLOATS(4);
- break;
- case VKVG_CMD_SET_SOURCE_RGB:
- STORE_FLOATS(3);
- break;
- case VKVG_CMD_SET_SOURCE_COLOR:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SET_SOURCE:
- {
- buff = _ensure_recording_buffer (rec, sizeof(VkvgPattern));
- VkvgPattern pat = (VkvgPattern)va_arg(args, VkvgPattern);
- vkvg_pattern_reference(pat);
- VkvgPattern* pPat = (VkvgPattern*)buff;
- *pPat = pat;
- _advance_recording_buffer_unchecked (rec, sizeof(VkvgPattern));
- }
- break;
- case VKVG_CMD_SET_SOURCE_SURFACE:
- STORE_FLOATS(2);
- {
- buff = _ensure_recording_buffer (rec, sizeof(VkvgSurface));
- VkvgSurface surf = (VkvgSurface)va_arg(args, VkvgSurface);
- vkvg_surface_reference(surf);
- *(VkvgSurface*)buff = surf;
- _advance_recording_buffer_unchecked (rec, sizeof(VkvgSurface));
- }
- break;
- }
- } else if (r->cmd & VKVG_CMD_TEXT_COMMANDS) {
- char* txt;
- int txtLen;
- switch (r->cmd) {
- case VKVG_CMD_SET_FONT_SIZE:
- STORE_UINT32(1);
- break;
- case VKVG_CMD_SHOW_TEXT:
- case VKVG_CMD_SET_FONT_FACE:
- txt = (char*)va_arg(args, char*);
- txtLen = strlen(txt);
- buff = _ensure_recording_buffer (rec, txtLen * sizeof(char));
- strcpy(buff, txt);
- _advance_recording_buffer_unchecked (rec, txtLen * sizeof(char));
- break;
- case VKVG_CMD_SET_FONT_PATH:
- break;
- }
- }
- }
- va_end(args);
+ } break;
+ }
+ } else if (r->cmd & VKVG_CMD_PATTERN_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_SET_SOURCE_RGBA:
+ STORE_FLOATS(4);
+ break;
+ case VKVG_CMD_SET_SOURCE_RGB:
+ STORE_FLOATS(3);
+ break;
+ case VKVG_CMD_SET_SOURCE_COLOR:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SET_SOURCE: {
+ buff = _ensure_recording_buffer(rec, sizeof(VkvgPattern));
+ VkvgPattern pat = (VkvgPattern)va_arg(args, VkvgPattern);
+ vkvg_pattern_reference(pat);
+ VkvgPattern *pPat = (VkvgPattern *)buff;
+ *pPat = pat;
+ _advance_recording_buffer_unchecked(rec, sizeof(VkvgPattern));
+ } break;
+ case VKVG_CMD_SET_SOURCE_SURFACE:
+ STORE_FLOATS(2);
+ {
+ buff = _ensure_recording_buffer(rec, sizeof(VkvgSurface));
+ VkvgSurface surf = (VkvgSurface)va_arg(args, VkvgSurface);
+ vkvg_surface_reference(surf);
+ *(VkvgSurface *)buff = surf;
+ _advance_recording_buffer_unchecked(rec, sizeof(VkvgSurface));
+ }
+ break;
+ }
+ } else if (r->cmd & VKVG_CMD_TEXT_COMMANDS) {
+ char *txt;
+ int txtLen;
+ switch (r->cmd) {
+ case VKVG_CMD_SET_FONT_SIZE:
+ STORE_UINT32(1);
+ break;
+ case VKVG_CMD_SHOW_TEXT:
+ case VKVG_CMD_SET_FONT_FACE:
+ txt = (char *)va_arg(args, char *);
+ txtLen = strlen(txt);
+ buff = _ensure_recording_buffer(rec, txtLen * sizeof(char));
+ strcpy(buff, txt);
+ _advance_recording_buffer_unchecked(rec, txtLen * sizeof(char));
+ break;
+ case VKVG_CMD_SET_FONT_PATH:
+ break;
+ }
+ }
+ }
+ va_end(args);
}
-void _replay_command (VkvgContext ctx, VkvgRecording rec, uint32_t index) {
- vkvg_record_t* r = &rec->commands[index];
- float* floats = (float*)(rec->buffer + r->dataOffset);
- uint32_t* uints = (uint32_t*)floats;
- if (r->cmd&VKVG_CMD_PATH_COMMANDS) {
- if ((r->cmd&VKVG_CMD_RELATIVE_COMMANDS)==VKVG_CMD_RELATIVE_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_REL_MOVE_TO:
- vkvg_rel_move_to(ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_REL_LINE_TO:
- vkvg_rel_line_to(ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_REL_CURVE_TO:
- vkvg_rel_curve_to (ctx, floats[0], floats[1], floats[2], floats[3], floats[4], floats[5]);
- return;
- case VKVG_CMD_REL_QUADRATIC_TO:
- vkvg_rel_quadratic_to (ctx, floats[0], floats[1], floats[2], floats[3]);
- return;
- case VKVG_CMD_REL_ELLIPTICAL_ARC_TO:
- {
- bool* flags = (bool*)&floats[5];
- vkvg_rel_elliptic_arc_to (ctx, floats[0], floats[1], flags[0], flags[1], floats[2], floats[3], floats[4]);
- }
- return;
- }
- }else if ((r->cmd&VKVG_CMD_PATHPROPS_COMMANDS)==VKVG_CMD_PATHPROPS_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_SET_LINE_WIDTH:
- vkvg_set_line_width (ctx, floats[0]);
- return;
- case VKVG_CMD_SET_MITER_LIMIT:
- vkvg_set_miter_limit (ctx, floats[0]);
- return;
- case VKVG_CMD_SET_LINE_JOIN:
- vkvg_set_line_join (ctx, (vkvg_line_join_t)uints[0]);
- return;
- case VKVG_CMD_SET_LINE_CAP:
- vkvg_set_line_cap (ctx, (vkvg_line_cap_t)uints[0]);
- return;
- case VKVG_CMD_SET_OPERATOR:
- vkvg_set_operator (ctx, (vkvg_operator_t)uints[0]);
- return;
- case VKVG_CMD_SET_FILL_RULE:
- vkvg_set_fill_rule (ctx, (vkvg_fill_rule_t)uints[0]);
- return;
- case VKVG_CMD_SET_DASH:
- vkvg_set_dash(ctx, &floats[2], uints[0], floats[1]);
- return;
- }
- } else {
- switch (r->cmd) {
- case VKVG_CMD_NEW_PATH:
- vkvg_new_path (ctx);
- return;
- case VKVG_CMD_NEW_SUB_PATH:
- vkvg_new_sub_path (ctx);
- return;
- case VKVG_CMD_CLOSE_PATH:
- vkvg_close_path (ctx);
- return;
- case VKVG_CMD_RECTANGLE:
- vkvg_rectangle (ctx, floats[0], floats[1], floats[2], floats[3]);
- return;
- case VKVG_CMD_ARC:
- vkvg_arc (ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
- return;
- case VKVG_CMD_ARC_NEG:
- vkvg_arc (ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
- return;
- /*case VKVG_CMD_ELLIPSE:
- vkvg_ellipse (ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
- break;*/
- case VKVG_CMD_MOVE_TO:
- vkvg_move_to(ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_LINE_TO:
- vkvg_line_to(ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_CURVE_TO:
- vkvg_curve_to (ctx, floats[0], floats[1], floats[2], floats[3], floats[4], floats[5]);
- return;
- case VKVG_CMD_ELLIPTICAL_ARC_TO:
- {
- bool* flags = (bool*)&floats[5];
- vkvg_elliptic_arc_to (ctx, floats[0], floats[1], flags[0], flags[1], floats[2], floats[3], floats[4]);
- }
- return;
- case VKVG_CMD_QUADRATIC_TO:
- vkvg_quadratic_to (ctx, floats[0], floats[1], floats[2], floats[3]);
- return;
- }
- }
- } else if (r->cmd & VKVG_CMD_DRAW_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_PAINT:
- vkvg_paint (ctx);
- return;
- case VKVG_CMD_FILL:
- vkvg_fill (ctx);
- return;
- case VKVG_CMD_STROKE:
- vkvg_stroke (ctx);
- return;
- case VKVG_CMD_CLIP:
- vkvg_clip (ctx);
- return;
- case VKVG_CMD_CLEAR:
- vkvg_clear (ctx);
- return;
- case VKVG_CMD_FILL_PRESERVE:
- vkvg_fill_preserve (ctx);
- return;
- case VKVG_CMD_STROKE_PRESERVE:
- vkvg_stroke_preserve (ctx);
- return;
- case VKVG_CMD_CLIP_PRESERVE:
- vkvg_clip_preserve (ctx);
- return;
- }
- } else if (r->cmd & VKVG_CMD_TRANSFORM_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_TRANSLATE:
- vkvg_translate (ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_SCALE:
- vkvg_scale (ctx, floats[0], floats[1]);
- return;
- case VKVG_CMD_ROTATE:
- vkvg_rotate (ctx, floats[0]);
- return;
- case VKVG_CMD_IDENTITY_MATRIX:
- vkvg_identity_matrix (ctx);
- return;
- case VKVG_CMD_TRANSFORM:
- {
- vkvg_matrix_t* mat = (vkvg_matrix_t*)&floats[0];
- vkvg_transform (ctx, mat);
- }
- return;
- case VKVG_CMD_SET_MATRIX:
- {
- vkvg_matrix_t* mat = (vkvg_matrix_t*)&floats[0];
- vkvg_set_matrix (ctx, mat);
- }
- return;
- }
- } else if (r->cmd & VKVG_CMD_PATTERN_COMMANDS) {
- switch (r->cmd) {
- case VKVG_CMD_SET_SOURCE_RGB:
- vkvg_set_source_rgb (ctx, floats[0], floats[1], floats[2]);
- return;
- case VKVG_CMD_SET_SOURCE_RGBA:
- vkvg_set_source_rgba (ctx, floats[0], floats[1], floats[2], floats[3]);
- return;
- case VKVG_CMD_SET_SOURCE_COLOR:
- vkvg_set_source_color (ctx, uints[0]);
- return;
- case VKVG_CMD_SET_SOURCE:
- {
- VkvgPattern pat = *((VkvgPattern*)(rec->buffer + r->dataOffset));
- vkvg_set_source (ctx, pat);
- }
- return;
- case VKVG_CMD_SET_SOURCE_SURFACE:
- {
- VkvgSurface surf = *((VkvgSurface*)&floats[2]);
- vkvg_set_source_surface (ctx, surf, floats[0], floats[1]);
- }
- return;
- }
- } else if (r->cmd & VKVG_CMD_TEXT_COMMANDS) {
- char* txt = (char*)floats;
- switch (r->cmd) {
- case VKVG_CMD_SET_FONT_SIZE:
- vkvg_set_font_size (ctx, uints[0]);
- return;
- case VKVG_CMD_SET_FONT_FACE:
- vkvg_select_font_face (ctx, txt);
- return;
- /*case VKVG_CMD_SET_FONT_PATH:
- vkvg_load_font_from_path (ctx, txt);
- return; */
- case VKVG_CMD_SHOW_TEXT:
- vkvg_show_text (ctx, txt);
- return;
- }
- } else {
- switch (r->cmd) {
- case VKVG_CMD_SAVE:
- vkvg_save (ctx);
- return;
- case VKVG_CMD_RESTORE:
- vkvg_restore (ctx);
- return;
- }
- }
- LOG(VKVG_LOG_ERR, "[REPLAY] unimplemented command: %.4x\n", r->cmd);
+void _replay_command(VkvgContext ctx, VkvgRecording rec, uint32_t index) {
+ vkvg_record_t *r = &rec->commands[index];
+ float *floats = (float *)(rec->buffer + r->dataOffset);
+ uint32_t *uints = (uint32_t *)floats;
+ if (r->cmd & VKVG_CMD_PATH_COMMANDS) {
+ if ((r->cmd & VKVG_CMD_RELATIVE_COMMANDS) == VKVG_CMD_RELATIVE_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_REL_MOVE_TO:
+ vkvg_rel_move_to(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_REL_LINE_TO:
+ vkvg_rel_line_to(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_REL_CURVE_TO:
+ vkvg_rel_curve_to(ctx, floats[0], floats[1], floats[2], floats[3], floats[4], floats[5]);
+ return;
+ case VKVG_CMD_REL_QUADRATIC_TO:
+ vkvg_rel_quadratic_to(ctx, floats[0], floats[1], floats[2], floats[3]);
+ return;
+ case VKVG_CMD_REL_ELLIPTICAL_ARC_TO: {
+ bool *flags = (bool *)&floats[5];
+ vkvg_rel_elliptic_arc_to(ctx, floats[0], floats[1], flags[0], flags[1], floats[2], floats[3],
+ floats[4]);
+ }
+ return;
+ }
+ } else if ((r->cmd & VKVG_CMD_PATHPROPS_COMMANDS) == VKVG_CMD_PATHPROPS_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_SET_LINE_WIDTH:
+ vkvg_set_line_width(ctx, floats[0]);
+ return;
+ case VKVG_CMD_SET_MITER_LIMIT:
+ vkvg_set_miter_limit(ctx, floats[0]);
+ return;
+ case VKVG_CMD_SET_LINE_JOIN:
+ vkvg_set_line_join(ctx, (vkvg_line_join_t)uints[0]);
+ return;
+ case VKVG_CMD_SET_LINE_CAP:
+ vkvg_set_line_cap(ctx, (vkvg_line_cap_t)uints[0]);
+ return;
+ case VKVG_CMD_SET_OPERATOR:
+ vkvg_set_operator(ctx, (vkvg_operator_t)uints[0]);
+ return;
+ case VKVG_CMD_SET_FILL_RULE:
+ vkvg_set_fill_rule(ctx, (vkvg_fill_rule_t)uints[0]);
+ return;
+ case VKVG_CMD_SET_DASH:
+ vkvg_set_dash(ctx, &floats[2], uints[0], floats[1]);
+ return;
+ }
+ } else {
+ switch (r->cmd) {
+ case VKVG_CMD_NEW_PATH:
+ vkvg_new_path(ctx);
+ return;
+ case VKVG_CMD_NEW_SUB_PATH:
+ vkvg_new_sub_path(ctx);
+ return;
+ case VKVG_CMD_CLOSE_PATH:
+ vkvg_close_path(ctx);
+ return;
+ case VKVG_CMD_RECTANGLE:
+ vkvg_rectangle(ctx, floats[0], floats[1], floats[2], floats[3]);
+ return;
+ case VKVG_CMD_ARC:
+ vkvg_arc(ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
+ return;
+ case VKVG_CMD_ARC_NEG:
+ vkvg_arc(ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
+ return;
+ /*case VKVG_CMD_ELLIPSE:
+ vkvg_ellipse (ctx, floats[0], floats[1], floats[2], floats[3], floats[4]);
+ break;*/
+ case VKVG_CMD_MOVE_TO:
+ vkvg_move_to(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_LINE_TO:
+ vkvg_line_to(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_CURVE_TO:
+ vkvg_curve_to(ctx, floats[0], floats[1], floats[2], floats[3], floats[4], floats[5]);
+ return;
+ case VKVG_CMD_ELLIPTICAL_ARC_TO: {
+ bool *flags = (bool *)&floats[5];
+ vkvg_elliptic_arc_to(ctx, floats[0], floats[1], flags[0], flags[1], floats[2], floats[3], floats[4]);
+ }
+ return;
+ case VKVG_CMD_QUADRATIC_TO:
+ vkvg_quadratic_to(ctx, floats[0], floats[1], floats[2], floats[3]);
+ return;
+ }
+ }
+ } else if (r->cmd & VKVG_CMD_DRAW_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_PAINT:
+ vkvg_paint(ctx);
+ return;
+ case VKVG_CMD_FILL:
+ vkvg_fill(ctx);
+ return;
+ case VKVG_CMD_STROKE:
+ vkvg_stroke(ctx);
+ return;
+ case VKVG_CMD_CLIP:
+ vkvg_clip(ctx);
+ return;
+ case VKVG_CMD_CLEAR:
+ vkvg_clear(ctx);
+ return;
+ case VKVG_CMD_FILL_PRESERVE:
+ vkvg_fill_preserve(ctx);
+ return;
+ case VKVG_CMD_STROKE_PRESERVE:
+ vkvg_stroke_preserve(ctx);
+ return;
+ case VKVG_CMD_CLIP_PRESERVE:
+ vkvg_clip_preserve(ctx);
+ return;
+ }
+ } else if (r->cmd & VKVG_CMD_TRANSFORM_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_TRANSLATE:
+ vkvg_translate(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_SCALE:
+ vkvg_scale(ctx, floats[0], floats[1]);
+ return;
+ case VKVG_CMD_ROTATE:
+ vkvg_rotate(ctx, floats[0]);
+ return;
+ case VKVG_CMD_IDENTITY_MATRIX:
+ vkvg_identity_matrix(ctx);
+ return;
+ case VKVG_CMD_TRANSFORM: {
+ vkvg_matrix_t *mat = (vkvg_matrix_t *)&floats[0];
+ vkvg_transform(ctx, mat);
+ }
+ return;
+ case VKVG_CMD_SET_MATRIX: {
+ vkvg_matrix_t *mat = (vkvg_matrix_t *)&floats[0];
+ vkvg_set_matrix(ctx, mat);
+ }
+ return;
+ }
+ } else if (r->cmd & VKVG_CMD_PATTERN_COMMANDS) {
+ switch (r->cmd) {
+ case VKVG_CMD_SET_SOURCE_RGB:
+ vkvg_set_source_rgb(ctx, floats[0], floats[1], floats[2]);
+ return;
+ case VKVG_CMD_SET_SOURCE_RGBA:
+ vkvg_set_source_rgba(ctx, floats[0], floats[1], floats[2], floats[3]);
+ return;
+ case VKVG_CMD_SET_SOURCE_COLOR:
+ vkvg_set_source_color(ctx, uints[0]);
+ return;
+ case VKVG_CMD_SET_SOURCE: {
+ VkvgPattern pat = *((VkvgPattern *)(rec->buffer + r->dataOffset));
+ vkvg_set_source(ctx, pat);
+ }
+ return;
+ case VKVG_CMD_SET_SOURCE_SURFACE: {
+ VkvgSurface surf = *((VkvgSurface *)&floats[2]);
+ vkvg_set_source_surface(ctx, surf, floats[0], floats[1]);
+ }
+ return;
+ }
+ } else if (r->cmd & VKVG_CMD_TEXT_COMMANDS) {
+ char *txt = (char *)floats;
+ switch (r->cmd) {
+ case VKVG_CMD_SET_FONT_SIZE:
+ vkvg_set_font_size(ctx, uints[0]);
+ return;
+ case VKVG_CMD_SET_FONT_FACE:
+ vkvg_select_font_face(ctx, txt);
+ return;
+ /*case VKVG_CMD_SET_FONT_PATH:
+ vkvg_load_font_from_path (ctx, txt);
+ return; */
+ case VKVG_CMD_SHOW_TEXT:
+ vkvg_show_text(ctx, txt);
+ return;
+ }
+ } else {
+ switch (r->cmd) {
+ case VKVG_CMD_SAVE:
+ vkvg_save(ctx);
+ return;
+ case VKVG_CMD_RESTORE:
+ vkvg_restore(ctx);
+ return;
+ }
+ }
+ LOG(VKVG_LOG_ERR, "[REPLAY] unimplemented command: %.4x\n", r->cmd);
}
-
diff --git a/src/recording/vkvg_record_internal.h b/src/recording/vkvg_record_internal.h
index c18801a..fcc905f 100644
--- a/src/recording/vkvg_record_internal.h
+++ b/src/recording/vkvg_record_internal.h
@@ -25,110 +25,108 @@
#include "vkvg.h"
#include "vkvg_internal.h"
-#define VKVG_CMD_SAVE 0x0001
-#define VKVG_CMD_RESTORE 0x0002
+#define VKVG_CMD_SAVE 0x0001
+#define VKVG_CMD_RESTORE 0x0002
-#define VKVG_CMD_PATH_COMMANDS 0x0100
-#define VKVG_CMD_DRAW_COMMANDS 0x0200
-#define VKVG_CMD_RELATIVE_COMMANDS (0x0400|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_PATHPROPS_COMMANDS (0x1000|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_PRESERVE_COMMANDS (0x0400|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_PATTERN_COMMANDS 0x0800
-#define VKVG_CMD_TRANSFORM_COMMANDS 0x2000
-#define VKVG_CMD_TEXT_COMMANDS 0x4000
+#define VKVG_CMD_PATH_COMMANDS 0x0100
+#define VKVG_CMD_DRAW_COMMANDS 0x0200
+#define VKVG_CMD_RELATIVE_COMMANDS (0x0400 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_PATHPROPS_COMMANDS (0x1000 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_PRESERVE_COMMANDS (0x0400 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_PATTERN_COMMANDS 0x0800
+#define VKVG_CMD_TRANSFORM_COMMANDS 0x2000
+#define VKVG_CMD_TEXT_COMMANDS 0x4000
-#define VKVG_CMD_NEW_PATH (0x0001|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_NEW_SUB_PATH (0x0002|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_CLOSE_PATH (0x0003|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_MOVE_TO (0x0004|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_LINE_TO (0x0005|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_RECTANGLE (0x0006|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_ARC (0x0007|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_ARC_NEG (0x0008|VKVG_CMD_PATH_COMMANDS)
-//#define VKVG_CMD_ELLIPSE (0x0009|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_CURVE_TO (0x000A|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_QUADRATIC_TO (0x000B|VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_ELLIPTICAL_ARC_TO (0x000C|VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_NEW_PATH (0x0001 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_NEW_SUB_PATH (0x0002 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_CLOSE_PATH (0x0003 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_MOVE_TO (0x0004 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_LINE_TO (0x0005 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_RECTANGLE (0x0006 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_ARC (0x0007 | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_ARC_NEG (0x0008 | VKVG_CMD_PATH_COMMANDS)
+// #define VKVG_CMD_ELLIPSE (0x0009|VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_CURVE_TO (0x000A | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_QUADRATIC_TO (0x000B | VKVG_CMD_PATH_COMMANDS)
+#define VKVG_CMD_ELLIPTICAL_ARC_TO (0x000C | VKVG_CMD_PATH_COMMANDS)
-#define VKVG_CMD_SET_LINE_WIDTH (0x0001|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_MITER_LIMIT (0x0002|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_LINE_JOIN (0x0003|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_LINE_CAP (0x0004|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_OPERATOR (0x0005|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_FILL_RULE (0x0006|VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_SET_DASH (0x0007|VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_LINE_WIDTH (0x0001 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_MITER_LIMIT (0x0002 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_LINE_JOIN (0x0003 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_LINE_CAP (0x0004 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_OPERATOR (0x0005 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_FILL_RULE (0x0006 | VKVG_CMD_PATHPROPS_COMMANDS)
+#define VKVG_CMD_SET_DASH (0x0007 | VKVG_CMD_PATHPROPS_COMMANDS)
-#define VKVG_CMD_TRANSLATE (0x0001|VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_ROTATE (0x0002|VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_SCALE (0x0003|VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_TRANSFORM (0x0004|VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_IDENTITY_MATRIX (0x0005|VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_TRANSLATE (0x0001 | VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_ROTATE (0x0002 | VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_SCALE (0x0003 | VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_TRANSFORM (0x0004 | VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_IDENTITY_MATRIX (0x0005 | VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_SET_MATRIX (0x0006|VKVG_CMD_TRANSFORM_COMMANDS)
+#define VKVG_CMD_SET_MATRIX (0x0006 | VKVG_CMD_TRANSFORM_COMMANDS)
-#define VKVG_CMD_SET_FONT_SIZE (0x0001|VKVG_CMD_TEXT_COMMANDS)
-#define VKVG_CMD_SET_FONT_FACE (0x0002|VKVG_CMD_TEXT_COMMANDS)
-#define VKVG_CMD_SET_FONT_PATH (0x0003|VKVG_CMD_TEXT_COMMANDS)
-#define VKVG_CMD_SHOW_TEXT (0x0004|VKVG_CMD_TEXT_COMMANDS)
+#define VKVG_CMD_SET_FONT_SIZE (0x0001 | VKVG_CMD_TEXT_COMMANDS)
+#define VKVG_CMD_SET_FONT_FACE (0x0002 | VKVG_CMD_TEXT_COMMANDS)
+#define VKVG_CMD_SET_FONT_PATH (0x0003 | VKVG_CMD_TEXT_COMMANDS)
+#define VKVG_CMD_SHOW_TEXT (0x0004 | VKVG_CMD_TEXT_COMMANDS)
-#define VKVG_CMD_REL_MOVE_TO (VKVG_CMD_MOVE_TO |VKVG_CMD_RELATIVE_COMMANDS)
-#define VKVG_CMD_REL_LINE_TO (VKVG_CMD_LINE_TO |VKVG_CMD_RELATIVE_COMMANDS)
-#define VKVG_CMD_REL_CURVE_TO (VKVG_CMD_CURVE_TO |VKVG_CMD_RELATIVE_COMMANDS)
-#define VKVG_CMD_REL_QUADRATIC_TO (VKVG_CMD_QUADRATIC_TO |VKVG_CMD_RELATIVE_COMMANDS)
-#define VKVG_CMD_REL_ELLIPTICAL_ARC_TO (VKVG_CMD_ELLIPTICAL_ARC_TO |VKVG_CMD_RELATIVE_COMMANDS)
+#define VKVG_CMD_REL_MOVE_TO (VKVG_CMD_MOVE_TO | VKVG_CMD_RELATIVE_COMMANDS)
+#define VKVG_CMD_REL_LINE_TO (VKVG_CMD_LINE_TO | VKVG_CMD_RELATIVE_COMMANDS)
+#define VKVG_CMD_REL_CURVE_TO (VKVG_CMD_CURVE_TO | VKVG_CMD_RELATIVE_COMMANDS)
+#define VKVG_CMD_REL_QUADRATIC_TO (VKVG_CMD_QUADRATIC_TO | VKVG_CMD_RELATIVE_COMMANDS)
+#define VKVG_CMD_REL_ELLIPTICAL_ARC_TO (VKVG_CMD_ELLIPTICAL_ARC_TO | VKVG_CMD_RELATIVE_COMMANDS)
-#define VKVG_CMD_PAINT (0x0001|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_FILL (0x0002|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_STROKE (0x0003|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_CLIP (0x0004|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_RESET_CLIP (0x0005|VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_CLEAR (0x0006|VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_PAINT (0x0001 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_FILL (0x0002 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_STROKE (0x0003 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_CLIP (0x0004 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_RESET_CLIP (0x0005 | VKVG_CMD_DRAW_COMMANDS)
+#define VKVG_CMD_CLEAR (0x0006 | VKVG_CMD_DRAW_COMMANDS)
-#define VKVG_CMD_FILL_PRESERVE (VKVG_CMD_FILL |VKVG_CMD_PRESERVE_COMMANDS)
-#define VKVG_CMD_STROKE_PRESERVE (VKVG_CMD_STROKE |VKVG_CMD_PRESERVE_COMMANDS)
-#define VKVG_CMD_CLIP_PRESERVE (VKVG_CMD_CLIP |VKVG_CMD_PRESERVE_COMMANDS)
+#define VKVG_CMD_FILL_PRESERVE (VKVG_CMD_FILL | VKVG_CMD_PRESERVE_COMMANDS)
+#define VKVG_CMD_STROKE_PRESERVE (VKVG_CMD_STROKE | VKVG_CMD_PRESERVE_COMMANDS)
+#define VKVG_CMD_CLIP_PRESERVE (VKVG_CMD_CLIP | VKVG_CMD_PRESERVE_COMMANDS)
-#define VKVG_CMD_SET_SOURCE_RGB (0x0001|VKVG_CMD_PATTERN_COMMANDS)
-#define VKVG_CMD_SET_SOURCE_RGBA (0x0002|VKVG_CMD_PATTERN_COMMANDS)
-#define VKVG_CMD_SET_SOURCE_COLOR (0x0003|VKVG_CMD_PATTERN_COMMANDS)
-#define VKVG_CMD_SET_SOURCE (0x0004|VKVG_CMD_PATTERN_COMMANDS)
-#define VKVG_CMD_SET_SOURCE_SURFACE (0x0005|VKVG_CMD_PATTERN_COMMANDS)
+#define VKVG_CMD_SET_SOURCE_RGB (0x0001 | VKVG_CMD_PATTERN_COMMANDS)
+#define VKVG_CMD_SET_SOURCE_RGBA (0x0002 | VKVG_CMD_PATTERN_COMMANDS)
+#define VKVG_CMD_SET_SOURCE_COLOR (0x0003 | VKVG_CMD_PATTERN_COMMANDS)
+#define VKVG_CMD_SET_SOURCE (0x0004 | VKVG_CMD_PATTERN_COMMANDS)
+#define VKVG_CMD_SET_SOURCE_SURFACE (0x0005 | VKVG_CMD_PATTERN_COMMANDS)
+typedef struct _vkvg_record_t {
+ uint16_t cmd;
+ size_t dataOffset;
+} vkvg_record_t;
+typedef struct _vkvg_recording_t {
+ vkvg_record_t *commands;
+ uint32_t commandsCount;
+ uint32_t commandsReservedCount;
+ size_t bufferSize;
+ size_t bufferReservedSize;
+ char *buffer;
+} vkvg_recording_t;
-typedef struct _vkvg_record_t{
- uint16_t cmd;
- size_t dataOffset;
-}vkvg_record_t;
-
-typedef struct _vkvg_recording_t{
- vkvg_record_t* commands;
- uint32_t commandsCount;
- uint32_t commandsReservedCount;
- size_t bufferSize;
- size_t bufferReservedSize;
- char* buffer;
-}vkvg_recording_t;
-
-
-void _start_recording (VkvgContext ctx);
-vkvg_recording_t* _stop_recording (VkvgContext ctx);
-void _destroy_recording (vkvg_recording_t* rec);
-void _replay_command (VkvgContext ctx, VkvgRecording rec, uint32_t index);
-void _record (vkvg_recording_t* rec,...);
-
-#define RECORD(ctx,...) {\
- if (ctx->recording) {\
- _record (ctx->recording,__VA_ARGS__);\
- return;\
- }\
-}
-#define RECORD2(ctx,...) {\
- if (ctx->recording) {\
- _record (ctx->recording,__VA_ARGS__);\
- return 0;\
- }\
-}
+void _start_recording(VkvgContext ctx);
+vkvg_recording_t *_stop_recording(VkvgContext ctx);
+void _destroy_recording(vkvg_recording_t *rec);
+void _replay_command(VkvgContext ctx, VkvgRecording rec, uint32_t index);
+void _record(vkvg_recording_t *rec, ...);
+#define RECORD(ctx, ...) \
+ { \
+ if (ctx->recording) { \
+ _record(ctx->recording, __VA_ARGS__); \
+ return; \
+ } \
+ }
+#define RECORD2(ctx, ...) \
+ { \
+ if (ctx->recording) { \
+ _record(ctx->recording, __VA_ARGS__); \
+ return 0; \
+ } \
+ }
#endif