Update #50 - Bug fixes and shader improvements

This commit is contained in:
lax1dude
2025-02-22 16:52:35 -08:00
parent b0a2739fe1
commit 7e772e2502
133 changed files with 3064 additions and 2299 deletions

View File

@ -1,14 +1,11 @@
package net.lax1dude.eaglercraft.v1_8.minecraft;
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
import java.util.LinkedList;
import java.util.List;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU;
import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer;
import net.lax1dude.eaglercraft.v1_8.opengl.WorldVertexBufferUploader;
import net.minecraft.client.Minecraft;
@ -198,9 +195,7 @@ public class ChunkUpdateManager {
}
private void uploadDisplayList(WorldRenderer chunkRenderer, int parInt1, RenderChunk parRenderChunk) {
EaglercraftGPU.glNewList(parInt1, GL_COMPILE);
WorldVertexBufferUploader.func_181679_a(chunkRenderer);
EaglercraftGPU.glEndList();
WorldVertexBufferUploader.uploadDisplayList(parInt1, chunkRenderer);
}
public boolean isAlreadyQueued(RenderChunk update) {

View File

@ -112,7 +112,7 @@ public class EaglerCloudRenderer {
}
if(newState != RENDER_STATE_FAST) {
GlStateManager.disableCull();
GlStateManager.enableCull();
double d0 = this.mc.renderGlobal.getCloudCounter(partialTicks);
double d1 = (rve.prevPosX + (rve.posX - rve.prevPosX) * (double) partialTicks + d0 * 0.029999999329447746D) / 12.0D;
double d2 = (rve.prevPosZ + (rve.posZ - rve.prevPosZ) * (double) partialTicks) / 12.0D + 0.33000001311302185D;
@ -193,7 +193,7 @@ public class EaglerCloudRenderer {
yy = 1;
}
EaglercraftGPU.glCallList(renderListFancy[(yy + 1) * 3 + xx + 1]);
GlStateManager.callList(renderListFancy[(yy + 1) * 3 + xx + 1]);
GlStateManager.popMatrix();
GlStateManager.matrixMode(GL_MODELVIEW);
@ -220,15 +220,15 @@ public class EaglerCloudRenderer {
GlStateManager.matrixMode(GL_TEXTURE);
GlStateManager.pushMatrix();
GlStateManager.translate(f8, f9, 0.0f);
EaglercraftGPU.glCallList(renderList);
GlStateManager.callList(renderList);
GlStateManager.popMatrix();
GlStateManager.matrixMode(GL_MODELVIEW);
GlStateManager.popMatrix();
GlStateManager.enableCull();
}
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableBlend();
GlStateManager.enableCull();
}
private void rebuild(int newState) {
@ -243,11 +243,9 @@ public class EaglerCloudRenderer {
if(renderListFancy[i] == -1) {
renderListFancy[i] = EaglercraftGPU.glGenLists();
}
EaglercraftGPU.glNewList(renderListFancy[i], GL_COMPILE);
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
generateFancyClouds(worldrenderer, i, newState != RENDER_STATE_FANCY_BELOW, newState != RENDER_STATE_FANCY_ABOVE);
tessellator.draw();
EaglercraftGPU.glEndList();
tessellator.uploadDisplayList(renderListFancy[i]);
}
}else {
if(renderList == -1) {
@ -259,24 +257,32 @@ public class EaglerCloudRenderer {
renderListFancy[i] = -1;
}
}
EaglercraftGPU.glNewList(renderList, GL_COMPILE);
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
final double d = 4.8828125E-4;
worldrenderer.pos(-256.0f, 0.0f, 256.0f).tex(-256.0f * d, 256.0f * d).endVertex();
worldrenderer.pos(256.0f, 0.0f, 256.0f).tex(256.0f * d, 256.0f * d).endVertex();
worldrenderer.pos(256.0f, 0.0f, -256.0f).tex(256.0f * d, -256.0f * d).endVertex();
worldrenderer.pos(-256.0f, 0.0f, -256.0f).tex(-256.0f * d, -256.0f * d).endVertex();
tessellator.draw();
EaglercraftGPU.glEndList();
tessellator.uploadDisplayList(renderList);
}
}
private static void generateFancyClouds(WorldRenderer worldrenderer, int mesh, boolean renderAbove, boolean renderBelow) {
int xx = (mesh % 3) - 1;
int yy = (mesh / 3) - 1;
boolean center = xx == 0 && yy == 0 && renderAbove && renderBelow;
if (renderAbove) {
worldrenderer.pos(0.0f, 0.0f, 8.0f).tex(0.0f, 8.0f * 0.00390625F).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 8.0f).tex(8.0f * 0.00390625f, 8.0f * 0.00390625f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 0.0f).tex(8.0f * 0.00390625f, 0.0f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 0.0f, 0.0f).tex(0.0f, 0.0f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 0.0f).tex(8.0f * 0.00390625f, 0.0f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 8.0f).tex(8.0f * 0.00390625f, 8.0f * 0.00390625f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
if(center) {
worldrenderer.pos(0.0f, 0.0f, 8.0f).tex(0.0f, 8.0f * 0.00390625F).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 8.0f).tex(8.0f * 0.00390625f, 8.0f * 0.00390625f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, 0.0f).tex(8.0f * 0.00390625f, 0.0f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 0.0f, 0.0f).tex(0.0f, 0.0f).color(0.7f, 0.7f, 0.7f, 1.0f).endVertex();
}
}
if (renderBelow) {
@ -284,11 +290,14 @@ public class EaglerCloudRenderer {
worldrenderer.pos(8.0f, 4.0f - 9.765625E-4f, 8.0f).tex(8.0f * 0.00390625F, 8.0f * 0.00390625f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f - 9.765625E-4f, 0.0f).tex(8.0f * 0.00390625f, 0.0f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 4.0f - 9.765625E-4f, 0.0f).tex(0.0f, 0.0f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
if(center) {
worldrenderer.pos(0.0f, 4.0f - 9.765625E-4f, 8.0f).tex(0.0f, 8.0f * 0.00390625f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 4.0f - 9.765625E-4f, 0.0f).tex(0.0f, 0.0f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f - 9.765625E-4f, 0.0f).tex(8.0f * 0.00390625f, 0.0f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f - 9.765625E-4f, 8.0f).tex(8.0f * 0.00390625F, 8.0f * 0.00390625f).color(1.0f, 1.0f, 1.0f, 1.0f).endVertex();
}
}
int xx = (mesh % 3) - 1;
int yy = (mesh / 3) - 1;
if (xx != -1) {
for (int j1 = 0; j1 < 8; ++j1) {
worldrenderer.pos(j1, 0.0f, 8.0f).tex((j1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f)
@ -299,6 +308,16 @@ public class EaglerCloudRenderer {
.endVertex();
worldrenderer.pos(j1, 0.0f, 0.0f).tex((j1 + 0.5f) * 0.00390625f, 0.0f).color(0.9f, 0.9f, 0.9f, 1.0f)
.endVertex();
if(center) {
worldrenderer.pos(j1, 0.0f, 8.0f).tex((j1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(j1, 0.0f, 0.0f).tex((j1 + 0.5f) * 0.00390625f, 0.0f).color(0.9f, 0.9f, 0.9f, 1.0f)
.endVertex();
worldrenderer.pos(j1, 4.0f, 0.0f).tex((j1 + 0.5f) * 0.00390625f, 0.0f).color(0.9f, 0.9f, 0.9f, 1.0f)
.endVertex();
worldrenderer.pos(j1, 4.0f, 8.0f).tex((j1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
}
}
}
@ -306,12 +325,22 @@ public class EaglerCloudRenderer {
for (int k1 = 0; k1 < 8; ++k1) {
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 0.0f, 8.0f)
.tex((k1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f).color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 8.0f)
.tex((k1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f).color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 0.0f).tex((k1 + 0.5f) * 0.00390625f, 0.0f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 0.0f, 0.0f).tex((k1 + 0.5f) * 0.00390625f, 0.0f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 0.0f).tex((k1 + 0.5f) * 0.00390625f, 0.0f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 8.0f)
.tex((k1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f).color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
if(center) {
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 0.0f, 8.0f)
.tex((k1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f).color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 8.0f)
.tex((k1 + 0.5f) * 0.00390625f, 8.0f * 0.00390625f).color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 4.0f, 0.0f).tex((k1 + 0.5f) * 0.00390625f, 0.0f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
worldrenderer.pos(k1 + 1.0f - 9.765625E-4f, 0.0f, 0.0f).tex((k1 + 0.5f) * 0.00390625f, 0.0f)
.color(0.9f, 0.9f, 0.9f, 1.0f).endVertex();
}
}
}
@ -325,6 +354,16 @@ public class EaglerCloudRenderer {
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 0.0f, l1).tex(0.0f, (l1 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f)
.endVertex();
if(center) {
worldrenderer.pos(0.0f, 4.0f, l1).tex(0.0f, (l1 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f)
.endVertex();
worldrenderer.pos(0.0f, 0.0f, l1).tex(0.0f, (l1 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f)
.endVertex();
worldrenderer.pos(8.0f, 0.0f, l1).tex(8.0f * 0.00390625f, (l1 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f, l1).tex(8.0f * 0.00390625f, (l1 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
}
}
}
@ -332,12 +371,22 @@ public class EaglerCloudRenderer {
for (int i2 = 0; i2 < 8; ++i2) {
worldrenderer.pos(0.0f, 4.0f, i2 + 1.0f - 9.765625E-4f).tex(0.0f, (i2 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 0.0f, i2 + 1.0f - 9.765625E-4f).tex(0.0f, (i2 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
if(center) {
worldrenderer.pos(0.0f, 4.0f, i2 + 1.0f - 9.765625E-4f).tex(0.0f, (i2 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 4.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(8.0f, 0.0f, i2 + 1.0f - 9.765625E-4f)
.tex(8.0f * 0.00390625f, (i2 + 0.5f) * 0.00390625f).color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
worldrenderer.pos(0.0f, 0.0f, i2 + 1.0f - 9.765625E-4f).tex(0.0f, (i2 + 0.5f) * 0.00390625f)
.color(0.8f, 0.8f, 0.8f, 1.0f).endVertex();
}
}
}
}

View File

@ -0,0 +1,72 @@
/*
* Copyright (c) 2025 lax1dude. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
package net.lax1dude.eaglercraft.v1_8.minecraft;
import java.io.IOException;
import net.lax1dude.eaglercraft.v1_8.internal.IFramebufferGL;
import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU;
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
import net.minecraft.client.renderer.texture.AbstractTexture;
import net.minecraft.client.renderer.texture.TextureUtil;
import net.minecraft.client.resources.IResourceManager;
import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*;
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
public class MainMenuSkyboxTexture extends AbstractTexture {
public static final int _GL_FRAMEBUFFER = 0x8D40;
public static final int _GL_COLOR_ATTACHMENT0 = 0x8CE0;
private IFramebufferGL framebuffer = null;
public MainMenuSkyboxTexture(int width, int height) {
TextureUtil.allocateTexture(this.getGlTextureId(), width, height);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
EaglercraftGPU.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
}
@Override
public void loadTexture(IResourceManager var1) throws IOException {
}
public void bindFramebuffer() {
if(framebuffer == null) {
framebuffer = _wglCreateFramebuffer();
_wglBindFramebuffer(_GL_FRAMEBUFFER, framebuffer);
int tex = getGlTextureId();
GlStateManager.bindTexture(tex);
_wglFramebufferTexture2D(_GL_FRAMEBUFFER, _GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
EaglercraftGPU.getNativeTexture(tex), 0);
}else {
_wglBindFramebuffer(_GL_FRAMEBUFFER, framebuffer);
}
_wglDrawBuffers(new int[] { _GL_COLOR_ATTACHMENT0 });
}
public void deleteGlTexture() {
super.deleteGlTexture();
if(framebuffer != null) {
_wglDeleteFramebuffer(framebuffer);
framebuffer = null;
}
}
}