Some more shader changes

This commit is contained in:
Benjamin Doherty
2022-11-14 21:56:50 -08:00
parent 3cdaf3feeb
commit a0af84d034
3 changed files with 8 additions and 8 deletions

View File

@@ -155,7 +155,6 @@ public:
bool castsShadows = false; // whether this light casts shadows
bool contactShadows = false; // whether this light casts contact shadows
uint8_t index = 0; // an index into the arrays in the Shadows uniform buffer
uint8_t layer = 0; // which layer of the shadow texture array to sample from
};
enum {
@@ -179,7 +178,8 @@ public:
LightSoa const& getLightData() const noexcept { return mLightData; }
LightSoa& getLightData() noexcept { return mLightData; }
void updateUBOs(utils::Range<uint32_t> visibleRenderables, backend::Handle<backend::HwBufferObject> renderableUbh) noexcept;
void updateUBOs(utils::Range<uint32_t> visibleRenderables,
backend::Handle<backend::HwBufferObject> renderableUbh) noexcept;
bool hasContactShadows() const noexcept;

View File

@@ -9,7 +9,6 @@ struct Light {
bool contactShadows;
uint type;
uint shadowIndex;
uint shadowLayer;
uint channels;
};

View File

@@ -158,7 +158,6 @@ Light getLight(const uint lightIndex) {
light.type = (typeShadow & 0x1u);
#if defined(VARIANT_HAS_SHADOWING)
light.shadowIndex = (typeShadow >> 8u) & 0xFFu;
light.shadowLayer = (typeShadow >> 16u) & 0xFFu;
light.castsShadows = bool(channels & 0x10000u);
if (light.type == LIGHT_TYPE_SPOT) {
light.zLight = dot(shadowUniforms.shadows[light.shadowIndex].lightFromWorldZ, vec4(worldPosition, 1.0));
@@ -211,20 +210,22 @@ void evaluatePunctualLights(const MaterialInputs material,
#if defined(VARIANT_HAS_SHADOWING)
if (light.NoL > 0.0) {
if (light.castsShadows) {
uint layer = light.shadowLayer;
uint shadowIndex = light.shadowIndex;
highp vec4 shadowPosition;
if (light.type == LIGHT_TYPE_POINT) {
// point-light shadows are sampled from a direction
highp vec3 r = getWorldPosition() - light.worldPosition;
highp uint face = 0u;
highp vec4 nf = shadowUniforms.shadows[light.shadowIndex].lightFromWorldZ;
// getShadowPosition returns zLight which is needed for PCSS/DPCF
uint face = 0u;
shadowPosition = getShadowPosition(r, shadowIndex, light.zLight, face);
shadowIndex += face;
shadowPosition = getShadowPosition(r, light.shadowIndex, light.zLight, face);
} else {
// getShadowPosition needs zLight for applying the normal bias
shadowPosition = getShadowPosition(false, light.shadowIndex, 0u, light.zLight);
shadowPosition = getShadowPosition(false, shadowIndex, 0u, light.zLight);
}
visibility = shadow(false, light_shadowMap, light.shadowIndex,
visibility = shadow(false, light_shadowMap, shadowIndex,
shadowPosition, light.zLight);
}
if (light.contactShadows && visibility > 0.0) {