diff --git a/src/main/java/org/warp/picalculator/device/Keyboard.java b/src/main/java/org/warp/picalculator/device/Keyboard.java index 08011767..560eea40 100755 --- a/src/main/java/org/warp/picalculator/device/Keyboard.java +++ b/src/main/java/org/warp/picalculator/device/Keyboard.java @@ -604,7 +604,8 @@ public class Keyboard { refresh = true; break; case ZOOM_MODE: - StaticVars.windowZoom = ((StaticVars.windowZoom - 0.5f) % 2f) + 1f; + StaticVars.windowZoom = ((StaticVars.windowZoom - 1) % 2) + 2; +// StaticVars.windowZoom = ((StaticVars.windowZoom - 0.5f) % 2f) + 1f; refresh = true; case HISTORY_BACK: DisplayManager.INSTANCE.goBack(); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java index 6d895bc7..c5cf2263 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java @@ -2,6 +2,7 @@ package org.warp.picalculator.gui.graphicengine.gpu; import java.io.IOException; import java.util.HashMap; +import java.util.LinkedList; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.CopyOnWriteArrayList; @@ -14,7 +15,9 @@ import org.warp.picalculator.gui.graphicengine.GraphicEngine; import org.warp.picalculator.gui.graphicengine.RenderingLoop; import org.warp.picalculator.gui.graphicengine.Skin; +import com.jogamp.opengl.GL; import com.jogamp.opengl.GLProfile; +import com.jogamp.opengl.util.texture.Texture; public class GPUEngine implements GraphicEngine { @@ -27,6 +30,8 @@ public class GPUEngine implements GraphicEngine { int[] size = new int[] { StaticVars.screenSize[0], StaticVars.screenSize[1] }; private final CopyOnWriteArrayList registeredFonts = new CopyOnWriteArrayList(); private Semaphore exitSemaphore = new Semaphore(0); + protected LinkedList registeredTextures; + protected LinkedList unregisteredTextures; @Override public int[] getSize() { @@ -68,6 +73,8 @@ public class GPUEngine implements GraphicEngine { @Override public void create(Runnable onInitialized) { created = true; + registeredTextures = new LinkedList<>(); + unregisteredTextures = new LinkedList<>(); r = new GPURenderer(); wnd = new NEWTWindow(this); wnd.create(); @@ -193,4 +200,8 @@ public class GPUEngine implements GraphicEngine { return registeredFonts; } + public void registerTexture(Texture t) { + unregisteredTextures.addLast(t); + } + } \ No newline at end of file diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java index 7abe50a4..aa062014 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUSkin.java @@ -45,7 +45,7 @@ public class GPUSkin implements Skin { t = GPURenderer.importTexture(i.f, i.deleteOnExit); w = i.w; h = i.h; - t.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); + ((GPUEngine)d).registerTexture(t); initialized = true; } catch (GLException | IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java index f1718a8b..0f9155e9 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/NEWTWindow.java @@ -53,6 +53,7 @@ import com.jogamp.opengl.fixedfunc.GLLightingFunc; import com.jogamp.opengl.fixedfunc.GLMatrixFunc; import com.jogamp.opengl.fixedfunc.GLPointerFunc; import com.jogamp.opengl.util.Animator; +import com.jogamp.opengl.util.texture.Texture; /** * @@ -89,8 +90,10 @@ class NEWTWindow implements GLEventListener { final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES1)); System.out.println("Loaded OpenGL"); // We may at this point tweak the caps and request a translucent drawable + caps.setHardwareAccelerated(true); caps.setBackgroundOpaque(true); //transparency window - caps.setSampleBuffers(false); +// caps.setSampleBuffers(true); +// caps.setNumSamples(4); final GLWindow glWindow = GLWindow.create(caps); window = glWindow; @@ -292,7 +295,7 @@ class NEWTWindow implements GLEventListener { //Vsync gl.setSwapInterval(1); - + //Textures gl.glEnable(GL.GL_TEXTURE_2D); @@ -301,6 +304,9 @@ class NEWTWindow implements GLEventListener { gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GLLightingFunc.GL_FLAT); + //Multisampling + //gl.glEnable(GL.GL_MULTISAMPLE); + if (onInitialized != null) { onInitialized.run(); onInitialized = null; @@ -332,7 +338,15 @@ class NEWTWindow implements GLEventListener { private void onZoomChanged(GL2ES1 gl, boolean sizeChanged) { float precWindowZoom = windowZoom; windowZoom = StaticVars.getCurrentZoomValue(); - System.out.println("sizechange" + windowZoom); + + if (((precWindowZoom % ((int)precWindowZoom)) != 0f) != ((windowZoom % ((int)windowZoom)) != 0f)) { + boolean linear = (windowZoom % ((int)windowZoom)) != 0f; + + for(Texture t : disp.registeredTextures) { + t.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, linear ? GL.GL_LINEAR : GL.GL_NEAREST); + t.setTexParameteri(gl, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); + } + } final int width = realWindowSize[0]; final int height = realWindowSize[1]; @@ -360,6 +374,17 @@ class NEWTWindow implements GLEventListener { if (windowZoom != StaticVars.getCurrentZoomValue()) { onZoomChanged(gl, false); } + + Boolean linear = null; + while(!disp.unregisteredTextures.isEmpty()) { + if (linear == null) { + linear = (windowZoom % ((int)windowZoom)) != 0f; + } + Texture t = disp.unregisteredTextures.pop(); + t.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); + t.setTexParameteri(gl, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); + disp.registeredTextures.addLast(t); + } gl.glEnableClientState(GLPointerFunc.GL_COLOR_ARRAY); gl.glEnableClientState(GLPointerFunc.GL_VERTEX_ARRAY); diff --git a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java index db25723d..f2650d48 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java @@ -151,6 +151,7 @@ public class MathInputScreen extends Screen { } else { skinN = 21; } + DisplayManager.INSTANCE.guiSkin.use(DisplayManager.INSTANCE.engine); renderer.glFillRect(2 + 18 * pos + 2 * spacersNumb, 2, 16, 16, 16 * skinN, 16 * 0, 16, 16); }