Added dawn

This commit is contained in:
Vladislav Khorev committed 2026-06-04 18:01:51 +03:00
1 parent 83b92e9881
commit c8d743b932
13 files changed
+88 -40

No files matched your search

+22 -10
View File
@@ -903,7 +903,7 @@ void Character::drawGpuSkinningWithShadow(Renderer& renderer, const Eigen::Matri
// ==================== Night pass with point lights ====================
void Character::drawNight(Renderer& renderer, const float* pointLightPosEye, const float* pointLightDirEye, const float* pointLightColors, int pointLightCount) {
void Character::drawNight(Renderer& renderer, const float* pointLightPosEye, const float* pointLightDirEye, const float* pointLightColors, int pointLightCount, const float* ambientColor, const float* fogColor) {
if (!enabled) return;
if (hitSparkEmitter.isConfigured() && hitSparkEmitter.getActiveParticleCount() > 0) {
hitSparkEmitter.draw(renderer, 1.0f, Environment::width, Environment::height, false);
@@ -915,13 +915,13 @@ void Character::drawNight(Renderer& renderer, const float* pointLightPosEye, con
if (!isPlayer && hp <= 0) return;
if (useGpuSkinning) {
drawNightGpuSkinning(renderer, pointLightPosEye, pointLightDirEye, pointLightColors, pointLightCount);
drawNightGpuSkinning(renderer, pointLightPosEye, pointLightDirEye, pointLightColors, pointLightCount, ambientColor, fogColor);
} else {
drawNightCpu(renderer, pointLightPosEye, pointLightDirEye, pointLightColors, pointLightCount);
drawNightCpu(renderer, pointLightPosEye, pointLightDirEye, pointLightColors, pointLightCount, ambientColor, fogColor);
}
}
void Character::drawNightGpuSkinning(Renderer& renderer, const float* plPosEye, const float* plDirEye, const float* plColors, int plCount) {
void Character::drawNightGpuSkinning(Renderer& renderer, const float* plPosEye, const float* plDirEye, const float* plColors, int plCount, const float* ambientColor, const float* fogColor) {
AnimationState drawState = resolveActiveState();
auto it = animations.find(drawState);
if (it == animations.end()) return;
@@ -933,6 +933,8 @@ void Character::drawNightGpuSkinning(Renderer& renderer, const float* plPosEye,
renderer.shaderManager.PushShader(nightSkinningShader);
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
const float playerEyePosNight[3] = { 0.0f, 0.0f, -Environment::zoom };
renderer.RenderUniform3fv("uPlayerEyePos", playerEyePosNight);
renderer.RenderUniform1i("uPointLightCount", plCount);
@@ -969,6 +971,8 @@ void Character::drawNightGpuSkinning(Renderer& renderer, const float* plPosEye,
renderer.shaderManager.PushShader("night_fog");
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
renderer.RenderUniform3fv("uPlayerEyePos", playerEyePosNight);
renderer.RenderUniform1i("uPointLightCount", plCount);
if (plCount > 0) {
@@ -983,7 +987,7 @@ void Character::drawNightGpuSkinning(Renderer& renderer, const float* plPosEye,
renderer.shaderManager.PopShader();
}
void Character::drawNightCpu(Renderer& renderer, const float* plPosEye, const float* plDirEye, const float* plColors, int plCount) {
void Character::drawNightCpu(Renderer& renderer, const float* plPosEye, const float* plDirEye, const float* plColors, int plCount, const float* ambientColor, const float* fogColor) {
AnimationState drawState = resolveActiveState();
auto it = animations.find(drawState);
if (it == animations.end()) return;
@@ -992,6 +996,8 @@ void Character::drawNightCpu(Renderer& renderer, const float* plPosEye, const fl
renderer.shaderManager.PushShader(nightShader);
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
const float playerEyePosNight[3] = { 0.0f, 0.0f, -Environment::zoom };
renderer.RenderUniform3fv("uPlayerEyePos", playerEyePosNight);
renderer.RenderUniform1i("uPointLightCount", plCount);
@@ -1036,7 +1042,7 @@ void Character::drawNightCpu(Renderer& renderer, const float* plPosEye, const fl
void Character::drawNightWithShadow(Renderer& renderer,
const float* plPosEye, const float* plDirEye, const float* plColors, int plCount,
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex)
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex, const float* ambientColor, const float* fogColor)
{
if (!enabled) return;
if (hitSparkEmitter.isConfigured() && hitSparkEmitter.getActiveParticleCount() > 0) {
@@ -1047,15 +1053,15 @@ void Character::drawNightWithShadow(Renderer& renderer,
if (!isPlayer && hp <= 0) return;
if (useGpuSkinning) {
drawNightGpuSkinningWithShadow(renderer, plPosEye, plDirEye, plColors, plCount, lightFromCamera, shadowMapTex);
drawNightGpuSkinningWithShadow(renderer, plPosEye, plDirEye, plColors, plCount, lightFromCamera, shadowMapTex, ambientColor, fogColor);
} else {
drawNightCpuWithShadow(renderer, plPosEye, plDirEye, plColors, plCount, lightFromCamera, shadowMapTex);
drawNightCpuWithShadow(renderer, plPosEye, plDirEye, plColors, plCount, lightFromCamera, shadowMapTex, ambientColor, fogColor);
}
}
void Character::drawNightGpuSkinningWithShadow(Renderer& renderer,
const float* plPosEye, const float* plDirEye, const float* plColors, int plCount,
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex)
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex, const float* ambientColor, const float* fogColor)
{
AnimationState drawState = resolveActiveState();
auto it = animations.find(drawState);
@@ -1068,6 +1074,8 @@ void Character::drawNightGpuSkinningWithShadow(Renderer& renderer,
renderer.shaderManager.PushShader(nightShadowSkinningShader);
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform1i("uShadowMap", 1);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
renderer.RenderUniformMatrix4fv("uLightFromCamera", false, lightFromCamera.data());
// First light's eye-space direction used for shadow bias
if (plCount > 0) renderer.RenderUniform3fv("uLightDir", plDirEye);
@@ -1114,6 +1122,8 @@ void Character::drawNightGpuSkinningWithShadow(Renderer& renderer,
renderer.shaderManager.PushShader("night_fog_shadow");
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform1i("uShadowMap", 1);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
renderer.RenderUniformMatrix4fv("uLightFromCamera", false, lightFromCamera.data());
if (plCount > 0) renderer.RenderUniform3fv("uLightDir", plDirEye);
renderer.RenderUniform3fv("uPlayerEyePos", playerEyePosNightShadow);
@@ -1132,7 +1142,7 @@ void Character::drawNightGpuSkinningWithShadow(Renderer& renderer,
void Character::drawNightCpuWithShadow(Renderer& renderer,
const float* plPosEye, const float* plDirEye, const float* plColors, int plCount,
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex)
const Eigen::Matrix4f& lightFromCamera, GLuint shadowMapTex, const float* ambientColor, const float* fogColor)
{
AnimationState drawState = resolveActiveState();
auto it = animations.find(drawState);
@@ -1143,6 +1153,8 @@ void Character::drawNightCpuWithShadow(Renderer& renderer,
renderer.shaderManager.PushShader(nightShadowShader);
renderer.RenderUniform1i(textureUniformName, 0);
renderer.RenderUniform1i("uShadowMap", 1);
renderer.RenderUniform3fv("uAmbientColor", ambientColor);
renderer.RenderUniform3fv("uFogColor", fogColor);
renderer.RenderUniformMatrix4fv("uLightFromCamera", false, lightFromCamera.data());
if (plCount > 0) renderer.RenderUniform3fv("uLightDir", plDirEye);