Files
voxelotl-engine/Sources/Voxelotl/shadertypes.h

61 lines
1.3 KiB
C
Raw Normal View History

2024-08-05 00:19:49 -07:00
#ifndef SHADERTYPES_H
#define SHADERTYPES_H
#ifdef __METAL_VERSION__
# define NS_ENUM(TYPE, NAME) enum NAME : TYPE NAME; enum NAME : TYPE
# define NSInteger metal::int32_t
2024-09-06 06:37:19 +10:00
# define CONSTANT_PTR(TYPE) constant TYPE*
2024-08-05 00:19:49 -07:00
#else
# import <Foundation/Foundation.h>
2024-09-06 06:37:19 +10:00
# define CONSTANT_PTR(TYPE) uint64_t
2024-08-05 00:19:49 -07:00
#endif
#include <simd/simd.h>
2024-08-18 01:20:19 +10:00
typedef NS_ENUM(NSInteger, VertexShaderInputIdx) {
VertexShaderInputIdxVertices = 0,
VertexShaderInputIdxInstance = 1,
VertexShaderInputIdxUniforms = 2
2024-08-05 00:19:49 -07:00
};
typedef struct {
vector_float3 position;
vector_float3 normal;
2024-09-02 19:06:16 +10:00
vector_float4 color;
2024-08-05 20:09:33 +10:00
vector_float2 texCoord;
2024-08-05 00:19:49 -07:00
} ShaderVertex;
2024-08-06 16:51:29 +10:00
typedef struct {
matrix_float4x4 model;
2024-08-18 01:10:25 +10:00
matrix_float4x4 normalModel;
2024-09-02 19:06:16 +10:00
vector_float4 color;
2024-08-18 01:20:19 +10:00
} VertexShaderInstance;
2024-08-09 21:16:07 +10:00
typedef struct {
2024-08-06 16:51:29 +10:00
matrix_float4x4 projView;
2024-08-18 01:20:19 +10:00
} VertexShaderUniforms;
typedef NS_ENUM(NSInteger, FragmentShaderInputIdx) {
FragmentShaderInputIdxUniforms = 0
};
typedef struct {
2024-08-19 00:05:53 +10:00
vector_float3 cameraPosition, directionalLight;
2024-09-02 19:06:16 +10:00
vector_float4 ambientColor, diffuseColor, specularColor;
2024-08-19 00:05:53 +10:00
float specularIntensity;
2024-08-18 01:20:19 +10:00
} FragmentShaderUniforms;
2024-08-06 16:51:29 +10:00
#pragma mark - UI & 2D Shader
typedef struct {
vector_float2 position;
vector_float2 texCoord;
vector_float4 color;
} Vertex2D;
typedef struct {
matrix_float4x4 projection;
} Shader2DUniforms;
2024-08-05 00:19:49 -07:00
#endif//SHADERTYPES_H