engine/bin/data/shaders/common/structs.h

309 lines
4.4 KiB
C

struct EyeMatrices {
mat4 view;
mat4 projection;
mat4 model;
mat4 previous;
mat4 iView;
mat4 iProjection;
vec4 eyePos;
};
struct Viewport {
mat4 view;
mat4 projection;
};
struct Cursor {
vec2 position;
vec2 radius;
vec4 color;
};
struct Ray {
vec3 origin;
vec3 direction;
vec3 position;
float distance;
};
struct Space {
vec3 eye;
vec3 world;
};
struct Light {
mat4 view;
mat4 projection;
vec3 position;
float radius;
vec3 color;
float power;
int type;
int typeMap;
int indexMap;
float depthBias;
};
struct Material {
vec4 colorBase;
vec4 colorEmissive;
float factorMetallic;
float factorRoughness;
float factorOcclusion;
float factorAlphaCutoff;
int indexAlbedo;
int indexNormal;
int indexEmissive;
int indexOcclusion;
int indexMetallicRoughness;
int padding1;
int padding2;
int modeAlpha;
};
struct Texture {
int index;
int samp;
int remap;
float blend;
vec4 lerp;
};
struct DrawCommand {
uint indices; // triangle count
uint instances; // instance count
uint indexID; // starting triangle position
int vertexID; // starting vertex position
uint instanceID; // starting instance position
float padding1; //
float padding2; // material to use for this draw call
uint vertices; // number of vertices used
};
struct Bounds {
vec3 min;
float padding1;
vec3 max;
float padding2;
};
struct Instance {
mat4 model;
mat4 previous;
vec4 color;
uint materialID;
uint primitiveID;
uint meshID;
uint objectID;
int jointID;
int lightmapID;
uint imageID;
uint auxID;
Bounds bounds;
// InstanceAddresses addresses;
};
struct InstanceAddresses {
uint64_t vertex;
uint64_t index;
uint64_t indirect;
uint drawID;
uint padding0;
uint64_t position;
uint64_t uv;
uint64_t color;
uint64_t st;
uint64_t normal;
uint64_t tangent;
uint64_t joints;
uint64_t weights;
uint64_t id;
uint64_t padding1;
};
struct SurfaceMaterial {
vec4 albedo;
vec4 indirect;
float metallic;
float roughness;
float occlusion;
bool lightmapped;
};
struct Surface {
uint pass;
uint subID;
vec3 uv;
vec3 st;
Space position;
Space normal;
Space tangent;
mat3 tbn;
vec3 barycentric;
vec2 motion;
Ray ray;
SurfaceMaterial material;
Instance instance;
vec4 light;
vec4 fragment;
} surface;
// MSAA info
#if MULTISAMPLING
struct MSAA {
int currentID;
uvec2 IDs[MAX_MSAA_SAMPLES];
vec4 fragment;
vec4 fragments[MAX_MSAA_SAMPLES];
} msaa;
#endif
// UBO settings
struct SettingsLengths {
uint lights;
uint materials;
uint textures;
uint drawCommands;
};
struct SettingsMode {
vec4 parameters;
uint type;
uint scalar;
uint msaa;
uint frameNumber;
};
struct SettingsLighting {
vec3 ambient;
uint indexSkybox;
uint maxShadows;
uint shadowSamples;
uint useLightmaps;
};
struct SettingsFog {
vec3 color;
float stepScale;
vec3 offset;
float densityScale;
vec2 range;
float densityThreshold;
float densityMultiplier;
float absorbtion;
float padding1;
float padding2;
float padding3;
};
struct SettingsBloom {
float exposure;
float gamma;
float threshold;
uint padding;
};
struct SettingsVxgi {
mat4 matrix;
float cascadePower;
float granularity;
float voxelizeScale;
float occlusionFalloff;
float traceStartOffsetFactor;
uint shadows;
uint padding2;
uint padding3;
};
struct SettingsRayTrace {
vec2 defaultRayBounds;
float alphaTestOffset;
float padding1;
uint samples;
uint paths;
uint frameAccumulationMinimum;
uint padding2;
};
struct Settings {
SettingsLengths lengths;
SettingsMode mode;
SettingsLighting lighting;
SettingsFog fog;
SettingsBloom bloom;
SettingsVxgi vxgi;
SettingsRayTrace rt;
};
struct Voxel {
uvec2 id;
vec3 position;
vec3 normal;
vec2 uv;
vec4 color;
};
struct VoxelInfo {
vec3 min;
vec3 max;
float mipmapLevels;
float radianceSize;
float radianceSizeRecip;
uint state; // yuck
} voxelInfo;
// Raytrace stuff
struct Vertex {
vec3 position;
vec2 uv;
uint color;
vec2 st;
vec3 normal;
vec3 tangent;
uvec2 joints;
vec4 weights;
uint id;
};
struct Triangle {
Vertex point;
vec3 geomNormal;
uint instanceID;
};
struct RayTracePayload {
bool hit;
uint instanceID;
uint primitiveID;
vec2 attributes;
// Triangle triangle;
};