Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package demominer.gui.drawer;
- import demominer.UI.component.Component;
- import demominer.UI.component.Container;
- import demominer.resources.Resources;
- import demominer.sprite.SpriteImage;
- import demominer.sprite.SpriteSheet;
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- import java.nio.IntBuffer;
- import org.lwjgl.LWJGLException;
- import org.lwjgl.opengl.Display;
- import org.lwjgl.opengl.DisplayMode;
- import org.lwjgl.opengl.EXTFramebufferObject;
- import org.lwjgl.opengl.GL11;
- /**
- *
- * @author Szoltomi
- */
- public class DrawerMethods extends Thread {
- public static void initDraw(int width, int height) {
- try {
- Display.setDisplayMode(new DisplayMode(width, height));
- Display.create();
- } catch (LWJGLException e) {
- e.printStackTrace();
- System.exit(0);
- }
- GL11.glMatrixMode(GL11.GL_PROJECTION);
- GL11.glLoadIdentity();
- GL11.glOrtho(0, width, 0, height, -1000, 1000);
- GL11.glMatrixMode(GL11.GL_MODELVIEW);
- GL11.glEnable(GL11.GL_BLEND);
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- GL11.glDisable(GL11.GL_CULL_FACE);
- GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
- GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
- }
- public static int[] initFBOTexture(int width, int height) {
- IntBuffer buffer = ByteBuffer.allocateDirect(1 * 4).order(ByteOrder.nativeOrder()).asIntBuffer();
- EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate
- int FBOId = buffer.get();
- EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, FBOId);
- //setting up depthbuffer
- int depthbuffer = EXTFramebufferObject.glGenRenderbuffersEXT();
- EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, depthbuffer);
- EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT,
- GL11.GL_DEPTH_COMPONENT,
- width, height);
- EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT,
- EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT,
- EXTFramebufferObject.GL_RENDERBUFFER_EXT, depthbuffer);
- //setting up color buffer
- int texId;
- texId = GL11.glGenTextures();
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, texId);
- GL11.glTexImage2D(GL11.GL_TEXTURE_2D,
- 0,
- GL11.GL_RGBA8,
- width, height,
- 0,
- GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (IntBuffer) null);
- EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT,
- EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT,
- GL11.GL_TEXTURE_2D,
- texId, 0);
- EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
- int framebuffer = EXTFramebufferObject.glCheckFramebufferStatusEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT);
- switch (framebuffer) {
- case EXTFramebufferObject.GL_FRAMEBUFFER_COMPLETE_EXT:
- break;
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT exception");
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT exception");
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT exception");
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT exception");
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT exception");
- case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
- throw new RuntimeException("FrameBuffer: " + FBOId
- + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT exception");
- default:
- throw new RuntimeException("Unexpected reply from glCheckFramebufferStatusEXT: " + framebuffer);
- }
- return new int[]{FBOId, texId};
- }
- public static void bindFBO(int[] fbo) {
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, fbo[1]);
- EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, fbo[0]);
- }
- public static void unbindFBO() {
- EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
- }
- public static void initDrawSprites(SpriteSheet sheet) {
- GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
- GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, sheet.textureId);
- GL11.glBegin(GL11.GL_QUADS);
- setColor(1f, 1f, 1f, 1f);
- }
- public static void setColor(double red, double green, double blue, double alpha) {
- GL11.glColor4d(red, green, blue, alpha);
- }
- public static void drawEnd() {
- GL11.glEnd();
- }
- public static void clear() {
- GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
- }
- public static void checkErrors() {
- int error = GL11.glGetError();
- if (error != 0) {
- System.out.println(error);
- }
- }
- public static void drawUiComponent(Component c) {
- drawUiComponent(c, 0, 0);
- }
- public static void drawUiComponent(Component c, int offsetX, int offsetY) {
- //draw the background, if exists
- if (c.getBackground() != null) {
- initDrawSprites(c.background.getSpriteSheet());
- drawSpriteImage(c.posX + offsetX, c.posY + offsetY, 0, c.getBackground());
- drawEnd();
- }
- //draw the border
- if (c.border != null) {
- initDrawSprites(c.border.sheet);
- drawSpriteImage(c.posX + offsetX,
- c.posY + offsetY, 0,
- c.border.cornerTopLeft);
- drawSpriteImage(c.posX + offsetX + c.sizeX - c.border.cornerTopRight.getWidth(),
- c.posY + offsetY,
- 0, c.border.cornerTopRight);
- drawSpriteImage(c.posX + offsetX,
- c.posY + offsetY + c.sizeY - c.border.cornerBottomLeft.getHeight(),
- 0, c.border.cornerBottomLeft);
- drawSpriteImage(c.posX + offsetX + c.sizeX - c.border.cornerBottomRight.getWidth(),
- c.posY + offsetY + c.sizeY - c.border.cornerBottomRight.getHeight(),
- 0, c.border.cornerBottomRight);
- for (int i = c.posX + offsetX + c.border.cornerTopLeft.getWidth();
- i < c.posX + offsetX + c.sizeX - c.border.cornerTopRight.getWidth();
- i += c.border.top.getWidth()) {
- drawSpriteImage(i, c.posY + offsetY, 0, c.border.top);
- }
- for (int i = c.posX + offsetX + c.border.cornerBottomLeft.getWidth();
- i < c.posX + offsetX + c.sizeX - c.border.cornerBottomRight.getWidth();
- i += c.border.bottom.getWidth()) {
- drawSpriteImage(i, c.posY + c.sizeY + offsetY - c.border.bottom.getHeight(), 0, c.border.bottom);
- }
- for (int i = c.posY + offsetY + c.border.cornerTopLeft.getHeight();
- i < c.posY + offsetY + c.sizeY - c.border.cornerBottomLeft.getHeight();
- i += c.border.left.getHeight()) {
- drawSpriteImage(c.posX + offsetX, i, 0, c.border.left);
- }
- for (int i = c.posY + offsetY + c.border.cornerTopRight.getHeight();
- i < c.posY + offsetY + c.sizeY - c.border.cornerBottomRight.getHeight();
- i += c.border.right.getHeight()) {
- drawSpriteImage(c.posX + c.sizeX + offsetX - c.border.right.getWidth(), i, 0, c.border.right);
- }
- GL11.glEnd();
- }
- //draw the contained ones recursively.
- if (c instanceof Container) {
- Container cont = (Container) c;
- for (Component innerComp : cont.getComponents()) {
- drawUiComponent(innerComp, c.posX, c.posY);
- }
- }
- }
- public static void viewMatrix(long x, long y, double zoom) {
- GL11.glMatrixMode(GL11.GL_MODELVIEW);
- GL11.glLoadIdentity();
- GL11.glScaled(zoom, zoom, 0f);
- GL11.glTranslated(x, y, 0);
- }
- public static void viewZoom(double zoom) {
- GL11.glMatrixMode(GL11.GL_MODELVIEW);
- GL11.glLoadIdentity();
- GL11.glScaled(zoom, zoom, 0f);
- }
- public static void flip() {
- GL11.glScaled(1f, -1f, 0f);
- }
- public static void viewTranslation(long x, long y) {
- GL11.glMatrixMode(GL11.GL_MODELVIEW);
- GL11.glLoadIdentity();
- GL11.glTranslated(x, y, 0);
- }
- public static void drawSpriteImage(long x, long y, int z, SpriteImage sprImg) {
- drawSpriteImage(x, y, z, 1f, sprImg);
- }
- public static void drawSpriteImage(long x, long y, int z, double scale, SpriteImage sprImg) {
- if (sprImg == null) {
- return;
- }
- double width = sprImg.getWidth() * scale;
- double height = sprImg.getHeight() * scale;
- GL11.glTexCoord2f(sprImg.getU1(), sprImg.getV1());
- GL11.glVertex3d(x, y, z);
- GL11.glTexCoord2f(sprImg.getU2(), sprImg.getV1());
- GL11.glVertex3d(x + width, y, z);
- GL11.glTexCoord2f(sprImg.getU2(), sprImg.getV2());
- GL11.glVertex3d(x + width, y + height, z);
- GL11.glTexCoord2f(sprImg.getU1(), sprImg.getV2());
- GL11.glVertex3d(x, y + height, z);
- }
- public static void drawSpriteImageCentered(long x, long y, int z, double scale, SpriteImage sprImg) {
- drawSpriteImage((long) (x - (sprImg.getWidth() * scale) / 2),
- (long) (y - (sprImg.getHeight() * scale) / 2),
- z,
- scale,
- sprImg);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement