This commit is contained in:
GabsPuNs
2026-05-14 21:52:21 -04:00
parent 1b2f5c6fe8
commit f8a2d644f5
291 changed files with 7363 additions and 18368 deletions

View File

@@ -876,11 +876,6 @@ void GameRenderer::updateLightTexture(float a)
Level *level = player->level;
int dimColor = level->dimension->getBlockLightColour();
float dimB = (float)((dimColor >> 16) & 0xFF) / 255.0f;
float dimG = (float)((dimColor >> 8) & 0xFF) / 255.0f;
float dimR = (float)(dimColor & 0xFF) / 255.0f;
const float skyDarken1 = level->getSkyDarken(1.0f);
const float skyWeight = skyDarken1 * 0.65f + 0.35f;
const float darken = skyDarken1 * 0.95f + 0.05f;
@@ -892,10 +887,6 @@ void GameRenderer::updateLightTexture(float a)
const __m256 vSkyWeight = _mm256_set1_ps(skyWeight);
const __m256 vBlockMult = _mm256_set1_ps(blockMult);
const __m256 vDimR = _mm256_set1_ps(dimR);
const __m256 vDimG = _mm256_set1_ps(dimG);
const __m256 vDimB = _mm256_set1_ps(dimB);
const bool skyFlash = level->skyFlashTime < 0;
const bool isEnd = level->dimension->id == 1;
@@ -906,7 +897,8 @@ void GameRenderer::updateLightTexture(float a)
for (int i = 0; i < 256; i += 8)
{
alignas(32) float sRamp[8], bRamp[8];
for(int k=0; k<8; ++k) {
for(int k=0; k<8; ++k)
{
sRamp[k] = level->dimension->brightnessRamp[(i + k) / 16];
bRamp[k] = level->dimension->brightnessRamp[(i + k) % 16];
}
@@ -925,13 +917,9 @@ void GameRenderer::updateLightTexture(float a)
__m256 vGb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_add_ps(_mm256_mul_ps(vBlock, _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
__m256 vBb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_mul_ps(vBlock, vBlock), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
__m256 vRb = _mm256_mul_ps(vRb_base, vDimR);
__m256 vGb = _mm256_mul_ps(vGb_base, vDimG);
__m256 vBb = _mm256_mul_ps(vBb_base, vDimB);
__m256 vR = _mm256_add_ps(vRs, vRb);
__m256 vG = _mm256_add_ps(vGs, vGb);
__m256 vB = _mm256_add_ps(vBs, vBb);
__m256 vR = _mm256_add_ps(vRs, vRb_base);
__m256 vG = _mm256_add_ps(vGs, vGb_base);
__m256 vB = _mm256_add_ps(vBs, vBb_base);
vR = _mm256_add_ps(_mm256_mul_ps(vR, v096), v003);
vG = _mm256_add_ps(_mm256_mul_ps(vG, v096), v003);
@@ -946,9 +934,9 @@ void GameRenderer::updateLightTexture(float a)
if (isEnd)
{
vR = _mm256_add_ps(_mm256_set1_ps(0.22f), _mm256_mul_ps(vRb, _mm256_set1_ps(0.75f)));
vG = _mm256_add_ps(_mm256_set1_ps(0.28f), _mm256_mul_ps(vGb, _mm256_set1_ps(0.75f)));
vB = _mm256_add_ps(_mm256_set1_ps(0.25f), _mm256_mul_ps(vBb, _mm256_set1_ps(0.75f)));
vR = _mm256_add_ps(_mm256_set1_ps(0.22f), _mm256_mul_ps(vRb_base, _mm256_set1_ps(0.75f)));
vG = _mm256_add_ps(_mm256_set1_ps(0.28f), _mm256_mul_ps(vGb_base, _mm256_set1_ps(0.75f)));
vB = _mm256_add_ps(_mm256_set1_ps(0.25f), _mm256_mul_ps(vBb_base, _mm256_set1_ps(0.75f)));
}
if (hasNV)
@@ -997,9 +985,9 @@ void GameRenderer::updateLightTexture(float a)
const float gs = sky * skyWeight;
const float bs = sky;
const float rb = block * dimR;
const float gb = (block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f)) * dimG;
const float bb = (block * ((block * block) * 0.6f + 0.4f)) * dimB;
const float rb = block;
const float gb = block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f);
const float bb = block * ((block * block) * 0.6f + 0.4f);
float _r = (rs + rb);
float _g = (gs + gb);
@@ -1640,33 +1628,34 @@ void GameRenderer::renderLevel(float a, int64_t until)
// 4J - have changed this fancy rendering option to work with our command buffers. The original used to use frame buffer flags to disable
// writing to colour when doing the z-only pass, but that value gets obliterated by our command buffers. Using alpha blend function instead
// to achieve the same effect.
if (mc->options->ambientOcclusion)
{
GL11::glShadeModel(GL11::GL_SMOOTH);
}
PIXBeginNamedEvent(0,"Fancy second pass - writing z");
glBlendFunc(GL_ZERO, GL_ONE);
glEnable(GL_CULL_FACE);
levelRenderer->render(cameraEntity, 2, a, updateChunks);
PIXEndNamedEvent();
PIXBeginNamedEvent(0, "Fancy second pass - actual render");
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
levelRenderer->render(cameraEntity, 2, a, updateChunks); // 4J - chanaged, used to be renderSameAsLast but we don't support that anymore
PIXEndNamedEvent();
if (mc->options->fancyGraphics)
{
if (mc->options->ambientOcclusion)
{
GL11::glShadeModel(GL11::GL_SMOOTH);
}
glBlendFunc(GL_ZERO, GL_ONE);
PIXBeginNamedEvent(0,"Fancy second pass - writing z");
int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a, updateChunks);
PIXEndNamedEvent();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if (visibleWaterChunks > 0)
{
PIXBeginNamedEvent(0,"Fancy second pass - actual rendering");
levelRenderer->render(cameraEntity, 1, a, updateChunks); // 4J - chanaged, used to be renderSameAsLast but we don't support that anymore
PIXEndNamedEvent();
}
GL11::glShadeModel(GL11::GL_FLAT);
}
// @Patoke todo: implement, this is really important for rendering of order independent alpha objects
// RenderManager.BeginOrderIndependentAlpha();
PIXBeginNamedEvent(0, "Second pass level rendering");
levelRenderer->render(cameraEntity, 1, a, updateChunks);
PIXEndNamedEvent();
else
{
PIXBeginNamedEvent(0,"Second pass level render");
levelRenderer->render(cameraEntity, 1, a, updateChunks);
PIXEndNamedEvent();
}
// 4J - added - have split out translucent particle rendering so that it happens after the water is rendered, primarily for fireworks
PIXBeginNamedEvent(0,"Particle render (translucent)");
@@ -1678,8 +1667,6 @@ void GameRenderer::renderLevel(float a, int64_t until)
particleEngine->render(cameraEntity, a, ParticleEngine::TRANSLUCENT_LIST);
PIXEndNamedEvent();
turnOffLightLayer(a); // 4J - brought forward from 1.8.2
// @Patoke todo: implement
// RenderManager.EndOrderIndependentAlpha();
////////////////////////// End of 4J added section
glDepthMask(true);
@@ -2096,7 +2083,7 @@ void GameRenderer::setupClearColor(float a)
float sg = static_cast<float>(skyColor->y);
float sb = static_cast<float>(skyColor->z);
Vec3 *fogColor = level->getFogColor(player, a);
Vec3 *fogColor = level->getFogColor(a);
fr = static_cast<float>(fogColor->x);
fg = static_cast<float>(fogColor->y);
fb = static_cast<float>(fogColor->z);
@@ -2143,7 +2130,7 @@ void GameRenderer::setupClearColor(float a)
int t = Camera::getBlockAt(mc->level, player, a);
constexpr float INV_256 = 0.00390625f;
const float INV_256 = 0.00390625f;
if (isInClouds)
{
@@ -2329,8 +2316,7 @@ void GameRenderer::setupFog(int i, float alpha)
glFogf(GL_FOG_END, distance);
}
Biome *biome = mc->level->getBiome(static_cast<int>(player->x), static_cast<int>(player->z));
if (biome->isFoggy())
if (mc->level->dimension->isFoggyAt(static_cast<int>(player->x), static_cast<int>(player->z)))
{
glFogf(GL_FOG_START, distance * 0.05f);
glFogf(GL_FOG_END, min(distance, 16 * 16 * .75f) * .5f);