CAS_ual_TY Posted August 16, 2019 Share Posted August 16, 2019 (edited) Hello, I would like to render my GUI content inside a certain rectangle with anything beyond the edge of that rectangle getting cut off. I have looked into the advancement GUI for that but it is honestly too confusing for me. (I also tried google) Personally I think it is done here (but I am not sure and I would also like to understand why and how): GuiScreenAdvancement:176 If anyone could point me in the right direction that would be great. I would really like to understand how this works. I mean I could also just check every single element, if it is at the edge and then adjust it, but I am quite sure there is a simpler solution to this (?). Thanks in advance! Any tip or piece of knowledge would be greatly appreciated EDIT: Fixed spoiler and formatting Edited August 17, 2019 by CAS_ual_TY Quote https://github.com/CAS-ual-TY/Visibilis [1.14] How to Villagers, Trades, Professions, Fix Trades https://minecraft.curseforge.com/projects/gun-customization-infinity / https://github.com/CAS-ual-TY/GunCus https://minecraft.curseforge.com/projects/ygo-dueling-mod https://minecraft.curseforge.com/projects/mundus-magicus https://minecraft.curseforge.com/projects/deuf-duplicate-entity-uuid-fix Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 17, 2019 Share Posted August 17, 2019 6 hours ago, CAS_ual_TY said: I have looked into the advancement GUI for that but it is honestly too confusing for me. (I also tried google) First off dont post code that isnt yours here or anywhere without permission from the writers. Second when you render your image you specify where on your image you want to start at (x, y) then you specify where on the screen (x, y) then you give the width and height to the method. So if you want the image to have a scrolling appearance change where on the image you want to start. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
gendeathrow Posted August 17, 2019 Share Posted August 17, 2019 Animefan8888 is right about creating a scrolling image by changing the start,height. I wrote most of my guis like that, But if you were wanting to have a bunch of images and text and dont want to write all the logic for that. Than I have used GL Scissor to do what your asking. I've used it to draw scroll-able guis inside other guis. Anything outside the borders will get cut off. Spoiler GL_SCISSOR_TEST: public drawScreen(int mouseX, int mouseY, float partialTicks){ GL11.glEnable(GL11.GL_SCISSOR_TEST); GlStateManager.disableLighting(); guiScissor(mc, x, y, width, height); CallYourDrawCode(mouseX, mouseY, partialTicks); GlStateManager.enableLighting(); GL11.glDisable(GL11.GL_SCISSOR_TEST); } // This gets the scaledResolution to get proper placement. public static void guiScissor(Minecraft mc, int x, int y, int w, int h){ ScaledResolution r = new ScaledResolution(mc); int f = r.getScaleFactor(); GL11.glScissor(x * f, (r.getScaledHeight() - y - h)*f, w * f, h * f); } It really depends on what you trying to do. As this can be a bit much for a simple scrolling window. You will still have to handle all the key inputs & mouse inputs. This only handles the rendering. Also This was written for mc1.12.2. 2 Quote Link to comment Share on other sites More sharing options...
CAS_ual_TY Posted August 17, 2019 Author Share Posted August 17, 2019 13 hours ago, Animefan8888 said: First off dont post code that isnt yours here or anywhere without permission from the writers. Second when you render your image you specify where on your image you want to start at (x, y) then you specify where on the screen (x, y) then you give the width and height to the method. So if you want the image to have a scrolling appearance change where on the image you want to start. I removed the code you are right. I was thinking I would be posting a general concept instead of someone's code which is obviously not true. I should have emphasized it a bit more that I was looking for something the glScissor solution. I mentioned it slightly below the spoiler but I should have been more clear. 10 hours ago, gendeathrow said: Animefan8888 is right about creating a scrolling image by changing the start,height. I wrote most of my guis like that, But if you were wanting to have a bunch of images and text and dont want to write all the logic for that. Than I have used GL Scissor to do what your asking. I've used it to draw scroll-able guis inside other guis. Anything outside the borders will get cut off. Reveal hidden contents GL_SCISSOR_TEST: public drawScreen(int mouseX, int mouseY, float partialTicks){ GL11.glEnable(GL11.GL_SCISSOR_TEST); GlStateManager.disableLighting(); guiScissor(mc, x, y, width, height); CallYourDrawCode(mouseX, mouseY, partialTicks); GlStateManager.enableLighting(); GL11.glDisable(GL11.GL_SCISSOR_TEST); } // This gets the scaledResolution to get proper placement. public static void guiScissor(Minecraft mc, int x, int y, int w, int h){ ScaledResolution r = new ScaledResolution(mc); int f = r.getScaleFactor(); GL11.glScissor(x * f, (r.getScaledHeight() - y - h)*f, w * f, h * f); } It really depends on what you trying to do. As this can be a bit much for a simple scrolling window. You will still have to handle all the key inputs & mouse inputs. This only handles the rendering. Also This was written for mc1.12.2. Thank you, this is exactly what I was looking for. The following is how I did it: /** * Cut everything off outside the given rectangle. Call this, then the all the draw code, then {@link #innerEnd()} for cleanup. * @param x Pos X of the rectangle. * @param y Pos Y of the rectangle. * @param w Width of the rectangle. * @param h Height of the rectangle. */ protected void innerStart(int x, int y, int w, int h) { GL11.glEnable(GL11.GL_SCISSOR_TEST); //* scaleFactor due to the automatic resizing depending on window size (or the GUI size settings) //All the derparoundery with the Y position because Minecraft 0,0 is at the top left, but lwjgl 0,0 is at the bottom left GL11.glScissor(x * this.sr.getScaleFactor(), (this.sr.getScaledHeight() - y - h) * this.sr.getScaleFactor(), w * this.sr.getScaleFactor(), h * this.sr.getScaleFactor()); this.applyZoomAndShift(); GL11.glPushMatrix(); } /** * Scissor cleanup. Call {@link #innerStart(int, int, int, int)}, then all the draw code, then this. */ protected void innerEnd() { GL11.glPopMatrix(); GL11.glDisable(GL11.GL_SCISSOR_TEST); } From: https://github.com/CAS-ual-TY/Visibilis/blob/bee136b8243cbd7796be3b334cf5c681d38a5347/src/main/java/de/cas_ual_ty/visibilis/GuiPrint.java#L394 (Experimental, untested code, the entire GUI. Something could be terribly wrong, everything in this repo is only theory. I was too lazy yet to write a ReadMe pls no shame) Thanks for the help. Quote https://github.com/CAS-ual-TY/Visibilis [1.14] How to Villagers, Trades, Professions, Fix Trades https://minecraft.curseforge.com/projects/gun-customization-infinity / https://github.com/CAS-ual-TY/GunCus https://minecraft.curseforge.com/projects/ygo-dueling-mod https://minecraft.curseforge.com/projects/mundus-magicus https://minecraft.curseforge.com/projects/deuf-duplicate-entity-uuid-fix Link to comment Share on other sites More sharing options...
gendeathrow Posted August 17, 2019 Share Posted August 17, 2019 Glad that helps.. I like that function layout too. I had always planed to do that. but been too lazy. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.