Social Icons

Sunday, 24 June 2012

[TUT] using glScissor for better scrollable areas

Credit TO:=  jonalu
I have recently been fully recoding the jClient GUI and thought that scrollable hack lists would be nice for a resizable window gui. Well, my first guess was to simply show the rows and scroll down one row for each 120° wheel. (that may sound complicated, you cant really explain it)
demonstration on main menu changelog:
[Image: 6cqUEuiw0E.png]

[Image: LwYOO2BXkS.png]

As you can see, you cant simply make it scroll like half a row, it would go over the rectangle. hope i explained that well.
Now the fix I made:
[Image: TRLMDg2EO2.png]

[Image: snbCY6rBkW.png]

you can see that you cant see all of the text, but only a bit. I think it looks much better and smoother than the other one. You could even add some effects such as a small shadow gradient to it or whatever. How I actually did this:
There is a function in lwjgl that lets you define a scissor box. using it is a bit complicated as its axis start in the bottom left corner and it ignores glscale. When you defined a scissor box, you can glEnable a "filter" called GL_SCISSOR_TEST. that will not draw any pixels outside of that box. like that you can "cut them off". When you want to change it back to normal, just glDisable GL_SCISSOR_TEST again. The code to set up a scissor box I made:
[Image: k6pQFwUe8y.png]

it basically calculates the first corner x and y, calculates width and height of the rect and calculates the guiscale minecraft uses with it.

  1. you call that code with the rect you want to fill
  2. you glEnable GL_SCISSORS_TEST before drawing that area
  3. you disable it again after finishing that area.

That is basically it. I do know I cant explain shit, but if you dont understand how to use this, then simply dont. I would love some credit if you use this, but I will probably never get credits in the griefing section ;)
I will not answer anything about this on skype if you dont know me for longer already.

No comments:

Post a Comment