townengine/src/rendering/twn_deferred_commands.h

88 lines
1.8 KiB
C

#ifndef TWN_DEFERRED_COMMANDS_H
#define TWN_DEFERRED_COMMANDS_H
#include "twn_types.h"
#include "twn_gpu_texture_c.h"
#include "twn_textures_c.h"
#include <stddef.h>
#include <stdbool.h>
typedef enum {
PIPELINE_NO,
PIPELINE_SPACE,
PIPELINE_2D, /* TODO: rename to PIPELINE_PLANE? */
} Pipeline;
typedef struct {
size_t offset;
uint32_t type;
uint32_t stride;
uint32_t buffer;
uint8_t arity; /* leave at 0 to signal pointer as unused */
} AttributeArrayPointer;
/* allows us to have generic way to issue draws as well as */
/* deferring new draw calls while previous frame is still being drawn */
typedef struct {
AttributeArrayPointer vertices;
AttributeArrayPointer texcoords;
union {
AttributeArrayPointer colors;
Color color;
};
double depth_range_low, depth_range_high;
Pipeline pipeline;
TextureMode texture_mode;
TextureKey texture_key;
GPUTexture gpu_texture;
/* could be either `element_count` with supplied `element_buffer`, or this, but not both */
uint32_t primitive_count;
uint32_t element_buffer;
uint32_t element_count;
uint32_t range_start, range_end;
bool constant_colored;
bool textured, texture_repeat, uses_gpu_key;
} DeferredCommandDraw;
typedef struct {
char *paths;
} DeferredCommandDrawSkybox;
typedef struct {
Color color;
bool clear_color;
bool clear_depth;
bool clear_stencil;
} DeferredCommandClear;
typedef struct {
enum DeferredCommandType {
DEFERRED_COMMAND_TYPE_DRAW,
DEFERRED_COMMAND_TYPE_DRAW_SKYBOX,
DEFERRED_COMMAND_TYPE_CLEAR,
} type;
union {
DeferredCommandDraw draw;
DeferredCommandDrawSkybox draw_skybox;
DeferredCommandClear clear;
};
} DeferredCommand;
extern DeferredCommand *deferred_commands;
#endif