//particle-common.glsl
#define PARTICLE_SHADER

#ifdef USE_UBO
#define UNIFORM_DECL_PREFIX
#else
#define UNIFORM_DECL_PREFIX uniform
#endif

#if defined(USE_UBO) && defined(BINDLESS_TEXTURES)
#define SAMPLER_DECL_PREFIX
#else
#define SAMPLER_DECL_PREFIX uniform
#endif

#if defined(USE_UBO)
layout(std140) uniform trit_ShaderParameters_UBO {
#endif

// These are used in vertex shader
    UNIFORM_DECL_PREFIX mat4 trit_mvProj;
    UNIFORM_DECL_PREFIX mat4 trit_modelview;
    UNIFORM_DECL_PREFIX vec3 trit_cameraPos;
    UNIFORM_DECL_PREFIX vec3 trit_refOffset;
    UNIFORM_DECL_PREFIX bool trit_hasHeightMap;
    UNIFORM_DECL_PREFIX bool trit_hasUserHeightMap;
    UNIFORM_DECL_PREFIX vec2 trit_heightMapRangeOffset;
    UNIFORM_DECL_PREFIX mat4 trit_heightMapMatrix;
    UNIFORM_DECL_PREFIX float trit_invSizeFactor;
    UNIFORM_DECL_PREFIX float trit_seaLevel;
    UNIFORM_DECL_PREFIX float trit_fogDensity;
#ifdef BINDLESS_TEXTURES
    SAMPLER_DECL_PREFIX sampler2D trit_heightMap;
#endif

// These are used in pixel shader
    UNIFORM_DECL_PREFIX vec4 trit_lightColor;
#ifndef USE_INSTANCING_FOR_TRANSPARENCY
    UNIFORM_DECL_PREFIX float trit_transparency;
#endif
    UNIFORM_DECL_PREFIX vec3 trit_fogColor;

// These are used in both
    UNIFORM_DECL_PREFIX float trit_time;
    UNIFORM_DECL_PREFIX vec3 trit_g;

#if defined(USE_UBO)
};
#endif

#ifndef BINDLESS_TEXTURES
SAMPLER_DECL_PREFIX sampler2D trit_heightMap;
#endif

#if defined(USE_UBO) && defined(BINDLESS_TEXTURES)
layout(std140) uniform trit_TextureHandles_UBO {
#endif

    SAMPLER_DECL_PREFIX sampler2D trit_particleTexture;

#if defined(USE_UBO) && defined(BINDLESS_TEXTURES)
};
#endif