139 lines
3.8 KiB
C
139 lines
3.8 KiB
C
#ifndef _API_H
|
|
#define _API_H
|
|
|
|
#include <stdafx.h>
|
|
#include <vecmath.h>
|
|
|
|
typedef int Error;
|
|
|
|
#define ERROR_NONE 0
|
|
#define ERROR_OUT_OF_MEMORY 1
|
|
#define ERROR_OUT_OF_BLOCKS 2
|
|
#define ERROR_OUT_OF_MATERIALS 3
|
|
#define ERROR_OUT_OF_TEXTURES 4
|
|
|
|
typedef int Orientation;
|
|
|
|
#define ORIENTATION_NEGATIVE_X ~0
|
|
#define ORIENTATION_POSITIVE_X 0
|
|
#define ORIENTATION_NEGATIVE_Y ~1
|
|
#define ORIENTATION_POSITIVE_Y 1
|
|
#define ORIENTATION_NEGATIVE_Z ~2
|
|
#define ORIENTATION_POSITIVE_Z 2
|
|
|
|
#define ORIENTATION_INIT_SIGN_INDEX(sign, index) ((sign) > 0 ? (index) : ~(index))
|
|
#define ORIENTATION_GET_INDEX(orientation) ((orientation) & 0x4 ? ~(orientation) : (orientation))
|
|
#define ORIENTATION_GET_SIGN(orientation) ((oritentation) & 0x4 ? -1 : 1)
|
|
|
|
typedef int Transform;
|
|
|
|
#define TRANSFORM_IDENTITY 0
|
|
#define TRANSFORM_ROTATE_CW 1
|
|
#define TRANSFORM_ROTATE_CCW 2
|
|
#define TRANSFORM_ROTATE_180 3
|
|
#define TRANSFORM_MIRROR 4
|
|
#define TRANSFORM_MIRROR_ROTATE_CW 5
|
|
#define TRANSFORM_MIRROR_ROTATE_CCW 6
|
|
#define TRANSFORM_MIRROR_ROTATE_180 7
|
|
|
|
typedef unsigned short BlockId;
|
|
|
|
#define BLOCK_ID_AIR 0
|
|
|
|
typedef unsigned short MaterialId;
|
|
|
|
#define MATERIAL_ID_EMPTY 0
|
|
|
|
typedef unsigned short TextureId;
|
|
|
|
#define TEXTURE_ID_EMPTY_BASE_COLOR 0
|
|
#define TEXTURE_ID_EMPTY_EMISSIVE 1
|
|
#define TEXTURE_ID_EMPTY_NORMAL 2
|
|
#define TEXTURE_ID_EMPTY_OCCLUSION_ROUGHNESS_METALLIC 3
|
|
|
|
typedef int TextureUsage;
|
|
|
|
#define TEXTURE_USAGE_BASE_COLOR 0
|
|
#define TEXTURE_USAGE_NORMAL 1
|
|
#define TEXTURE_USAGE_OCCLUSION_ROUGHNESS_METALLIC 2
|
|
#define TEXTURE_USAGE_EMISSIVE 3
|
|
|
|
typedef struct String {
|
|
const char* ptr;
|
|
size_t len;
|
|
} String;
|
|
|
|
#define STRING_NULL (String){ .ptr = NULL, .len = 0 }
|
|
|
|
typedef struct BlockDefinitionWall {
|
|
MaterialId material;
|
|
Transform transform;
|
|
} BlockDefinitionWall;
|
|
|
|
typedef struct BlockDefinitionWalls {
|
|
BlockDefinitionWall negative_x;
|
|
BlockDefinitionWall positive_x;
|
|
BlockDefinitionWall negative_y;
|
|
BlockDefinitionWall positive_y;
|
|
BlockDefinitionWall negative_z;
|
|
BlockDefinitionWall positive_z;
|
|
} BlockDefinitionWalls;
|
|
|
|
typedef struct BlockDefinition {
|
|
BlockDefinitionWalls walls;
|
|
} BlockDefinition;
|
|
|
|
typedef struct MaterialDefinition {
|
|
vec3_t base_color;
|
|
vec3_t emissive;
|
|
float ior;
|
|
float metallic;
|
|
float normal_scale;
|
|
float occlusion_texture_strength;
|
|
float roughness;
|
|
|
|
TextureId base_color_texture;
|
|
TextureId emissive_texture;
|
|
TextureId normal_texture;
|
|
TextureId occlusion_roughness_metallic_texture;
|
|
} MaterialDefinition;
|
|
|
|
typedef struct TextureData {
|
|
TextureUsage usage;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
const char *data;
|
|
} TextureData;
|
|
|
|
typedef struct TextureDataMutable {
|
|
TextureUsage usage;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
char *data;
|
|
} TextureDataMutable;
|
|
|
|
Error BlockIdFromName(String name, bool *exists, BlockId *out);
|
|
Error BlockDefinitionFromId(BlockId id, const BlockDefinition **out);
|
|
Error BlockDefine(String name, const BlockDefinition *definition, BlockId *out);
|
|
|
|
Error MaterialIdFromName(String name, bool *exists, MaterialId *out);
|
|
Error MaterialDefinitionFromId(MaterialId, const MaterialDefinition **out);
|
|
Error MaterialDefine(String name, const MaterialDefinition *definition, MaterialId *out);
|
|
|
|
Error TextureIdFromName(String name, TextureUsage usage, bool *exists, TextureId *out);
|
|
Error TextureDefine(String name, const TextureData *texture_data, TextureId *out);
|
|
|
|
Error TextureResize(TextureDataMutable *texture_data, unsigned int width, unsigned int height);
|
|
|
|
// --- CALLBACKS ---
|
|
|
|
void PreInit();
|
|
void PostInit();
|
|
void Deinit();
|
|
|
|
void FilterBlock(BlockId id, String name, bool *exists, BlockDefinition *definition);
|
|
void FilterMaterial(MaterialId id, String name, bool *exists, MaterialDefinition *definition);
|
|
void FilterTexture(TextureId id, String name, bool *exists, TextureDataMutable *texture_data);
|
|
|
|
#endif
|