Posted June 15, 20169 yr Hey there, as i tried to port my InGameConfigManager to 1.9.4 i ran into a problem. Item rendering isn't working as it should. This isn't the first time i ran into that problem. So i tried to fix it. Unfortunately, without any success. I have tried various things to setup OpenGL properly in order to correct the lighting effect. GlStateManager.enableRescaleNormal(); GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderHelper.enableGUIStandardItemLighting(); After a lot of pain and headaches, i eventually found out, if i add this line GlStateManager.loadIdentity(); it will make all itemstacks disappear, but once i remove it again it will fix the non lighting issue, although it's still not as it should be. Although i have been modding Minecraft for several years now, i have no idea what is causing this issue. It's seems like i'm missing something to setup OpenGL properly to rendering an itemstack in the correct way. So i would be very happy, if someone can help me out. In Regards CreativeMD
June 16, 20169 yr Author Should , but it doesn't Due to a gui-api the rendering is done by different controls and so on. I copied every necessary code and included the methods itself: Style style = getStyle(); Vec3d centerOffset = getCenterOffset(); GlStateManager.pushMatrix(); GlStateManager.translate(posX+centerOffset.xCoord, posY+centerOffset.yCoord, 0); GlStateManager.rotate(rotation, 0, 0, 1); GlStateManager.translate(-centerOffset.xCoord, -centerOffset.yCoord, 0); GlStateManager.scale(scale, scale, 0); renderBackground(helper, style); int spaceUsed = getContentOffset(); GlStateManager.translate(marginWidth, marginWidth, 0); GL11.glEnable(GL11.GL_STENCIL_TEST); GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); GL11.glStencilFunc(GL11.GL_EQUAL, 0x1, 0x1); renderContent(helper, style, width-spaceUsed*2, height-spaceUsed*2, relativeMaximumRect);{ float scale = getScaleFactor(); int xOffset = getOffsetX(); int yOffset = getOffsetY(); Rect newRect = relativeMaximumRect.mergeRects(getRect()); lastRenderedHeight = 0; for (int i = controls.size()-1; i >= 0; i--) { GuiControl control = controls.get(i); if(control.visible && control.isVisibleInsideRect(-xOffset, -yOffset, width, height, scale)) { GL11.glEnable(GL11.GL_STENCIL_TEST); prepareContentStencil(helper, relativeMaximumRect); GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); GL11.glStencilFunc(GL11.GL_EQUAL, 0x1, 0x1); GlStateManager.pushMatrix(); GlStateManager.translate(xOffset, yOffset, 0); control.renderControl(helper, scale, newRect.getOffsetRect(xOffset, yOffset));{ Style style = getStyle(); Vec3d centerOffset = getCenterOffset(); GlStateManager.pushMatrix(); GlStateManager.translate(posX+centerOffset.xCoord, posY+centerOffset.yCoord, 0); GlStateManager.rotate(rotation, 0, 0, 1); GlStateManager.translate(-centerOffset.xCoord, -centerOffset.yCoord, 0); //GlStateManager.translate(x, y, 0); GlStateManager.scale(scale, scale, 0); renderBackground(helper, style); int spaceUsed = getContentOffset(); GlStateManager.translate(marginWidth, marginWidth, 0); GL11.glEnable(GL11.GL_STENCIL_TEST); GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); GL11.glStencilFunc(GL11.GL_EQUAL, 0x1, 0x1); renderContent(helper, style, width-spaceUsed*2, height-spaceUsed*2, relativeMaximumRect);{ super.renderContent(helper, style, width, height);{ if(shouldDrawTitle()) helper.drawStringWithShadow(caption, 0, 0, width, height, getColor(), getAdditionalSize()); } GlStateManager.pushMatrix(); GlStateManager.translate(width/2-(helper.getStringWidth(caption)+getAdditionalSize())/2, height/2-avatarSize/2, 0); avatar.handleRendering(helper, avatarSize, avatarSize); //Rendering of the itemstack is done here { GuiRenderHelper.instance.drawItemStack(stack, 0, 0, avatarSize, avatarSize); } GlStateManager.popMatrix(); } GL11.glDisable(GL11.GL_STENCIL_TEST); GlStateManager.translate(-spaceUsed, -spaceUsed, 0); renderForeground(helper, style); GlStateManager.popMatrix(); } GlStateManager.popMatrix(); GL11.glDisable(GL11.GL_STENCIL_TEST); } lastRenderedHeight = (int) Math.max(lastRenderedHeight, (control.posY+control.height)*scale); } renderContent(helper, style, width, height); } GL11.glDisable(GL11.GL_STENCIL_TEST); GlStateManager.translate(-spaceUsed, -spaceUsed, 0); renderForeground(helper, style); GlStateManager.popMatrix(); Outside of this code itemstack renderer rendering works without any issue. Example code: GlStateManager.pushMatrix(); GL11.glEnable(GL11.GL_STENCIL_TEST); GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); GL11.glStencilFunc(GL11.GL_EQUAL, 0x1, 0x1); GuiControl.defaultStyle.getBorder(layers.get(i)).renderStyle(GuiRenderHelper.instance, 100, 100); GuiControl.defaultStyle.getBackground(layers.get(i)).renderStyle(10, 10, GuiRenderHelper.instance, 80, 80); GuiRenderHelper.instance.font.drawStringWithShadow("Hey", 20, 20, ColorUtils.WHITE); GuiRenderHelper.instance.drawItemStack(new ItemStack(Blocks.REDSTONE_TORCH), 8, 8, 16, 16); GuiRenderHelper.instance.drawItemStack(new ItemStack(Blocks.FURNACE), 8, 48, 16, 16); GL11.glDisable(GL11.GL_STENCIL_TEST); GlStateManager.popMatrix(); To be honest, i have no idea would could cause an issue like that
June 17, 20169 yr Author F***, oh my ... the mistake is sooo simple and easy. Just take a closer look at this here: GlStateManager.scale(scale, scale, 0); and can you see the mistake? one little line can ruin everything :blank: :blank: z scaling zero will result in a plane, which will of course mess up the lighting. I changed it to GlStateManager.scale(scale, scale, 1); and everything works just fine.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.