From 82cd20ed209f12e22e2f5a92719b3be2bb92d8ed Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 23 Feb 2001 05:08:10 +0000 Subject: Version 2.6.0.0 --- gl4java/awt/GLImageCanvas.java | 811 +++++++++++++++++++++-------------------- 1 file changed, 409 insertions(+), 402 deletions(-) (limited to 'gl4java/awt/GLImageCanvas.java') diff --git a/gl4java/awt/GLImageCanvas.java b/gl4java/awt/GLImageCanvas.java index 113d589..0a87785 100755 --- a/gl4java/awt/GLImageCanvas.java +++ b/gl4java/awt/GLImageCanvas.java @@ -1,402 +1,409 @@ -/** - * @(#) GLImageCanvas.java - */ - - -package gl4java.awt; - -import gl4java.*; -import gl4java.utils.*; -import gl4java.utils.textures.*; - -import java.awt.*; -import java.net.*; - -/** - * This Class provides a simple universal - * Image/Texture OpenGL Canvas ! - * - * A special demo/application for this class can be found - * in "demos/MiscDemos/GLImageViewerCanvas.java" ! - * - * @see TextureLoader - * @author Sven Goethel - * - */ -public class GLImageCanvas extends GLCanvas -{ - int texName[] = {0}; - TextureLoader txtLoader = null; - boolean newText = false; - boolean keepAspect = true; - boolean zoomImg = true; - - TextureGrabber textGrab4Snapshot = null; - String textGrab4SnapshotFName = null; - URL textGrab4SnapshotURL = null; - String textGrab4SnapshotURI = null; - - public GLImageCanvas(int w, int h) - { - super(w, h); - } - - public void setKeepAspectRatio(boolean v) - { keepAspect=v; } - - public boolean getKeepAspectRatio() - { return keepAspect; } - - public void setZoomAble(boolean v) - { zoomImg = v; } - - public boolean getZoomAble() - { return zoomImg; } - - public TextureLoader getTextureLoader() - { return txtLoader; } - - public void setOriginalSize() - { - if(txtLoader!=null && txtLoader.isOk()) - { - internalSetSize( txtLoader.getImageWidth(), - txtLoader.getImageHeight() ); - } - } - - /** - * Creates a snapshot (save texture/image) of the current - * GL-Context ! - * - * The snapshot itself is created delayed, - * so no return value is avaiable. - * Because this is a non critical path, I hope its enough ! - * - * @param tg The TextureGrabber - * @param fname The filename - * @see TextureGrabber - */ - public void snapshot(TextureGrabber tg, String fname) - { - textGrab4Snapshot=tg; - textGrab4SnapshotFName=fname; - repaint(); - } - - /** - * Creates a snapshot (save texture/image) of the current - * GL-Context ! - * - * The snapshot itself is created delayed, - * so no return value is avaiable. - * Because this is a non critical path, I hope its enough ! - * - * @param tg The TextureGrabber - * @param base The base URL - * @param uri The additional uri for the base URL - * @see TextureGrabber - */ - public void snapshot(TextureGrabber tg, URL base, String uri) - { - textGrab4Snapshot=tg; - textGrab4SnapshotURL = base; - textGrab4SnapshotURI = uri; - repaint(); - } - - public Dimension getPreferredSize() { - return getMinimumSize(); - } - - public Dimension getMinimumSize() { - return getSize(); - } - - protected void internalSetSize(int w, int h) - { - setSize( w, h ); - invalidate(); - - Window holder = Tool.getWindow(this); - - if(holder!=null) - { - holder.invalidate(); - holder.pack(); - holder.repaint(); - } - } - - public void preInit() - { - // createOwnWindow = true; - } - - public void init() - { - gl.glEnable(GL_TEXTURE_2D); - - gl.glGenTextures(1,texName); - gl.glBindTexture(GL_TEXTURE_2D,texName[0]); - - gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); - gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); - gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - gl.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - gl.glShadeModel (GL_SMOOTH); - - gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f); - - reshape(getSize().width, getSize().height); - } - - /** - * Loads an Image of the appropiate type, - * and renders and resizes the complete window ! - * - * @param fname The filename - * @param type The type of file, e.g. TextureLoader is used ! - * The following types are currently allowed: - * "png" for PngTextureLoader, - * "ppm" for PPMAsciiTextureLoader, - * "tga" for PPMAsciiTextureLoader, - * "any" for AWTTextureLoader ! - */ - public boolean loadTexture(String fname, String type) - { - return loadTexture(fname, null, null, type); - } - - /** - * Loads an Image of the appropiate type, - * and renders and resizes the complete window ! - * - * @param base The base URL - * @param uri The additional uri for the base URL - * @param type The type of file, e.g. TextureLoader is used ! - * The following types are currently allowed: - * "png" for PngTextureLoader, - * "ppm" for PPMAsciiTextureLoader, - * "tga" for PPMAsciiTextureLoader, - * "any" for AWTTextureLoader ! - */ - public boolean loadTexture(URL base, String uri, String type) - { - return loadTexture(null, base, uri, type); - } - - protected boolean loadTexture(String fname, - URL base, String uri, String type) - { - boolean ok = true; - - if( glj.gljMakeCurrent() == false ) - { - System.out.println("problem in use() method"); - return false; - } - - // texture laden - if(type.equals("png")) - txtLoader = new PngTextureLoader(gl, glu); - else if(type.equals("ppm")) - txtLoader = new PPMAsciiTextureLoader(gl, glu); - else if(type.equals("tga")) - txtLoader = new TGATextureLoader(gl, glu); - else if(type.equals("any")) - txtLoader = new AWTTextureLoader(this, gl, glu); - else { - System.out.println("Imagetype: "+type+" is currently not supported !"); - ok = false; - } - - if(ok) - { - try { - if(fname!=null) - txtLoader.readTexture(fname); - else - txtLoader.readTexture(base, uri); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - if(ok && txtLoader.isOk()) - { - gl.glEnable(GL_TEXTURE_2D); - - txtLoader.texImage2DNonScaled(true); - - gl.glDisable(GL_TEXTURE_2D); - System.out.println("texture succesfully loaded !"); - System.out.println("texture: "+txtLoader); - } - glj.gljCheckGL(); - glj.gljFree(); - if(ok) { - internalSetSize( txtLoader.getImageWidth(), - txtLoader.getImageHeight() ); - } - return ok; - } - - public void display() - { - int i; - - /* Standard GL4Java Init */ - if( glj.gljMakeCurrent() == false ) - { - System.out.println("problem in use() method"); - return; - } - - SetCamera(); - - // just render it - gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - DrawObj(false); - - if(textGrab4Snapshot!=null) - { - textGrab4Snapshot.grabPixels(GL_BACK, - 0, 0, cvsGetWidth(), cvsGetHeight()); - if(textGrab4SnapshotFName!=null) - textGrab4Snapshot.write2File(textGrab4SnapshotFName); - else - textGrab4Snapshot.write2File(textGrab4SnapshotURL, - textGrab4SnapshotURI); - textGrab4Snapshot =null; - textGrab4SnapshotFName=null; - textGrab4SnapshotURL =null; - textGrab4SnapshotURI =null; - } - - /* For your animation dutys ;-) */ - glj.gljSwap(); - glj.gljCheckGL(); - glj.gljFree(); - } - - /** - * to prevent a deadlock in recursive - * reshape .. internalSetSize .. pack .. resize -> reshape ! - */ - private int reshape_resize_sema = 1; - - public void reshape(int w, int h) - { - if(reshape_resize_sema>0 && - keepAspect && txtLoader!=null && txtLoader.isOk()) - { - reshape_resize_sema--; - - int rw=w; int rh=h; - if(zoomImg) - { - double iaspect = (double)txtLoader.getImageWidth()/ - (double)txtLoader.getImageHeight(); - if(rw reshape ! + */ + private int reshape_resize_sema = 1; + + public void reshape(int w, int h) + { + if(reshape_resize_sema>0 && + keepAspect && txtLoader!=null && txtLoader.isOk()) + { + reshape_resize_sema--; + + int rw=w; int rh=h; + if(zoomImg) + { + double iaspect = (double)txtLoader.getImageWidth()/ + (double)txtLoader.getImageHeight(); + if(rw