Advertisement
szoltomi

DrawerMethods

Aug 31st, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.49 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package demominer.gui.drawer;
  6.  
  7. import demominer.UI.component.Component;
  8. import demominer.UI.component.Container;
  9. import demominer.resources.Resources;
  10. import demominer.sprite.SpriteImage;
  11. import demominer.sprite.SpriteSheet;
  12. import java.nio.ByteBuffer;
  13. import java.nio.ByteOrder;
  14. import java.nio.IntBuffer;
  15.  
  16.  
  17. import org.lwjgl.LWJGLException;
  18. import org.lwjgl.opengl.Display;
  19. import org.lwjgl.opengl.DisplayMode;
  20. import org.lwjgl.opengl.EXTFramebufferObject;
  21. import org.lwjgl.opengl.GL11;
  22.  
  23. /**
  24.  *
  25.  * @author Szoltomi
  26.  */
  27. public class DrawerMethods extends Thread {
  28.  
  29.     public static void initDraw(int width, int height) {
  30.         try {
  31.             Display.setDisplayMode(new DisplayMode(width, height));
  32.             Display.create();
  33.         } catch (LWJGLException e) {
  34.             e.printStackTrace();
  35.             System.exit(0);
  36.         }
  37.         GL11.glMatrixMode(GL11.GL_PROJECTION);
  38.         GL11.glLoadIdentity();
  39.         GL11.glOrtho(0, width, 0, height, -1000, 1000);
  40.         GL11.glMatrixMode(GL11.GL_MODELVIEW);
  41.         GL11.glEnable(GL11.GL_BLEND);
  42.         GL11.glEnable(GL11.GL_TEXTURE_2D);
  43.         GL11.glDisable(GL11.GL_CULL_FACE);
  44.         GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
  45.         GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
  46.         GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
  47.     }
  48.  
  49.     public static int[] initFBOTexture(int width, int height) {
  50.         IntBuffer buffer = ByteBuffer.allocateDirect(1 * 4).order(ByteOrder.nativeOrder()).asIntBuffer();
  51.         EXTFramebufferObject.glGenFramebuffersEXT(buffer); // generate
  52.         int FBOId = buffer.get();
  53.         EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, FBOId);
  54.         //setting up depthbuffer
  55.         int depthbuffer = EXTFramebufferObject.glGenRenderbuffersEXT();
  56.         EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, depthbuffer);
  57.         EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT,
  58.                                                       GL11.GL_DEPTH_COMPONENT,
  59.                                                       width, height);
  60.         EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT,
  61.                                                           EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT,
  62.                                                           EXTFramebufferObject.GL_RENDERBUFFER_EXT, depthbuffer);
  63.         //setting up color buffer
  64.         int texId;
  65.         texId = GL11.glGenTextures();
  66.         GL11.glBindTexture(GL11.GL_TEXTURE_2D, texId);
  67.         GL11.glTexImage2D(GL11.GL_TEXTURE_2D,
  68.                           0,
  69.                           GL11.GL_RGBA8,
  70.                           width, height,
  71.                           0,
  72.                           GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (IntBuffer) null);
  73.  
  74.         EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT,
  75.                                                        EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT,
  76.                                                        GL11.GL_TEXTURE_2D,
  77.                                                        texId, 0);
  78.         EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
  79.  
  80.  
  81.         int framebuffer = EXTFramebufferObject.glCheckFramebufferStatusEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT);
  82.         switch (framebuffer) {
  83.             case EXTFramebufferObject.GL_FRAMEBUFFER_COMPLETE_EXT:
  84.                 break;
  85.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
  86.                 throw new RuntimeException("FrameBuffer: " + FBOId
  87.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT exception");
  88.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
  89.                 throw new RuntimeException("FrameBuffer: " + FBOId
  90.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT exception");
  91.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
  92.                 throw new RuntimeException("FrameBuffer: " + FBOId
  93.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT exception");
  94.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
  95.                 throw new RuntimeException("FrameBuffer: " + FBOId
  96.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT exception");
  97.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
  98.                 throw new RuntimeException("FrameBuffer: " + FBOId
  99.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT exception");
  100.             case EXTFramebufferObject.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
  101.                 throw new RuntimeException("FrameBuffer: " + FBOId
  102.                                            + ", has caused a GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT exception");
  103.             default:
  104.                 throw new RuntimeException("Unexpected reply from glCheckFramebufferStatusEXT: " + framebuffer);
  105.         }
  106.         return new int[]{FBOId, texId};
  107.  
  108.     }
  109.  
  110.     public static void bindFBO(int[] fbo) {
  111.         GL11.glBindTexture(GL11.GL_TEXTURE_2D, fbo[1]);
  112.         EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, fbo[0]);
  113.     }
  114.  
  115.     public static void unbindFBO() {
  116.         EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
  117.     }
  118.  
  119.     public static void initDrawSprites(SpriteSheet sheet) {
  120.         GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
  121.         GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
  122.         GL11.glBindTexture(GL11.GL_TEXTURE_2D, sheet.textureId);
  123.         GL11.glBegin(GL11.GL_QUADS);
  124.         setColor(1f, 1f, 1f, 1f);
  125.     }
  126.  
  127.     public static void setColor(double red, double green, double blue, double alpha) {
  128.         GL11.glColor4d(red, green, blue, alpha);
  129.     }
  130.  
  131.     public static void drawEnd() {
  132.         GL11.glEnd();
  133.     }
  134.  
  135.     public static void clear() {
  136.         GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
  137.     }
  138.  
  139.     public static void checkErrors() {
  140.         int error = GL11.glGetError();
  141.         if (error != 0) {
  142.             System.out.println(error);
  143.         }
  144.     }
  145.  
  146.     public static void drawUiComponent(Component c) {
  147.         drawUiComponent(c, 0, 0);
  148.     }
  149.  
  150.     public static void drawUiComponent(Component c, int offsetX, int offsetY) {
  151.  
  152.         //draw the background, if exists
  153.         if (c.getBackground() != null) {
  154.             initDrawSprites(c.background.getSpriteSheet());
  155.             drawSpriteImage(c.posX + offsetX, c.posY + offsetY, 0, c.getBackground());
  156.             drawEnd();
  157.         }
  158.         //draw the border
  159.         if (c.border != null) {
  160.             initDrawSprites(c.border.sheet);
  161.             drawSpriteImage(c.posX + offsetX,
  162.                             c.posY + offsetY, 0,
  163.                             c.border.cornerTopLeft);
  164.             drawSpriteImage(c.posX + offsetX + c.sizeX - c.border.cornerTopRight.getWidth(),
  165.                             c.posY + offsetY,
  166.                             0, c.border.cornerTopRight);
  167.             drawSpriteImage(c.posX + offsetX,
  168.                             c.posY + offsetY + c.sizeY - c.border.cornerBottomLeft.getHeight(),
  169.                             0, c.border.cornerBottomLeft);
  170.             drawSpriteImage(c.posX + offsetX + c.sizeX - c.border.cornerBottomRight.getWidth(),
  171.                             c.posY + offsetY + c.sizeY - c.border.cornerBottomRight.getHeight(),
  172.                             0, c.border.cornerBottomRight);
  173.             for (int i = c.posX + offsetX + c.border.cornerTopLeft.getWidth();
  174.                  i < c.posX + offsetX + c.sizeX - c.border.cornerTopRight.getWidth();
  175.                  i += c.border.top.getWidth()) {
  176.                 drawSpriteImage(i, c.posY + offsetY, 0, c.border.top);
  177.  
  178.             }
  179.             for (int i = c.posX + offsetX + c.border.cornerBottomLeft.getWidth();
  180.                  i < c.posX + offsetX + c.sizeX - c.border.cornerBottomRight.getWidth();
  181.                  i += c.border.bottom.getWidth()) {
  182.                 drawSpriteImage(i, c.posY + c.sizeY + offsetY - c.border.bottom.getHeight(), 0, c.border.bottom);
  183.             }
  184.             for (int i = c.posY + offsetY + c.border.cornerTopLeft.getHeight();
  185.                  i < c.posY + offsetY + c.sizeY - c.border.cornerBottomLeft.getHeight();
  186.                  i += c.border.left.getHeight()) {
  187.                 drawSpriteImage(c.posX + offsetX, i, 0, c.border.left);
  188.  
  189.             }
  190.             for (int i = c.posY + offsetY + c.border.cornerTopRight.getHeight();
  191.                  i < c.posY + offsetY + c.sizeY - c.border.cornerBottomRight.getHeight();
  192.                  i += c.border.right.getHeight()) {
  193.                 drawSpriteImage(c.posX + c.sizeX + offsetX - c.border.right.getWidth(), i, 0, c.border.right);
  194.             }
  195.  
  196.  
  197.  
  198.  
  199.             GL11.glEnd();
  200.         }
  201.         //draw the contained ones recursively.
  202.         if (c instanceof Container) {
  203.             Container cont = (Container) c;
  204.             for (Component innerComp : cont.getComponents()) {
  205.                 drawUiComponent(innerComp, c.posX, c.posY);
  206.             }
  207.         }
  208.     }
  209.  
  210.     public static void viewMatrix(long x, long y, double zoom) {
  211.         GL11.glMatrixMode(GL11.GL_MODELVIEW);
  212.         GL11.glLoadIdentity();
  213.         GL11.glScaled(zoom, zoom, 0f);
  214.         GL11.glTranslated(x, y, 0);
  215.     }
  216.  
  217.     public static void viewZoom(double zoom) {
  218.         GL11.glMatrixMode(GL11.GL_MODELVIEW);
  219.         GL11.glLoadIdentity();
  220.         GL11.glScaled(zoom, zoom, 0f);
  221.     }
  222.  
  223.     public static void flip() {
  224.         GL11.glScaled(1f, -1f, 0f);
  225.     }
  226.  
  227.     public static void viewTranslation(long x, long y) {
  228.         GL11.glMatrixMode(GL11.GL_MODELVIEW);
  229.         GL11.glLoadIdentity();
  230.         GL11.glTranslated(x, y, 0);
  231.     }
  232.  
  233.     public static void drawSpriteImage(long x, long y, int z, SpriteImage sprImg) {
  234.         drawSpriteImage(x, y, z, 1f, sprImg);
  235.     }
  236.  
  237.     public static void drawSpriteImage(long x, long y, int z, double scale, SpriteImage sprImg) {
  238.         if (sprImg == null) {
  239.             return;
  240.         }
  241.  
  242.         double width = sprImg.getWidth() * scale;
  243.         double height = sprImg.getHeight() * scale;
  244.  
  245.         GL11.glTexCoord2f(sprImg.getU1(), sprImg.getV1());
  246.         GL11.glVertex3d(x, y, z);
  247.  
  248.         GL11.glTexCoord2f(sprImg.getU2(), sprImg.getV1());
  249.         GL11.glVertex3d(x + width, y, z);
  250.  
  251.         GL11.glTexCoord2f(sprImg.getU2(), sprImg.getV2());
  252.         GL11.glVertex3d(x + width, y + height, z);
  253.  
  254.         GL11.glTexCoord2f(sprImg.getU1(), sprImg.getV2());
  255.         GL11.glVertex3d(x, y + height, z);
  256.     }
  257.  
  258.     public static void drawSpriteImageCentered(long x, long y, int z, double scale, SpriteImage sprImg) {
  259.         drawSpriteImage((long) (x - (sprImg.getWidth() * scale) / 2),
  260.                         (long) (y - (sprImg.getHeight() * scale) / 2),
  261.                         z,
  262.                         scale,
  263.                         sprImg);
  264.     }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement