Finish LWJGL fixes

This commit is contained in:
catfoolyou 2025-02-06 15:46:31 -05:00
parent 36c3f15017
commit 56e30eaef1
23 changed files with 103 additions and 184 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
<bytecodeTargetLevel target="18" />
</component>
</project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-18" project-jdk-type="JavaSDK" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="corretto-18" project-jdk-type="JavaSDK" />
</project>

View File

@ -9,7 +9,7 @@ sourceSets {
main {
java {
srcDir 'src/main/java'
srcDir 'src/teavm/java'
srcDir 'src/lwjgl/java'
}
}
}
@ -24,7 +24,7 @@ tasks.withType(JavaCompile) {
}
dependencies {
//implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
implementation fileTree(dir: './lwjgl-rundir/', include: '*.jar')
teavm(teavm.libs.jso)
teavm(teavm.libs.jsoApis)

Binary file not shown.

View File

@ -1,9 +1,7 @@
package net.minecraft.src;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.util.glu.GLU;
public class ActiveRenderInfo
{

View File

@ -2,7 +2,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class GuiAchievement extends Gui
{

View File

@ -1,7 +1,6 @@
package net.minecraft.src;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
import net.lax1dude.eaglercraft.adapter.Tessellator;
class GuiCreateFlatWorldListSlot extends GuiSlot

View File

@ -1,7 +1,6 @@
package net.minecraft.src;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
import net.lax1dude.eaglercraft.adapter.Tessellator;
class GuiFlatPresetsListSlot extends GuiSlot

View File

@ -9,7 +9,6 @@ import net.lax1dude.eaglercraft.EaglercraftRandom;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class GuiIngame extends Gui
{

View File

@ -5,7 +5,6 @@ import java.io.DataOutputStream;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class GuiMerchant extends GuiContainer
{

View File

@ -2,7 +2,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class GuiStats extends GuiScreen
{

View File

@ -3,8 +3,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.EaglerAdapter;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class ItemRenderer
{

View File

@ -136,7 +136,6 @@ public class Minecraft
private ReloadableResourceManager mcResourceManager;
private List defaultResourcePacks = new ArrayList<>();
private DefaultResourcePack mcDefaultResourcePack;
private ResourcePackRepository mcResourcePackRepository;
/**
* Set to true to keep the game loop running. Set to false by shutdown() to allow the game loop to exit cleanly.
@ -2020,11 +2019,6 @@ public class Minecraft
return this.mcResourceManager;
}
public ResourcePackRepository getResourcePackRepository()
{
return this.mcResourcePackRepository;
}
static String getLaunchedVersion(Minecraft par0Minecraft)
{
return "1.6.4";

View File

@ -2,7 +2,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class RenderBlocks
{

View File

@ -1,6 +1,5 @@
package net.minecraft.src;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@ -13,7 +12,6 @@ import net.lax1dude.eaglercraft.EaglercraftRandom;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.ARBOcclusionQuery;
public class RenderGlobal implements IWorldAccess
{
@ -35,6 +33,7 @@ public class RenderGlobal implements IWorldAccess
/** OpenGL render lists base */
private int glRenderListBase;
private int[] glOcclusionQuery;
/** A reference to the Minecraft object. */
private Minecraft mc;
@ -42,9 +41,6 @@ public class RenderGlobal implements IWorldAccess
/** Global render blocks */
private RenderBlocks globalRenderBlocks;
/** OpenGL occlusion query base */
private IntBuffer glOcclusionQueryBase;
/** Is occlusion testing enabled */
private boolean occlusionEnabled;
@ -100,9 +96,6 @@ public class RenderGlobal implements IWorldAccess
/** Count entities hidden */
private int countEntitiesHidden;
/** Occlusion query result */
IntBuffer occlusionResult = GLAllocation.createDirectIntBuffer(64);
/** How many renderers are loaded this frame that try to be rendered */
private int renderersLoaded;
@ -155,25 +148,20 @@ public class RenderGlobal implements IWorldAccess
*/
int frustumCheckOffset;
private int occlusionForcedIndexShift = 0;
public RenderGlobal(Minecraft par1Minecraft, RenderEngine renderEngine)
{
this.mc = par1Minecraft;
this.renderEngine = renderEngine;
byte var2 = 34;
byte var3 = 32;
byte var1 = 16;
this.glRenderListBase = GLAllocation.generateDisplayLists(var2 * var2 * var3 * 3);
this.occlusionEnabled = OpenGlCapsChecker.checkARBOcclusion();
if (this.occlusionEnabled)
{
this.occlusionResult.clear();
this.glOcclusionQueryBase = GLAllocation.createDirectIntBuffer(var2 * var2 * var3);
this.glOcclusionQueryBase.clear();
this.glOcclusionQueryBase.position(0);
this.glOcclusionQueryBase.limit(var2 * var2 * var3);
ARBOcclusionQuery.glGenQueriesARB(this.glOcclusionQueryBase);
this.glOcclusionQuery = new int[var2 * var2 * var1] ;
for(int i = 0; i < glOcclusionQuery.length; ++i) {
this.glOcclusionQuery[i] = -1;
}
this.starGLCallList = GLAllocation.generateDisplayLists(3);
EaglerAdapter.glPushMatrix();
EaglerAdapter.glNewList(this.starGLCallList, EaglerAdapter.GL_COMPILE);
@ -355,12 +343,6 @@ public class RenderGlobal implements IWorldAccess
for (int var6 = 0; var6 < this.renderChunksDeep; ++var6)
{
this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] = new WorldRenderer(this.theWorld, this.tileEntities, var4 * 16, var5 * 16, var6 * 16, this.glRenderListBase + var2);
if (this.occlusionEnabled)
{
this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].glOcclusionQuery = this.glOcclusionQueryBase.get(var3);
}
this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isWaitingOnOcclusionQuery = false;
this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isVisible = true;
this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isInFrustum = true;
@ -569,6 +551,8 @@ public class RenderGlobal implements IWorldAccess
}
}
private long lastOcclusionQuery = 0l;
/**
* Sorts all renderers based on the passed in entity. Args: entityLiving, renderPass, partialTickTime
*/
@ -607,6 +591,10 @@ public class RenderGlobal implements IWorldAccess
double var13 = par1EntityLivingBase.posY - this.prevSortY;
double var15 = par1EntityLivingBase.posZ - this.prevSortZ;
int fx = MathHelper.floor_double(var33);
int fy = MathHelper.floor_double(var7);
int fz = MathHelper.floor_double(var9);
if (var11 * var11 + var13 * var13 + var15 * var15 > 16.0D)
{
this.prevSortX = par1EntityLivingBase.posX;
@ -616,144 +604,104 @@ public class RenderGlobal implements IWorldAccess
Arrays.sort(this.sortedWorldRenderers, new EntitySorter(par1EntityLivingBase));
}
fx = fx >> 4;
fy = MathHelper.floor_double(var7 + par1EntityLivingBase.getEyeHeight()) >> 4;
fz = fz >> 4;
RenderHelper.disableStandardItemLighting();
byte var17 = 0;
int var34;
if (this.occlusionEnabled && this.mc.gameSettings.advancedOpengl && !this.mc.gameSettings.anaglyph && par2 == 0)
{
byte var18 = 0;
int var19 = 16;
this.checkOcclusionQueryResult(var18, var19);
long queryRate = 50l;
for (int var20 = var18; var20 < var19; ++var20)
{
this.sortedWorldRenderers[var20].isVisible = true;
long ct = EaglerAdapter.steadyTimeMillis();
if(par2 == 0) {
for (int i = 0; i < this.sortedWorldRenderers.length; ++i) {
WorldRenderer c = this.sortedWorldRenderers[i];
int ccx = c.posXPlus - fx;
int ccy = c.posYPlus - fy;
int ccz = c.posZPlus - fz;
boolean forced = ccx < 2 && ccx > -2 && ccy < 2 && ccy > -2 && ccz < 2 && ccz > -2;
if(forced || c.chunkIndex == -1) {
c.isVisible = true;
}else if(c.isWaitingOnOcclusionQuery) {
int j = glOcclusionQuery[c.chunkIndex];
if(EaglerAdapter.glGetQueryResultAvailable(j)) {
c.isVisible = EaglerAdapter.glGetQueryResult(j);
c.isWaitingOnOcclusionQuery = false;
}
}
}
}
var34 = var17 + this.renderSortedRenderers(var18, var19, par2, par3);
var34 = var17 + this.renderSortedRenderers(0, this.sortedWorldRenderers.length, par2, par3);
do
{
int var35 = var19;
var19 *= 2;
var7 -= par1EntityLivingBase.getEyeHeight();
if (var19 > this.sortedWorldRenderers.length)
{
var19 = this.sortedWorldRenderers.length;
ct = EaglerAdapter.steadyTimeMillis();
if(par2 == 0 && ct - lastOcclusionQuery > queryRate) {
int totalRenderers = this.sortedWorldRenderers.length;
int inFrustumCount = 0;
for (int i = 0; i < totalRenderers; ++i) {
WorldRenderer c = this.sortedWorldRenderers[i];
if(c.isInFrustum) {
++inFrustumCount;
}
}
EaglerAdapter.glDisable(EaglerAdapter.GL_TEXTURE_2D);
EaglerAdapter.glDisable(EaglerAdapter.GL_LIGHTING);
EaglerAdapter.glDisable(EaglerAdapter.GL_ALPHA_TEST);
EaglerAdapter.glDisable(EaglerAdapter.GL_FOG);
int occlusionForceCount = (int)(500l / queryRate);
int occlusionForceStep = MathHelper.floor_float(inFrustumCount / (float)occlusionForceCount) + 1;
int forceStartIndex = occlusionForcedIndexShift * occlusionForceStep;
int forceEndIndex = forceStartIndex + occlusionForceStep;
++occlusionForcedIndexShift;
if(forceEndIndex + (occlusionForceStep >> 1) > inFrustumCount) {
forceEndIndex = inFrustumCount;
occlusionForcedIndexShift = 0;
}
inFrustumCount = 0;
lastOcclusionQuery = ct;
EaglerAdapter.glEnable(EaglerAdapter.GL_CULL_FACE);
EaglerAdapter.glDisable(EaglerAdapter.GL_BLEND);
EaglerAdapter.glColorMask(false, false, false, false);
EaglerAdapter.glDepthMask(false);
this.checkOcclusionQueryResult(var35, var19);
EaglerAdapter.glPushMatrix();
float var36 = 0.0F;
float var21 = 0.0F;
float var22 = 0.0F;
for (int var23 = var35; var23 < var19; ++var23)
{
if (this.sortedWorldRenderers[var23].skipAllRenderPasses())
{
this.sortedWorldRenderers[var23].isInFrustum = false;
EaglerAdapter.glBindOcclusionBB();
for (int i = 0; i < this.sortedWorldRenderers.length; ++i) {
WorldRenderer c = this.sortedWorldRenderers[i];
int ccx = c.posXPlus - fx;
int ccy = c.posYPlus - fy;
int ccz = c.posZPlus - fz;
boolean shouldTry = c.isInFrustum;
if(c.isInFrustum) {
++inFrustumCount;
if(!shouldTry && inFrustumCount >= forceStartIndex && inFrustumCount < forceEndIndex) {
shouldTry = true;
}
else
{
if (!this.sortedWorldRenderers[var23].isInFrustum)
{
this.sortedWorldRenderers[var23].isVisible = true;
}
if (this.sortedWorldRenderers[var23].isInFrustum && !this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery)
{
float var24 = MathHelper.sqrt_float(this.sortedWorldRenderers[var23].distanceToEntitySquared(par1EntityLivingBase));
int var25 = (int)(1.0F + var24 / 128.0F);
if (this.cloudTickCounter % var25 == var23 % var25)
{
WorldRenderer var26 = this.sortedWorldRenderers[var23];
float var27 = (float)((double)var26.posXMinus - var33);
float var28 = (float)((double)var26.posYMinus - var7);
float var29 = (float)((double)var26.posZMinus - var9);
float var30 = var27 - var36;
float var31 = var28 - var21;
float var32 = var29 - var22;
if (var30 != 0.0F || var31 != 0.0F || var32 != 0.0F)
{
EaglerAdapter.glTranslatef(var30, var31, var32);
var36 += var30;
var21 += var31;
var22 += var32;
if(shouldTry && !(ccx < 2 && ccx > -2 && ccy < 2 && ccy > -2 && ccz < 2 && ccz > -2)) {
if(!c.isWaitingOnOcclusionQuery) {
c.isWaitingOnOcclusionQuery = true;
int q = glOcclusionQuery[c.chunkIndex];
if(q == -1) {
q = glOcclusionQuery[c.chunkIndex] = EaglerAdapter.glCreateQuery();
}
ARBOcclusionQuery.glBeginQueryARB(ARBOcclusionQuery.GL_SAMPLES_PASSED_ARB, this.sortedWorldRenderers[var23].glOcclusionQuery);
this.sortedWorldRenderers[var23].callOcclusionQueryList();
ARBOcclusionQuery.glEndQueryARB(ARBOcclusionQuery.GL_SAMPLES_PASSED_ARB);
this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery = true;
EaglerAdapter.glBeginQuery(q);
EaglerAdapter.glDrawOcclusionBB((float)(c.posX - var33), (float)(c.posY - var7), (float)(c.posZ - var9), 16, 16, 16);
EaglerAdapter.glEndQuery();
}
}
}
}
EaglerAdapter.glPopMatrix();
if (this.mc.gameSettings.anaglyph)
{
if (EntityRenderer.anaglyphField == 0)
{
EaglerAdapter.glColorMask(false, true, true, true);
}
else
{
EaglerAdapter.glColorMask(true, false, false, true);
}
}
else
{
EaglerAdapter.glEndOcclusionBB();
EaglerAdapter.glColorMask(true, true, true, true);
}
EaglerAdapter.glDepthMask(true);
EaglerAdapter.glEnable(EaglerAdapter.GL_TEXTURE_2D);
EaglerAdapter.glEnable(EaglerAdapter.GL_ALPHA_TEST);
EaglerAdapter.glEnable(EaglerAdapter.GL_FOG);
var34 += this.renderSortedRenderers(var35, var19, par2, par3);
}
while (var19 < this.sortedWorldRenderers.length);
}
else
{
var34 = var17 + this.renderSortedRenderers(0, this.sortedWorldRenderers.length, par2, par3);
EaglerAdapter.glEnable(EaglerAdapter.GL_CULL_FACE);
}
return var34;
}
private void checkOcclusionQueryResult(int par1, int par2)
{
for (int var3 = par1; var3 < par2; ++var3)
{
if (this.sortedWorldRenderers[var3].isWaitingOnOcclusionQuery)
{
this.occlusionResult.clear();
ARBOcclusionQuery.glGetQueryObjectuARB(this.sortedWorldRenderers[var3].glOcclusionQuery, ARBOcclusionQuery.GL_QUERY_RESULT_AVAILABLE_ARB, this.occlusionResult);
if (this.occlusionResult.get(0) != 0)
{
this.sortedWorldRenderers[var3].isWaitingOnOcclusionQuery = false;
this.occlusionResult.clear();
ARBOcclusionQuery.glGetQueryObjectuARB(this.sortedWorldRenderers[var3].glOcclusionQuery, ARBOcclusionQuery.GL_QUERY_RESULT_ARB, this.occlusionResult);
this.sortedWorldRenderers[var3].isVisible = this.occlusionResult.get(0) != 0;
}
}
}
}
/**
* Renders the sorted renders for the specified render pass. Args: startRenderer, numRenderers, renderPass,
* partialTickTime

View File

@ -5,7 +5,6 @@ import net.lax1dude.eaglercraft.EaglercraftRandom;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class RenderItem extends Render
{

View File

@ -3,7 +3,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class RenderSnowball extends Render
{

View File

@ -3,7 +3,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class RenderXPOrb extends Render
{

View File

@ -5,7 +5,6 @@ import net.lax1dude.eaglercraft.EaglercraftRandom;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.adapter.Tessellator;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public abstract class RendererLivingEntity extends Render
{

View File

@ -1,15 +1,10 @@
package net.minecraft.src;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.IntBuffer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import org.lwjgl.BufferUtils;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class ScreenShotHelper
{

View File

@ -7,7 +7,6 @@ import javax.imageio.ImageIO;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class TextureUtil
{

View File

@ -2,7 +2,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class TileEntityEnderChestRenderer extends TileEntitySpecialRenderer
{

View File

@ -2,7 +2,6 @@ package net.minecraft.src;
import net.lax1dude.eaglercraft.TextureLocation;
import net.lax1dude.eaglercraft.EaglerAdapter;
import org.lwjgl.opengl.EaglerAdapter;
public class TileEntitySkullRenderer extends TileEntitySpecialRenderer
{