From 575e9f4871f76be0cd345e1e7b10f537922ac5b6 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Thu, 29 Mar 2018 00:30:47 +0200 Subject: [PATCH] Updated some graphic libraries --- .gitignore | 1 + libs/raspi2fb | Bin 0 -> 15848 bytes src/main/java/org/warp/picalculator/Main.java | 12 +++ .../java/org/warp/picalculator/Utils.java | 1 + .../warp/picalculator/gui/DisplayManager.java | 12 ++- .../graphicengine/framebuffer/FBEngine.java | 4 +- .../gui/graphicengine/gpu/GPUEngine.java | 2 +- .../gui/graphicengine/gpu/GPURenderer.java | 83 +++++++++++------- .../gui/graphicengine/gpu/NEWTWindow.java | 6 +- src/main/jni/libpicalc.so | Bin 0 -> 9324 bytes src/main/resources/libpicalc.so | Bin 0 -> 9324 bytes 11 files changed, 79 insertions(+), 42 deletions(-) create mode 100644 libs/raspi2fb create mode 100644 src/main/jni/libpicalc.so create mode 100644 src/main/resources/libpicalc.so diff --git a/.gitignore b/.gitignore index 4d5d0f69..b2dfaa67 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ font_easter.png font_easter.rft font_fu32.rft +VBO_Example.java /target/ !/target/*.jar diff --git a/libs/raspi2fb b/libs/raspi2fb new file mode 100644 index 0000000000000000000000000000000000000000..fe7e2345ed8de9bc949254600c64bf65c4c44967 GIT binary patch literal 15848 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 literal 0 HcmV?d00001 diff --git a/src/main/java/org/warp/picalculator/Main.java b/src/main/java/org/warp/picalculator/Main.java index 3b796248..be22cc22 100755 --- a/src/main/java/org/warp/picalculator/Main.java +++ b/src/main/java/org/warp/picalculator/Main.java @@ -1,5 +1,12 @@ package org.warp.picalculator; +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import org.warp.picalculator.device.Keyboard; import org.warp.picalculator.device.PIHardwareDisplay; import org.warp.picalculator.gui.CalculatorHUD; @@ -47,6 +54,11 @@ public class Main { if (Utils.isRunningOnRaspberry() && !Utils.isInArray("-noraspi", args) && isRaspi) { Gpio.wiringPiSetupPhys(); Gpio.pinMode(12, Gpio.PWM_OUTPUT); + try { + Files.createFile(Paths.get("/boot/warppi_loaded")); + } catch (IOException e) { + e.printStackTrace(); + } } else { StaticVars.screenPos = new int[] { 0, 0 }; StaticVars.debugOn = true; diff --git a/src/main/java/org/warp/picalculator/Utils.java b/src/main/java/org/warp/picalculator/Utils.java index 7fce8632..f2c79f5c 100755 --- a/src/main/java/org/warp/picalculator/Utils.java +++ b/src/main/java/org/warp/picalculator/Utils.java @@ -76,6 +76,7 @@ public class Utils { public static String forceEngine; public static boolean msDosMode; public static boolean debugCache; + public static boolean newtMode = true; public static final class AdvancedOutputStream extends StringWriter { diff --git a/src/main/java/org/warp/picalculator/gui/DisplayManager.java b/src/main/java/org/warp/picalculator/gui/DisplayManager.java index dd0b79ab..62d14a9c 100755 --- a/src/main/java/org/warp/picalculator/gui/DisplayManager.java +++ b/src/main/java/org/warp/picalculator/gui/DisplayManager.java @@ -303,7 +303,9 @@ public final class DisplayManager implements RenderingLoop { if (error != null) { BinaryFont fnt = Utils.getFont(false, false); - fnt.use(engine); + if (fnt != null && fnt != engine.getRenderer().getCurrentFont()) { + fnt.use(engine); + } renderer.glColor3i(129, 28, 22); renderer.glDrawStringRight(StaticVars.screenSize[0] - 2, StaticVars.screenSize[1] - (fnt.getCharacterHeight() + 2), StaticVars.calculatorNameUPPER + " CALCULATOR"); renderer.glColor3i(149, 32, 26); @@ -314,11 +316,15 @@ public final class DisplayManager implements RenderingLoop { renderer.glDrawStringLeft(2, 22 + i, stackPart); i += 11; } - fonts[0].use(engine); + if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) { + fonts[0].use(engine); + } renderer.glColor3i(129, 28, 22); renderer.glDrawStringCenter((StaticVars.screenSize[0] / 2), 11, "UNEXPECTED EXCEPTION"); } else { - fonts[0].use(engine); + if (fonts[0] != null && fonts[0] != engine.getRenderer().getCurrentFont()) { + fonts[0].use(engine); + } hud.renderBackground(); screen.render(); hud.render(); diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java index ece1968a..4cb70b45 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/framebuffer/FBEngine.java @@ -143,7 +143,7 @@ public class FBEngine implements GraphicEngine { realFb.getBuffer().clear(); realFb.getBuffer().put(fb); for (int i = 0; i < fb.capacity()/2; i++) { - realFb.getBuffer().put(i, (byte) (0xFF)); + realFb.getBuffer().put(i, (byte) (_________________TMP < 50 ? 0xFF : 0xF0)); } for (int i = fb.capacity()/2; i < fb.capacity(); i++) { realFb.getBuffer().put(i, (byte) (0x18)); @@ -184,6 +184,7 @@ public class FBEngine implements GraphicEngine { if (Utils.headlessOverride) { return false; } + /* File fbFile = new File("/dev/fb1"); try { fbFileRW = new RandomAccessFile(fbFile, "rw"); @@ -194,6 +195,7 @@ public class FBEngine implements GraphicEngine { System.err.println("Cannot read framebuffer fb1."); ex.printStackTrace(); } + */ return false; } 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 763b4d03..6e4792d9 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 @@ -193,4 +193,4 @@ public class GPUEngine implements GraphicEngine { return registeredFonts; } -} +} \ No newline at end of file diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java index ab118a5e..25cf9285 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPURenderer.java @@ -292,13 +292,46 @@ public class GPURenderer implements Renderer { return tex; } - public void startDrawCycle(boolean first) { + public void initDrawCycle() { + final boolean textureChange = precTexEnabled != currentTexEnabled || precTex != currentTex; + startDrawSegment(false); + if (textureChange) { + changeTexture(); + } if (fbVertices == null) { fbVertices = Buffers.newDirectFloatBuffer(3 * ELEMENT_VERTICES_COUNT * ELEMENTS_MAX_COUNT_PER_BUFFER); txVertices = Buffers.newDirectFloatBuffer(2 * ELEMENT_VERTICES_COUNT * ELEMENTS_MAX_COUNT_PER_BUFFER); colVertices = Buffers.newDirectFloatBuffer(4 * ELEMENT_VERTICES_COUNT * ELEMENTS_MAX_COUNT_PER_BUFFER); } - if (first || fbVertices == null || cycleEnded) { + } + + public void endDrawCycle() { + final boolean textureChange = precTexEnabled != currentTexEnabled || precTex != currentTex; + if (textureChange) { + if (fbElements > 0) { + endDrawSegment(); + } + changeTexture(); + } else { + if (fbElements > 0) { + endDrawSegment(); + } + } + } + + private void changeTexture() { + precTexEnabled = currentTexEnabled; + precTex = currentTex; + if (currentTexEnabled) { + gl.glEnable(GL.GL_TEXTURE_2D); + currentTex.bind(gl); + } else { + gl.glDisable(GL.GL_TEXTURE_2D); + } + } + + public void startDrawSegment(boolean continuation) { + if (!continuation || cycleEnded) { fbElements = 0; } cycleEnded = false; @@ -308,42 +341,24 @@ public class GPURenderer implements Renderer { private Texture precTex; private boolean cycleEnded = true; - public void updateDrawCycle() { - updateDrawCycle(false, false); - } - - public void updateDrawCycle(boolean first, boolean last) { + public void doDrawSegment() { final boolean textureChange = precTexEnabled != currentTexEnabled || precTex != currentTex; - final boolean changeRequired = last || fbElements >= ELEMENTS_MAX_COUNT_PER_BUFFER; - if (first) { - startDrawCycle(true); - } + final boolean changeRequired = fbElements >= ELEMENTS_MAX_COUNT_PER_BUFFER; if (textureChange) { - if (!first && fbElements > 0) { - endDrawCycle(); - if (!last) { - startDrawCycle(true); - } + if (fbElements > 0) { + endDrawSegment(); + startDrawSegment(false); } - precTexEnabled = currentTexEnabled; - precTex = currentTex; - if (currentTexEnabled) { - gl.glEnable(GL.GL_TEXTURE_2D); - currentTex.bind(gl); - } else { - gl.glDisable(GL.GL_TEXTURE_2D); - } - } else if (!first) { + changeTexture(); + } else { if (fbElements > 0 && changeRequired) { - endDrawCycle(); - if (!last) { - startDrawCycle(false); - } + endDrawSegment(); + startDrawSegment(true); } } } - public void endDrawCycle() { + public void endDrawSegment() { fbVertices.limit(fbVertices.position()); txVertices.limit(txVertices.position()); colVertices.limit(colVertices.position()); @@ -380,18 +395,18 @@ public class GPURenderer implements Renderer { public void glClearSkin() { if (currentTex != null) { currentTex = null; - updateDrawCycle(); + doDrawSegment(); } } void disableTexture() { currentTexEnabled = false; - updateDrawCycle(); + doDrawSegment(); } void enableTexture() { currentTexEnabled = true; - updateDrawCycle(); + doDrawSegment(); } void useTexture(Texture t, float w, float h) { @@ -400,4 +415,4 @@ public class GPURenderer implements Renderer { currentTexHeight = h; enableTexture(); } -} +} \ No newline at end of file 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 d14ba35c..9d809ccf 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 @@ -343,12 +343,12 @@ class NEWTWindow implements GLEventListener { gl.glEnableClientState(GLPointerFunc.GL_COLOR_ARRAY); gl.glEnableClientState(GLPointerFunc.GL_VERTEX_ARRAY); gl.glEnableClientState(GLPointerFunc.GL_TEXTURE_COORD_ARRAY); - - renderer.updateDrawCycle(true, false); + + renderer.initDrawCycle(); disp.repaint(); - renderer.updateDrawCycle(false, true); + renderer.endDrawCycle(); GPURenderer.gl = null; diff --git a/src/main/jni/libpicalc.so b/src/main/jni/libpicalc.so new file mode 100644 index 0000000000000000000000000000000000000000..25c9e68c5faba7abfd09fa5e772c6ddf89a93419 GIT binary patch literal 9324 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