forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include <kinc/global.h>
 | ||
|  | 
 | ||
|  | #include <stdbool.h>
 | ||
|  | 
 | ||
|  | /*! \file vertexstructure.h
 | ||
|  |     \brief Provides functions for setting up the structure of vertices in a vertex-buffer. | ||
|  | */ | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | typedef enum kinc_g4_vertex_data { | ||
|  | 	KINC_G4_VERTEX_DATA_NONE = 0, | ||
|  | 	KINC_G4_VERTEX_DATA_F32_1X = 1, | ||
|  | 	KINC_G4_VERTEX_DATA_F32_2X = 2, | ||
|  | 	KINC_G4_VERTEX_DATA_F32_3X = 3, | ||
|  | 	KINC_G4_VERTEX_DATA_F32_4X = 4, | ||
|  | 	KINC_G4_VERTEX_DATA_F32_4X4 = 5, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_1X = 6, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_1X = 7, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_1X_NORMALIZED = 8, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_1X_NORMALIZED = 9, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_2X = 10, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_2X = 11, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_2X_NORMALIZED = 12, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_2X_NORMALIZED = 13, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_4X = 14, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_4X = 15, | ||
|  | 	KINC_G4_VERTEX_DATA_I8_4X_NORMALIZED = 16, | ||
|  | 	KINC_G4_VERTEX_DATA_U8_4X_NORMALIZED = 17, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_1X = 18, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_1X = 19, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_1X_NORMALIZED = 20, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_1X_NORMALIZED = 21, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_2X = 22, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_2X = 23, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_2X_NORMALIZED = 24, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_2X_NORMALIZED = 25, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_4X = 26, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_4X = 27, | ||
|  | 	KINC_G4_VERTEX_DATA_I16_4X_NORMALIZED = 28, | ||
|  | 	KINC_G4_VERTEX_DATA_U16_4X_NORMALIZED = 29, | ||
|  | 	KINC_G4_VERTEX_DATA_I32_1X = 30, | ||
|  | 	KINC_G4_VERTEX_DATA_U32_1X = 31, | ||
|  | 	KINC_G4_VERTEX_DATA_I32_2X = 32, | ||
|  | 	KINC_G4_VERTEX_DATA_U32_2X = 33, | ||
|  | 	KINC_G4_VERTEX_DATA_I32_3X = 34, | ||
|  | 	KINC_G4_VERTEX_DATA_U32_3X = 35, | ||
|  | 	KINC_G4_VERTEX_DATA_I32_4X = 36, | ||
|  | 	KINC_G4_VERTEX_DATA_U32_4X = 37, | ||
|  | 
 | ||
|  | 	// deprecated
 | ||
|  | 	KINC_G4_VERTEX_DATA_FLOAT1 = KINC_G4_VERTEX_DATA_F32_1X, | ||
|  | 	KINC_G4_VERTEX_DATA_FLOAT2 = KINC_G4_VERTEX_DATA_F32_2X, | ||
|  | 	KINC_G4_VERTEX_DATA_FLOAT3 = KINC_G4_VERTEX_DATA_F32_3X, | ||
|  | 	KINC_G4_VERTEX_DATA_FLOAT4 = KINC_G4_VERTEX_DATA_F32_4X, | ||
|  | 	KINC_G4_VERTEX_DATA_FLOAT4X4 = KINC_G4_VERTEX_DATA_F32_4X4, | ||
|  | 	KINC_G4_VERTEX_DATA_SHORT2_NORM = KINC_G4_VERTEX_DATA_I16_2X_NORMALIZED, | ||
|  | 	KINC_G4_VERTEX_DATA_SHORT4_NORM = KINC_G4_VERTEX_DATA_I16_4X_NORMALIZED, | ||
|  | 	KINC_G4_VERTEX_DATA_COLOR = KINC_G4_VERTEX_DATA_U8_4X_NORMALIZED | ||
|  | } kinc_g4_vertex_data_t; | ||
|  | 
 | ||
|  | static inline int kinc_g4_vertex_data_size(kinc_g4_vertex_data_t data) { | ||
|  | 	switch (data) { | ||
|  | 	default: | ||
|  | 	case KINC_G4_VERTEX_DATA_NONE: | ||
|  | 		return 0; | ||
|  | 	case KINC_G4_VERTEX_DATA_F32_1X: | ||
|  | 		return 1 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_F32_2X: | ||
|  | 		return 2 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_F32_3X: | ||
|  | 		return 3 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_F32_4X: | ||
|  | 		return 4 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_F32_4X4: | ||
|  | 		return 4 * 4 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_1X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_1X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_1X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_1X_NORMALIZED: | ||
|  | 		return 1 * 1; | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_2X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_2X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_2X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_2X_NORMALIZED: | ||
|  | 		return 2 * 1; | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_4X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_4X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I8_4X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U8_4X_NORMALIZED: | ||
|  | 		return 4 * 1; | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_1X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_1X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_1X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_1X_NORMALIZED: | ||
|  | 		return 1 * 2; | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_2X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_2X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_2X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_2X_NORMALIZED: | ||
|  | 		return 2 * 2; | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_4X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_4X: | ||
|  | 	case KINC_G4_VERTEX_DATA_I16_4X_NORMALIZED: | ||
|  | 	case KINC_G4_VERTEX_DATA_U16_4X_NORMALIZED: | ||
|  | 		return 4 * 2; | ||
|  | 	case KINC_G4_VERTEX_DATA_I32_1X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U32_1X: | ||
|  | 		return 1 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_I32_2X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U32_2X: | ||
|  | 		return 2 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_I32_3X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U32_3X: | ||
|  | 		return 3 * 4; | ||
|  | 	case KINC_G4_VERTEX_DATA_I32_4X: | ||
|  | 	case KINC_G4_VERTEX_DATA_U32_4X: | ||
|  | 		return 4 * 4; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | typedef struct kinc_g4_vertex_element { | ||
|  | 	const char *name; | ||
|  | 	kinc_g4_vertex_data_t data; | ||
|  | } kinc_g4_vertex_element_t; | ||
|  | 
 | ||
|  | #define KINC_G4_MAX_VERTEX_ELEMENTS 16
 | ||
|  | 
 | ||
|  | typedef struct kinc_g4_vertex_structure { | ||
|  | 	kinc_g4_vertex_element_t elements[KINC_G4_MAX_VERTEX_ELEMENTS]; | ||
|  | 	int size; | ||
|  | 	bool instanced; | ||
|  | } kinc_g4_vertex_structure_t; | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Initializes a vertex-structure.
 | ||
|  | /// </summary>
 | ||
|  | /// <param name="structure">The structure to initialize</param>
 | ||
|  | /// <returns></returns>
 | ||
|  | KINC_FUNC void kinc_g4_vertex_structure_init(kinc_g4_vertex_structure_t *structure); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Adds an element to a vertex-structure.
 | ||
|  | /// </summary>
 | ||
|  | /// <param name="structure">The structure to add an element to</param>
 | ||
|  | /// <param name="name">The name to use for the new element</param>
 | ||
|  | /// <param name="data">The type of data to assign for the new element</param>
 | ||
|  | /// <returns></returns>
 | ||
|  | KINC_FUNC void kinc_g4_vertex_structure_add(kinc_g4_vertex_structure_t *structure, const char *name, kinc_g4_vertex_data_t data); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 |