43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#include "render_queue.h"
|
|
#include "raylib.h"
|
|
|
|
void init_render_manager(RenderManager *manager)
|
|
{
|
|
memset(manager, 0, sizeof(*manager));
|
|
}
|
|
|
|
bool add_render_node(RenderManager *manager, RenderInfoNode *node, uint8_t layer_num)
|
|
{
|
|
if (node->next != NULL)
|
|
{
|
|
return false;
|
|
}
|
|
if (node->spr == NULL) {
|
|
return false;
|
|
}
|
|
layer_num = (layer_num >= MAX_RENDERMANAGER_DEPTH) ? MAX_RENDERMANAGER_DEPTH - 1 : layer_num;
|
|
|
|
node->next = manager->layers[layer_num];
|
|
manager->layers[layer_num] = node;
|
|
return true;
|
|
}
|
|
|
|
void execute_render(RenderManager *manager) {
|
|
for (uint8_t depth = 0; depth < MAX_RENDERMANAGER_DEPTH; ++depth)
|
|
{
|
|
RenderInfoNode* curr = manager->layers[depth];
|
|
while (curr != NULL)
|
|
{
|
|
draw_sprite_pro(
|
|
curr->spr, curr->frame_num, curr->pos,
|
|
curr->rotation, curr->flip, curr->scale,
|
|
curr->colour
|
|
);
|
|
RenderInfoNode* next = curr->next;
|
|
curr->next = NULL;
|
|
curr = next;
|
|
}
|
|
}
|
|
reset_render_manager(manager);
|
|
}
|