diff --git a/glsm/src/main/java/com/gtnewhorizons/angelica/glsm/GLStateManager.java b/glsm/src/main/java/com/gtnewhorizons/angelica/glsm/GLStateManager.java index 8c3538bbb..3b9d51faa 100644 --- a/glsm/src/main/java/com/gtnewhorizons/angelica/glsm/GLStateManager.java +++ b/glsm/src/main/java/com/gtnewhorizons/angelica/glsm/GLStateManager.java @@ -1051,6 +1051,7 @@ public class GLStateManager { case GL11.GL_SHADE_MODEL -> shadeModelState.getValue(); // GL_TEXTURE_2D makes no sense here, but some mod still queries it... case GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_BINDING_2D -> getBoundTextureForServerState(); + case GL13.GL_ACTIVE_TEXTURE -> GL13.GL_TEXTURE0 + getActiveTextureUnitForServerState(); case GL11.GL_COLOR_MATERIAL_FACE -> colorMaterialFace.getValue(); case GL11.GL_COLOR_MATERIAL_PARAMETER -> colorMaterialParameter.getValue(); case GL11.GL_MODELVIEW_STACK_DEPTH -> getMatrixStackDepth(modelViewMatrix); @@ -1059,15 +1060,18 @@ public class GLStateManager { case GL12.GL_LIGHT_MODEL_COLOR_CONTROL -> lightModel.colorControl; case GL14.GL_BLEND_DST_ALPHA -> blendState.getDstAlpha(); - case GL14.GL_BLEND_DST_RGB -> blendState.getDstRgb(); + case GL11.GL_BLEND_DST, GL14.GL_BLEND_DST_RGB -> blendState.getDstRgb(); case GL14.GL_BLEND_SRC_ALPHA -> blendState.getSrcAlpha(); - case GL14.GL_BLEND_SRC_RGB -> blendState.getSrcRgb(); + case GL11.GL_BLEND_SRC, GL14.GL_BLEND_SRC_RGB -> blendState.getSrcRgb(); case GL14.GL_BLEND_EQUATION -> blendState.getEquationRgb(); case GL20.GL_BLEND_EQUATION_ALPHA -> blendState.getEquationAlpha(); case GL11.GL_LOGIC_OP_MODE -> logicOpMode.getValue(); case GL11.GL_DRAW_BUFFER -> drawBuffer.getValue(); + case GL11.GL_CULL_FACE_MODE -> polygonState.getCullFaceMode(); + case GL11.GL_FRONT_FACE -> polygonState.getFrontFace(); + case GL11.GL_STENCIL_FUNC -> stencilState.getFuncFront(); case GL11.GL_STENCIL_REF -> stencilState.getRefFront(); case GL11.GL_STENCIL_VALUE_MASK -> stencilState.getValueMaskFront(); @@ -1106,6 +1110,10 @@ public class GLStateManager { switch (pname) { case GL11.GL_VIEWPORT -> viewportState.get(params); + case GL11.GL_POLYGON_MODE -> { + params.put(0, polygonState.getFrontMode()); + params.put(1, polygonState.getBackMode()); + } default -> { if (!HAS_MULTIPLE_SET.contains(pname)) { params.put(0, glGetInteger(pname)); diff --git a/glsm/src/test/java/com/gtnewhorizons/angelica/glsm/GLSM_PushPop_UnitTest.java b/glsm/src/test/java/com/gtnewhorizons/angelica/glsm/GLSM_PushPop_UnitTest.java index 1220a064e..d799766d7 100644 --- a/glsm/src/test/java/com/gtnewhorizons/angelica/glsm/GLSM_PushPop_UnitTest.java +++ b/glsm/src/test/java/com/gtnewhorizons/angelica/glsm/GLSM_PushPop_UnitTest.java @@ -1131,4 +1131,52 @@ class GLSM_PushPop_UnitTest { GLStateManager.glActiveTexture(GL13.GL_TEXTURE0); GLStateManager.glDisable(GL11.GL_TEXTURE_2D); } + + @Test + void testBlendFuncGL11AliasesMatchGL14() { + GLStateManager.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + verifyState(GL11.GL_BLEND_SRC, GL11.GL_SRC_ALPHA, "Blend Source"); + verifyState(GL14.GL_BLEND_SRC_RGB, GL11.GL_SRC_ALPHA, "Blend Source RGB"); + verifyState(GL11.GL_BLEND_DST, GL11.GL_ONE_MINUS_SRC_ALPHA, "Blend Destination"); + verifyState(GL14.GL_BLEND_DST_RGB, GL11.GL_ONE_MINUS_SRC_ALPHA, "Blend Destination RGB"); + + GLStateManager.glBlendFunc(GL11.GL_ONE, GL11.GL_ZERO); + } + + @Test + void testBlendFuncSeparateGL11AliasesTrackRgb() { + GLStateManager.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + + verifyState(GL11.GL_BLEND_SRC, GL11.GL_SRC_ALPHA, "Blend Source"); + verifyState(GL11.GL_BLEND_DST, GL11.GL_ONE_MINUS_SRC_ALPHA, "Blend Destination"); + verifyState(GL14.GL_BLEND_SRC_ALPHA, GL11.GL_ONE, "Blend Source Alpha"); + verifyState(GL14.GL_BLEND_DST_ALPHA, GL11.GL_ZERO, "Blend Destination Alpha"); + + GLStateManager.glBlendFunc(GL11.GL_ONE, GL11.GL_ZERO); + } + + @Test + void testPolygonStateReadBack() { + GLStateManager.glCullFace(GL11.GL_FRONT); + GLStateManager.glFrontFace(GL11.GL_CW); + GLStateManager.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE); + + verifyState(GL11.GL_CULL_FACE_MODE, GL11.GL_FRONT, "Cull Face Mode"); + verifyState(GL11.GL_FRONT_FACE, GL11.GL_CW, "Front Face"); + verifyState(GL11.GL_POLYGON_MODE, new int[] { GL11.GL_LINE, GL11.GL_LINE }, "Polygon Mode"); + + GLStateManager.glCullFace(GL11.GL_BACK); + GLStateManager.glFrontFace(GL11.GL_CCW); + GLStateManager.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL); + } + + @Test + void testActiveTextureReadBack() { + GLStateManager.glActiveTexture(GL13.GL_TEXTURE1); + verifyState(GL13.GL_ACTIVE_TEXTURE, GL13.GL_TEXTURE1, "Active Texture"); + + GLStateManager.glActiveTexture(GL13.GL_TEXTURE0); + verifyState(GL13.GL_ACTIVE_TEXTURE, GL13.GL_TEXTURE0, "Active Texture - Reset"); + } }