From 423f488740677d8fc78880fbc8315e9bd8469a17 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Fri, 7 Jun 2024 09:28:33 +0200 Subject: [PATCH] [FEAT] use Maven a build system root tool --- .classpath | 92 +----- .project | 18 +- lutin_org-atriasoft-gale.py | 6 +- pom.xml | 200 ++++++++++++ src/module-info.java | 8 +- src/org/atriasoft/gale/Gale.java | 22 +- src/org/atriasoft/gale/GaleApplication.java | 125 ++++---- src/org/atriasoft/gale/backend3d/OpenGL.java | 242 ++++++++------ .../atriasoft/gale/context/CommandLine.java | 38 +-- .../atriasoft/gale/context/GaleContext.java | 301 ++++++++++-------- .../context/LWJG_AWT/ContextLWJGLAWT.java | 174 +++++----- .../atriasoft/gale/context/MessageSystem.java | 30 +- .../gale/context/PeriodicThread.java | 20 +- src/org/atriasoft/gale/internal/Log.java | 76 ----- src/org/atriasoft/gale/resource/Resource.java | 48 +-- .../resource/ResourceColored3DObject.java | 259 +++++++++------ .../gale/resource/ResourceManager.java | 70 ++-- .../gale/resource/ResourceProgram.java | 151 +++++---- .../gale/resource/ResourceShader.java | 24 +- .../gale/resource/ResourceTexture.java | 101 +++--- .../gale/resource/ResourceTexture2.java | 68 ++-- .../gale/resource/ResourceTextureFile.java | 27 +- .../resource/ResourceVirtualArrayObject.java | 224 +++++++------ .../resource/ResourceVirtualBufferObject.java | 68 ++-- .../gale/test/sample1/Sample1Application.java | 76 +++-- .../gale/test/sample2/Sample2Application.java | 142 +++++---- test/src/test/atriasoft/gale/Log.java | 59 ---- test/src/test/atriasoft/gale/Log2.java | 18 -- .../src/test/atriasoft/gale/TestBasicLog.java | 68 +--- 29 files changed, 1479 insertions(+), 1276 deletions(-) create mode 100644 pom.xml delete mode 100644 src/org/atriasoft/gale/internal/Log.java delete mode 100644 test/src/test/atriasoft/gale/Log.java delete mode 100644 test/src/test/atriasoft/gale/Log2.java diff --git a/.classpath b/.classpath index 3e63f23..3083ca1 100644 --- a/.classpath +++ b/.classpath @@ -1,101 +1,27 @@ - + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + diff --git a/.project b/.project index 06c0125..3ba52b8 100644 --- a/.project +++ b/.project @@ -1,9 +1,8 @@ - atriasoft-gale + gale - atriasoft-gale @@ -12,24 +11,13 @@ - net.sf.eclipsecs.core.CheckstyleBuilder + org.eclipse.m2e.core.maven2Builder org.eclipse.jdt.core.javanature - net.sf.eclipsecs.core.CheckstyleNature + org.eclipse.m2e.core.maven2Nature - - - 1646149232195 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/lutin_org-atriasoft-gale.py b/lutin_org-atriasoft-gale.py index 248d381..b4fffda 100644 --- a/lutin_org-atriasoft-gale.py +++ b/lutin_org-atriasoft-gale.py @@ -33,14 +33,14 @@ def configure(target, my_module): my_module.add_src_file([ 'src/module-info.java', 'src/org/atriasoft/gale/TextureFilter.java', - 'src/org/atriasoft/gale/internal/Log.java', + 'src/org/atriasoft/gale/internal/LOGGER.java', 'src/org/atriasoft/gale/DisplayManagerDraw.java', 'src/org/atriasoft/gale/test/sample1/Sample1.java', 'src/org/atriasoft/gale/test/sample1/Sample1Application.java', - 'src/org/atriasoft/gale/test/sample1/Log.java', + 'src/org/atriasoft/gale/test/sample1/LOGGER.java', 'src/org/atriasoft/gale/test/sample2/Sample2Application.java', 'src/org/atriasoft/gale/test/sample2/Main.java', - 'src/org/atriasoft/gale/test/sample2/Log.java', + 'src/org/atriasoft/gale/test/sample2/LOGGER.java', 'src/org/atriasoft/gale/context/ClipboardList.java', 'src/org/atriasoft/gale/context/Cursor.java', 'src/org/atriasoft/gale/context/LWJG_AWT/ContextLWJGLAWT.java', diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e509f40 --- /dev/null +++ b/pom.xml @@ -0,0 +1,200 @@ + + 4.0.0 + org.atriasoft + gale + 0.1.0 + + 3.13.0 + 21 + 21 + 3.1.1 + 3.3.3 + 0.1.8 + natives-linux-arm64 + + + + + gitea + https://gitea.atria-soft.org/api/packages/org.atriasoft/maven + + + + + gitea + https://gitea.atria-soft.org/api/packages/org.atriasoft/maven + + + gitea + https://gitea.atria-soft.org/api/packages/org.atriasoft/maven + + + + + + + org.lwjgl + lwjgl-bom + ${lwjgl.version} + import + pom + + + + + + + org.atriasoft + io-gami + 0.1.0 + + + org.atriasoft + png-decoder + 0.1.0 + + + + + org.lwjgl + lwjgl + + + org.lwjgl + lwjgl-assimp + + + org.lwjgl + lwjgl-glfw + + + org.lwjgl + lwjgl-jawt + + + org.lwjgl + lwjgl-opengl + + + org.lwjgl + lwjgl-stb + + + org.lwjgl + lwjgl + ${lwjgl.natives} + + + org.lwjgl + lwjgl-assimp + ${lwjgl.natives} + + + org.lwjgl + lwjgl-glfw + ${lwjgl.natives} + + + org.lwjgl + lwjgl-opengl + ${lwjgl.natives} + + + org.lwjgl + lwjgl-stb + ${lwjgl.natives} + + + org.lwjglx + lwjgl3-awt + ${lwjgl3-awt.version} + + + + org.junit.jupiter + junit-jupiter-api + 5.9.3 + test + + + org.slf4j + slf4j-simple + 2.0.7 + test + + + + + src + test/src + ${project.basedir}/out/maven/ + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + maven-assembly-plugin + + + + fully.qualified.MainClass + + + + jar-with-dependencies + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + private + true + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + public + + + + + + diff --git a/src/module-info.java b/src/module-info.java index 97ebff4..38c4137 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -12,10 +12,10 @@ open module org.atriasoft.gale { exports org.atriasoft.gale.context.LWJG_AWT; exports org.atriasoft.gale.key; exports org.atriasoft.gale.resource; - + requires transitive org.atriasoft.etk; requires transitive org.atriasoft.egami; - + requires transitive org.lwjgl; requires transitive org.lwjgl.natives; requires transitive org.lwjgl.glfw; @@ -27,10 +27,10 @@ open module org.atriasoft.gale { requires transitive org.lwjgl.jawt; requires transitive org.lwjgl.opengl; requires transitive org.lwjgl.opengl.natives; - + requires transitive java.desktop; requires transitive org.atriasoft.pngdecoder; requires transitive lwjgl3.awt; - requires org.atriasoft.reggol; requires org.atriasoft.iogami; + requires org.slf4j; } diff --git a/src/org/atriasoft/gale/Gale.java b/src/org/atriasoft/gale/Gale.java index 2cccb49..07f5081 100644 --- a/src/org/atriasoft/gale/Gale.java +++ b/src/org/atriasoft/gale/Gale.java @@ -4,15 +4,17 @@ import org.atriasoft.etk.Uri; import org.atriasoft.gale.context.GaleContext; //import org.atriasoft.gale.context.JOGL.ContextJOGL; import org.atriasoft.gale.context.LWJG_AWT.ContextLWJGLAWT; -//import org.atriasoft.gale.context.LWJGL.ContextLWJGL; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Gale { + static final Logger LOGGER = LoggerFactory.getLogger(Gale.class); + public static GaleContext getContext() { // TODO Auto-generated method stub return GaleContext.getContext(); } - + /** * get GALE version * @return The string that describe gale version @@ -20,16 +22,16 @@ public class Gale { public static String getVersion() { return "J-0.5"; } - + public static void init() { Uri.addLibrary("gale", Gale.class, "/resources/gale/"); } - + /** * This is the only one things the User might done in his main(); * @note To answare you before you ask the question, this is really simple: * Due to the fect that the current system is multiple-platform, you "main" - * Does not exist in the android platform, then gale call other start + * Does not exist in the android platform, then gale call other start * and stop function, to permit to have only one code * @note The main can not be in the gale, due to the fact thet is an librairy * @param _application just created instance of the applicationo @@ -41,17 +43,17 @@ public class Gale { init(); //etk::init(_argc, _argv); GaleContext context = null; - String request = ""; - + final String request = ""; + //context = ContextLWJGL.create(application, arg); //context = ContextJOGL.create(application, arg); context = ContextLWJGLAWT.create(application, arg); if (context == null) { - Log.error("Can not allocate the interface of the GUI ..."); + LOGGER.error("Can not allocate the interface of the GUI ..."); return -1; } return context.run(); } - + private Gale() {} } diff --git a/src/org/atriasoft/gale/GaleApplication.java b/src/org/atriasoft/gale/GaleApplication.java index d2b0867..b2bd074 100644 --- a/src/org/atriasoft/gale/GaleApplication.java +++ b/src/org/atriasoft/gale/GaleApplication.java @@ -7,37 +7,39 @@ import org.atriasoft.etk.math.Vector2f; import org.atriasoft.gale.context.ClipboardList; import org.atriasoft.gale.context.Cursor; import org.atriasoft.gale.context.GaleContext; -import org.atriasoft.gale.internal.Log; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; import org.atriasoft.gale.key.KeyType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class GaleApplication { + static final Logger LOGGER = LoggerFactory.getLogger(GaleApplication.class); private boolean needRedraw = true; private String title = "gale"; private Uri iconName = null; private final Cursor cursor = Cursor.arrow; private Orientation orientation = Orientation.screenAuto; private Vector2f windowsSize = new Vector2f(800, 600); - + public GaleApplication() { - Log.verbose("Constructor Gale Application"); + LOGGER.trace("Constructor Gale Application"); } - + /** * Exit the application (not availlable on IOs, ==> the user will not understand the comportement. He will think the application has crashed (Apple philosophie)) * @param value value to return on the program */ public void exit(final int value) { - Log.verbose("Exit Requested " + value); + LOGGER.trace("Exit Requested " + value); Gale.getContext().stop(); } - + public float getAspectRatio() { return this.windowsSize.x() / this.windowsSize.y(); } - + /** * Get the cursor type. * @return the current cursor. @@ -45,7 +47,7 @@ public class GaleApplication { public Cursor getCursor() { return this.cursor; } - + /** * Get the current filename of the application. * @return Filename of the icon. @@ -53,7 +55,7 @@ public class GaleApplication { public Uri getIcon() { return this.iconName; } - + /** * get the screen orientation (if possible : only on iOs/Android) * @return Current orientation. @@ -61,7 +63,7 @@ public class GaleApplication { public Orientation getOrientation() { return this.orientation; } - + /** * Get the position of the window. * @return Current position of the window. @@ -69,7 +71,7 @@ public class GaleApplication { public Vector2f getPosition() { return new Vector2f(0, 0); } - + /** * Get the size of the window. * @return Current size of the window. @@ -77,7 +79,7 @@ public class GaleApplication { public Vector2f getSize() { return this.windowsSize; } - + /** * Get the current title of the application * @return Current title @@ -85,13 +87,13 @@ public class GaleApplication { public String getTitle() { return this.title; } - + public boolean isDrawingNeeded() { final boolean tmp = this.needRedraw; this.needRedraw = false; return tmp; } - + /** * Hide the virtal keyboard (if possible : only on iOs/Android) */ @@ -102,7 +104,7 @@ public class GaleApplication { } context.keyboardHide(); } - + /** * Show the virtal keyboard (if possible : only on iOs/Android) */ @@ -113,43 +115,43 @@ public class GaleApplication { } context.keyboardShow(); } - + public void markDrawingIsNeeded() { this.needRedraw = true; } - + /** * A clipboard data is back (apear after a request of a new clipboard). * @param clipboardId Id of the clipboard. */ public void onClipboardEvent(final ClipboardList clipboardId) { - + } - + /** * The application is created. * @param context Current gale context. */ public void onCreate(final GaleContext context) { - Log.verbose("Create Gale Application"); + LOGGER.trace("Create Gale Application"); } - + /** * The application is removed (call destructor just adter it.). * @param context Current gale context. */ public void onDestroy(final GaleContext context) { - Log.verbose("Destroy Gale Application"); + LOGGER.trace("Destroy Gale Application"); } - + /** * Real draw of the application * @param context Current gale context. */ public void onDraw(final GaleContext context) { - Log.verbose("draw Gale Application"); + LOGGER.trace("draw Gale Application"); } - + /** * Get keyborad value input. * @param special Current special key status (ctrl/alt/shift ...). @@ -157,42 +159,46 @@ public class GaleApplication { * @param value Unicode value of the char pushed (viable only if type==gale::key::keyboard::character). * @param state State of the key (up/down/upRepeate/downRepeate) */ - public void onKeyboard(final KeySpecial special, final KeyKeyboard type, final Character value, final KeyStatus state) { - + public void onKeyboard( + final KeySpecial special, + final KeyKeyboard type, + final Character value, + final KeyStatus state) { + } - + /** * The user request application removing. * @param context Current gale context. */ public void onKillDemand(final GaleContext context) { - Log.info("Gale request auto destroy ==> no applification specification"); + LOGGER.info("Gale request auto destroy ==> no applification specification"); System.exit(0); } - + /** * Event generated when user change the position of the window. * @param size New position of the window. */ public void onMovePosition(final Vector2f size) { - + } - + /** * The application is Hide / not visible. * @param context Current gale context. */ public void onPause(final GaleContext context) { - Log.verbose("Pause Gale Application"); + LOGGER.trace("Pause Gale Application"); } - + /** * Call when contrext finish process event in the buffer and add a latency of 10ms between calls * @param clock Current time of the call; * @param time time of the program in nanoseconds (monotonic) ==> need restart application approximately every 292 years */ public void onPeriod(final Clock clock, final long time) {} - + /** * Get touch/mouse/... event. * @param type Type of pointer event @@ -200,56 +206,61 @@ public class GaleApplication { * @param pos Position of the event (can be <0 if out of window). * @param state Key state (up/down/move) */ - public void onPointer(final KeySpecial special, final KeyType type, final int pointerID, final Vector2f pos, final KeyStatus state) { - + public void onPointer( + final KeySpecial special, + final KeyType type, + final int pointerID, + final Vector2f pos, + final KeyStatus state) { + } - + /** * call application to precalculate drawing. * @param context Current gale context. */ public void onRegenerateDisplay(final GaleContext context) { - //Log.verbose("Regenerate Gale Application"); + //LOGGER.trace("Regenerate Gale Application"); markDrawingIsNeeded(); } - + /** * Event generated when user change the size of the window. * @param size New size of the window. */ public void onResize(final Vector2f size) { if (size == null) { - Log.error("Try to set a null size ..."); + LOGGER.error("Try to set a null size ..."); return; } this.windowsSize = size; markDrawingIsNeeded(); } - + /** * The application is resumed (now visible). * @param context Current gale context. */ public void onResume(final GaleContext context) { - Log.verbose("Start Gale Application"); + LOGGER.trace("Start Gale Application"); } - + /** * The application is started. * @param context Current gale context. */ public void onStart(final GaleContext context) { - Log.verbose("Start Gale Application"); + LOGGER.trace("Start Gale Application"); } - + /** * The application is stopped. * @param context Current gale context. */ public void onStop(final GaleContext context) { - Log.verbose("Stop Gale Application"); + LOGGER.trace("Stop Gale Application"); } - + /** * Set the cursor type. * @param newCursor Selected cursor. @@ -257,11 +268,11 @@ public class GaleApplication { public void setCursor(final Cursor newCursor) { Gale.getContext().setCursor(this.cursor); } - + void setForceRedraw() { this.needRedraw = true; } - + /** * set the Icon of the application. * @param iconFile File name icon (.bmp/.png). @@ -270,7 +281,7 @@ public class GaleApplication { this.iconName = iconFile; Gale.getContext().setIcon(this.iconName); } - + /** * set the screen orientation (if possible : only on iOs/Android) * @param orientation New orientation. @@ -279,15 +290,15 @@ public class GaleApplication { this.orientation = orientation; Gale.getContext().forceOrientation(this.orientation); } - + /** * Set the position of the window (if possible: Android and Ios does not support it) * @param size New position of the window. */ public void setPosition(final Vector2f size) { - + } - + /** * Set the size of the window (if possible: Android and Ios does not support it) * @param size New size of the window. @@ -295,7 +306,7 @@ public class GaleApplication { */ public void setSize(final Vector2f size) { if (size.x() <= 0 || size.y() <= 0) { - Log.error("Wrong windows size: " + size); + LOGGER.error("Wrong windows size: " + size); } final Vector2f oldSize = this.windowsSize; this.windowsSize = size; @@ -306,12 +317,12 @@ public class GaleApplication { context.setSize(size); /* ==> change API ==> need the GUI notify the Windows that the size has change ???? if (!) { - Log.error("Can not set the size required by the user."); + LOGGER.error("Can not set the size required by the user."); this.windowsSize = oldSize; } */ } - + /** * Set the title of the application * @param title New title to set at the application (if possible: Android and Ios does not support it) diff --git a/src/org/atriasoft/gale/backend3d/OpenGL.java b/src/org/atriasoft/gale/backend3d/OpenGL.java index 49b7e17..f005a11 100644 --- a/src/org/atriasoft/gale/backend3d/OpenGL.java +++ b/src/org/atriasoft/gale/backend3d/OpenGL.java @@ -25,15 +25,18 @@ import org.atriasoft.etk.math.Vector2i; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.etk.math.Vector3i; import org.atriasoft.etk.math.Vector4f; -import org.atriasoft.gale.internal.Log; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class OpenGL { + static final Logger LOGGER = LoggerFactory.getLogger(OpenGL.class); + public enum ClearFlag { clearFlag_colorBuffer, // !< Indicates the buffers currently enabled for color writing. clearFlag_depthBuffer, // !< Indicates the depth buffer. @@ -147,10 +150,13 @@ public class OpenGL { streamDraw, staticDraw, dynamicDraw } - private static final int[] TEXTURE_ID_BINDING = { GL13.GL_TEXTURE0, GL13.GL_TEXTURE1, GL13.GL_TEXTURE2, GL13.GL_TEXTURE3, GL13.GL_TEXTURE4, GL13.GL_TEXTURE5, GL13.GL_TEXTURE6, GL13.GL_TEXTURE7, - GL13.GL_TEXTURE8, GL13.GL_TEXTURE9, GL13.GL_TEXTURE10, GL13.GL_TEXTURE11, GL13.GL_TEXTURE12, GL13.GL_TEXTURE13, GL13.GL_TEXTURE14, GL13.GL_TEXTURE15, GL13.GL_TEXTURE16, GL13.GL_TEXTURE17, - GL13.GL_TEXTURE18, GL13.GL_TEXTURE19, GL13.GL_TEXTURE20, GL13.GL_TEXTURE21, GL13.GL_TEXTURE22, GL13.GL_TEXTURE23, GL13.GL_TEXTURE24, GL13.GL_TEXTURE25, GL13.GL_TEXTURE26, - GL13.GL_TEXTURE27, GL13.GL_TEXTURE28, GL13.GL_TEXTURE29, GL13.GL_TEXTURE30, GL13.GL_TEXTURE31 }; + private static final int[] TEXTURE_ID_BINDING = { GL13.GL_TEXTURE0, GL13.GL_TEXTURE1, GL13.GL_TEXTURE2, + GL13.GL_TEXTURE3, GL13.GL_TEXTURE4, GL13.GL_TEXTURE5, GL13.GL_TEXTURE6, GL13.GL_TEXTURE7, GL13.GL_TEXTURE8, + GL13.GL_TEXTURE9, GL13.GL_TEXTURE10, GL13.GL_TEXTURE11, GL13.GL_TEXTURE12, GL13.GL_TEXTURE13, + GL13.GL_TEXTURE14, GL13.GL_TEXTURE15, GL13.GL_TEXTURE16, GL13.GL_TEXTURE17, GL13.GL_TEXTURE18, + GL13.GL_TEXTURE19, GL13.GL_TEXTURE20, GL13.GL_TEXTURE21, GL13.GL_TEXTURE22, GL13.GL_TEXTURE23, + GL13.GL_TEXTURE24, GL13.GL_TEXTURE25, GL13.GL_TEXTURE26, GL13.GL_TEXTURE27, GL13.GL_TEXTURE28, + GL13.GL_TEXTURE29, GL13.GL_TEXTURE30, GL13.GL_TEXTURE31 }; public static final int GL_RGB = GL11.GL_RGB; @@ -170,9 +176,11 @@ public class OpenGL { private static Matrix4f matrixCamera = Matrix4f.IDENTITY; private static int programId = 0; - private static final Map CONVERT_RENDER_MODE = Map.of(RenderMode.POINT, GL11.GL_POINTS, RenderMode.LINE, GL11.GL_LINES, RenderMode.LINE_STRIP, GL11.GL_LINE_STRIP, - RenderMode.LINE_LOOP, GL11.GL_LINE_LOOP, RenderMode.TRIANGLE, GL11.GL_TRIANGLES, RenderMode.TRIANGLE_STRIP, GL11.GL_TRIANGLE_STRIP, RenderMode.TRIANGLE_FAN, GL11.GL_TRIANGLE_FAN, - RenderMode.QUAD, GL11.GL_QUADS, RenderMode.QUAD_STRIP, GL11.GL_QUAD_STRIP, RenderMode.POLYGON, GL11.GL_POLYGON); + private static final Map CONVERT_RENDER_MODE = Map.of(RenderMode.POINT, GL11.GL_POINTS, + RenderMode.LINE, GL11.GL_LINES, RenderMode.LINE_STRIP, GL11.GL_LINE_STRIP, RenderMode.LINE_LOOP, + GL11.GL_LINE_LOOP, RenderMode.TRIANGLE, GL11.GL_TRIANGLES, RenderMode.TRIANGLE_STRIP, + GL11.GL_TRIANGLE_STRIP, RenderMode.TRIANGLE_FAN, GL11.GL_TRIANGLE_FAN, RenderMode.QUAD, GL11.GL_QUADS, + RenderMode.QUAD_STRIP, GL11.GL_QUAD_STRIP, RenderMode.POLYGON, GL11.GL_POLYGON); private static final Map BASIC_FLAG; private static boolean flagsStatesChange = false; @@ -248,7 +256,8 @@ public class OpenGL { OpenGL.convertUsage.put(Usage.dynamicDraw, GL15.GL_DYNAMIC_DRAW); } private static final Map THREAD_HAS_CONTEXT = new HashMap<>(); - private static final Map BASIC_FLAG_CLEAR = Map.of(ClearFlag.clearFlag_colorBuffer, GL11.GL_COLOR_BUFFER_BIT, ClearFlag.clearFlag_depthBuffer, GL11.GL_DEPTH_BUFFER_BIT, + private static final Map BASIC_FLAG_CLEAR = Map.of(ClearFlag.clearFlag_colorBuffer, + GL11.GL_COLOR_BUFFER_BIT, ClearFlag.clearFlag_depthBuffer, GL11.GL_DEPTH_BUFFER_BIT, ClearFlag.clearFlag_stencilBuffer, GL11.GL_STENCIL_BUFFER_BIT); /** @@ -260,7 +269,7 @@ public class OpenGL { GL13.glActiveTexture(OpenGL.TEXTURE_ID_BINDING[textureID]); OpenGL.checkGlError("glActiveTexture"); } else if (OpenGL.DEBUG) { - Log.error("try to bind texture with no program set"); + LOGGER.error("try to bind texture with no program set"); } } @@ -312,14 +321,14 @@ public class OpenGL { // if (CHECKERROROPENGL) { // boolean hasError = false; // for (int error = GL11.glGetError(); error != null; error = GL11.glGetError()) { - // Log.error("after " + op + "():" + localLine + " glError(" + error + ")"); + // LOGGER.error("after " + op + "():" + localLine + " glError(" + error + ")"); // hasError = true; // } // if (hasError) { - // Log.critical("plop"); + // LOGGER.critical("plop"); // } // for (GLint error = glGetError(); error; error = glGetError()) { - // Log.error("after " + op + "() glError (" + error + ")"); + // LOGGER.error("after " + op + "() glError (" + error + ")"); // } // } } @@ -380,7 +389,7 @@ public class OpenGL { public static boolean deleteBuffers(final int[] buffers) { if (buffers.length == 0) { - Log.warning("try to delete vector buffer with size 0"); + LOGGER.warn("try to delete vector buffer with size 0"); return true; } // TODO Check if we are in the correct thread @@ -406,15 +415,15 @@ public class OpenGL { * @param flagID The flag requested */ public static void disable(final Flag flagID) { - // Log.info("Disable : " + flagID); + // LOGGER.info("Disable : " + flagID); if (OpenGL.DIRECT_MODE) { GL11.glDisable(OpenGL.BASIC_FLAG.get(flagID)); OpenGL.checkGlError("glDisable"); } else { - // Log.debug("Disable FLAGS = " + this.flagsStates); + // LOGGER.debug("Disable FLAGS = " + this.flagsStates); OpenGL.FLAGS_STATES.get(flagID).mustBeSet = false; OpenGL.flagsStatesChange = true; - // Log.debug(" == >" + this.flagsStates); + // LOGGER.debug(" == >" + this.flagsStates); } } @@ -442,35 +451,35 @@ public class OpenGL { * @param flagID The flag requested */ public static void enable(final Flag flagID) { - // Log.info("Enable : " + flagID); + // LOGGER.info("Enable : " + flagID); if (OpenGL.DIRECT_MODE) { GL11.glEnable(OpenGL.BASIC_FLAG.get(flagID)); OpenGL.checkGlError("glEnable"); } else { - // Log.debug("Enable FLAGS = " + this.flagsStates); + // LOGGER.debug("Enable FLAGS = " + this.flagsStates); OpenGL.FLAGS_STATES.get(flagID).mustBeSet = true; OpenGL.flagsStatesChange = true; - // Log.debug(" == >" + this.flagsStates); + // LOGGER.debug(" == >" + this.flagsStates); } } /** - * + * */ public static void finish() { OpenGL.programId = -1; } /** - * + * */ public static void flush() { OpenGL.programId = -1; GL11.glFlush(); // checkGlError("glFlush"); - // Log.info("========================" ); - // Log.info("== FLUSH OPEN GL ==" ); - // Log.info("========================"); + // LOGGER.info("========================" ); + // LOGGER.info("== FLUSH OPEN GL ==" ); + // LOGGER.info("========================"); } public static int genBuffers() { @@ -479,16 +488,16 @@ public class OpenGL { public static boolean genBuffers(final int[] buffers) { if (buffers.length == 0) { - Log.warning("try to generate vector buffer with size 0"); + LOGGER.warn("try to generate vector buffer with size 0"); return true; } - Log.info("Create N=" + buffers.length + " Buffer"); + LOGGER.info("Create N=" + buffers.length + " Buffer"); GL15.glGenBuffers(buffers); OpenGL.checkGlError("glGenBuffers"); boolean hasError = false; for (int iii = 0; iii < buffers.length; iii++) { if (buffers[iii] == 0) { - Log.error("[" + iii + "] error to create a buffer id=" + buffers[iii]); + LOGGER.error("[" + iii + "] error to create a buffer id=" + buffers[iii]); hasError = true; } } @@ -510,7 +519,7 @@ public class OpenGL { */ public static Matrix4f getMatrix() { if (OpenGL.MATRIX_LIST.size() == 0) { - Log.error("set matrix list is not corect size in the stack: 0"); + LOGGER.error("set matrix list is not corect size in the stack: 0"); OpenGL.MATRIX_LIST.add(Matrix4f.IDENTITY); } return OpenGL.MATRIX_LIST.get(OpenGL.MATRIX_LIST.size() - 1); @@ -524,29 +533,63 @@ public class OpenGL { return GL11.glGenTextures(); } - public static void glTexImage2D(final int level, final int internalFormat, final int width, final int height, final int border, final int format, final int sizeObject, final byte[] data) { + public static void glTexImage2D( + final int level, + final int internalFormat, + final int width, + final int height, + final int border, + final int format, + final int sizeObject, + final byte[] data) { final ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length); - for (int iii = 0; iii < data.length; iii++) { - dataBuffer.put(data[iii]); + for (final byte element : data) { + dataBuffer.put(element); } dataBuffer.flip(); - GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, internalFormat, width, height, border, format, sizeObject, dataBuffer); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, internalFormat, width, height, border, format, sizeObject, + dataBuffer); } - public static void glTexImage2D(final int level, final int internalFormat, final int width, final int height, final int border, final int format, final int sizeObject, final ByteBuffer data) { + public static void glTexImage2D( + final int level, + final int internalFormat, + final int width, + final int height, + final int border, + final int format, + final int sizeObject, + final ByteBuffer data) { GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, internalFormat, width, height, border, format, sizeObject, data); } - public static void glTexSubImage2D(final int level, final int xOffset, final int yOffset, final int width, final int height, final int format, final int sizeObject, final byte[] data) { + public static void glTexSubImage2D( + final int level, + final int xOffset, + final int yOffset, + final int width, + final int height, + final int format, + final int sizeObject, + final byte[] data) { final ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length); - for (int iii = 0; iii < data.length; iii++) { - dataBuffer.put(data[iii]); + for (final byte element : data) { + dataBuffer.put(element); } dataBuffer.flip(); - GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, xOffset, yOffset, width, height, format, sizeObject, dataBuffer); + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, xOffset, yOffset, width, height, format, sizeObject, + dataBuffer); } - public static void glTexSubImage2D(final int level, final int xOffset, final int yOffset, final int width, final int height, final int format, final int sizeObject, final ByteBuffer data) { + public static void glTexSubImage2D( + final int level, + final int xOffset, + final int yOffset, + final int width, + final int height, + final int format, + final int sizeObject, + final ByteBuffer data) { GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, xOffset, yOffset, width, height, format, sizeObject, data); } @@ -582,9 +625,9 @@ public class OpenGL { * remove the current matrix and get the last one from the matrix stack. */ public static void pop() { - Log.verbose("Pop OpenGl Matrix: " + OpenGL.MATRIX_LIST.size()); + LOGGER.trace("Pop OpenGl Matrix: " + OpenGL.MATRIX_LIST.size()); if (OpenGL.MATRIX_LIST.size() <= 1) { - Log.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); + LOGGER.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); OpenGL.MATRIX_LIST.clear(); OpenGL.MATRIX_LIST.add(Matrix4f.IDENTITY); OpenGL.matrixCamera = Matrix4f.IDENTITY; @@ -596,11 +639,11 @@ public class OpenGL { public static boolean programAttach(final int prog, final int shader) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return false; } if (shader < 0) { - Log.error("wrong shader ID"); + LOGGER.error("wrong shader ID"); return false; } GL20.glAttachShader(prog, shader); @@ -610,7 +653,7 @@ public class OpenGL { public static void programBindAttribute(final int prog, final int attribute, final String variableName) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return; } GL20.glBindAttribLocation(prog, attribute, variableName); @@ -618,7 +661,7 @@ public class OpenGL { public static boolean programCompile(final int prog) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return false; } GL20.glLinkProgram(prog); @@ -635,14 +678,14 @@ public class OpenGL { // this.bufferDisplayError); // char tmpLog[256]; // int idOut=0; - // Log.error("Could not compile 'PROGRAM':"); + // LOGGER.error("Could not compile 'PROGRAM':"); // for (sizet iii=0; iii= 256) { // tmpLog[idOut] = '\0'; - // Log.error(" == > " + tmpLog); + // LOGGER.error(" == > " + tmpLog); // idOut=0; // } else { // idOut++; @@ -653,7 +696,7 @@ public class OpenGL { // } // if (idOut != 0) { // tmpLog[idOut] = '\0'; - // Log.error(" == > " + tmpLog); + // LOGGER.error(" == > " + tmpLog); // } // return false; // } @@ -666,21 +709,21 @@ public class OpenGL { public static int programCreate() { final int programId = GL20.glCreateProgram(); if (programId == 0) { - Log.error("program creation return error ..."); + LOGGER.error("program creation return error ..."); OpenGL.checkGlError("glCreateProgram"); return -1; } - Log.debug("Create program with oglID=" + programId); + LOGGER.debug("Create program with oglID=" + programId); return programId; } public static boolean programDetach(final int prog, final int shader) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return false; } if (shader < 0) { - Log.error("wrong shader ID"); + LOGGER.error("wrong shader ID"); return false; } GL20.glDetachShader(prog, shader); @@ -690,17 +733,17 @@ public class OpenGL { public static int programGetAttributeLocation(final int prog, final String name) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return -1; } if (name.length() == 0) { - Log.error("wrong name of attribure"); + LOGGER.error("wrong name of attribure"); return -1; } final int val = GL20.glGetAttribLocation(prog, name); if (val < 0) { OpenGL.checkGlError("glGetAttribLocation"); - Log.warning("glGetAttribLocation('" + name + "') = " + val); + LOGGER.warn("glGetAttribLocation('" + name + "') = " + val); return -1; } return val; @@ -708,23 +751,23 @@ public class OpenGL { public static int programGetUniformLocation(final int prog, final String name) { if (prog < 0) { - Log.error("wrong program ID"); + LOGGER.error("wrong program ID"); return -1; } if (name.length() == 0) { - Log.error("wrong name of uniform"); + LOGGER.error("wrong name of uniform"); return -1; } final int val = GL20.glGetUniformLocation(prog, name); if (val == GL11.GL_INVALID_VALUE) { OpenGL.checkGlError("glGetUniformLocation"); - Log.warning("glGetUniformLocation('" + name + "') = GL_INVALID_VALUE"); + LOGGER.warn("glGetUniformLocation('" + name + "') = GL_INVALID_VALUE"); } else if (val == GL11.GL_INVALID_OPERATION) { OpenGL.checkGlError("glGetUniformLocation"); - Log.warning("glGetUniformLocation('" + name + "') = GL_INVALID_OPERATION"); + LOGGER.warn("glGetUniformLocation('" + name + "') = GL_INVALID_OPERATION"); } else if (val < 0) { OpenGL.checkGlError("glGetUniformLocation"); - Log.warning("glGetUniformLocation('" + name + "') = " + val); + LOGGER.warn("glGetUniformLocation('" + name + "') = " + val); } return val; } @@ -750,11 +793,20 @@ public class OpenGL { GL20.glUniform2f(location, value, value2); } - public static void programLoadUniformFloat(final int location, final float value, final float value2, final float value3) { + public static void programLoadUniformFloat( + final int location, + final float value, + final float value2, + final float value3) { GL20.glUniform3f(location, value, value2, value3); } - public static void programLoadUniformFloat(final int location, final float value, final float value2, final float value3, final float value4) { + public static void programLoadUniformFloat( + final int location, + final float value, + final float value2, + final float value3, + final float value4) { GL20.glUniform4f(location, value, value2, value3, value4); } @@ -770,7 +822,12 @@ public class OpenGL { GL20.glUniform3i(location, value, value2, value3); } - public static void programLoadUniformInt(final int location, final int value, final int value2, final int value3, final int value4) { + public static void programLoadUniformInt( + final int location, + final int value, + final int value2, + final int value3, + final int value4) { GL20.glUniform4i(location, value, value2, value3, value4); } @@ -818,7 +875,7 @@ public class OpenGL { // public static void drawElements(RenderMode mode, List indices) { // if (this.programId >= 0) { // updateAllFlags(); - // //Log.debug("Request draw of " + indices.size() + "elements"); + // //LOGGER.debug("Request draw of " + indices.size() + "elements"); // GL15.glDrawElements(convertRenderMode.get(mode), indices.size(), // GL11.GL_UNSIGNED_INT);//, &indices[0]); // checkGlError("glDrawElements"); @@ -845,7 +902,7 @@ public class OpenGL { * @param id Id of the program that might be used */ public static void programUse(final int id) { - // Log.verbose("USE prog : " + id); + // LOGGER.trace("USE prog : " + id); // note : In normal openGL case, the system might call with the program ID and // at the end with 0, // here, we wrap this use to prevent over call of glUseProgram == > then we set @@ -867,9 +924,9 @@ public class OpenGL { * store current matrix in the matrix stack. */ public static void push() { - Log.verbose("push OpenGl Matrix: " + OpenGL.MATRIX_LIST.size()); + LOGGER.trace("push OpenGl Matrix: " + OpenGL.MATRIX_LIST.size()); if (OpenGL.MATRIX_LIST.size() == 0) { - Log.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); + LOGGER.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); OpenGL.MATRIX_LIST.add(Matrix4f.IDENTITY); return; } @@ -887,7 +944,8 @@ public class OpenGL { } reader.close(); } catch (final IOException e) { - Log.critical("Could not read the file!"); + LOGGER.error("Could not read the file!"); + System.exit(-1); } return fileSource; } @@ -897,15 +955,17 @@ public class OpenGL { try { final InputStream inputStream = Uri.getStream(name); if (inputStream == null) { - Log.critical("Could not read the file! " + name); + LOGGER.error("Could not read the file! " + name); + System.exit(-1); } - final Reader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name()))); + final Reader reader = new BufferedReader( + new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name()))); int c = 0; while ((c = reader.read()) != -1) { fileSource.append((char) c); } } catch (final IOException e) { - Log.error("Could not read the file! " + name); + LOGGER.error("Could not read the file! " + name); e.printStackTrace(); System.exit(-1); } @@ -914,7 +974,7 @@ public class OpenGL { public static void reset() { if (OpenGL.DIRECT_MODE) { - Log.error("TODO ..."); + LOGGER.error("TODO ..."); } else { OpenGL.clearFlagState(); OpenGL.programId = -1; @@ -938,7 +998,7 @@ public class OpenGL { */ public static void setBasicMatrix(final Matrix4f newOne) { if (OpenGL.MATRIX_LIST.size() != 1) { - Log.error("matrix is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); + LOGGER.error("matrix is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); } OpenGL.MATRIX_LIST.clear(); OpenGL.MATRIX_LIST.add(newOne); @@ -965,7 +1025,7 @@ public class OpenGL { */ public static void setMatrix(final Matrix4f newOne) { if (OpenGL.MATRIX_LIST.size() == 0) { - Log.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); + LOGGER.error("set matrix list is not corect size in the stack : " + OpenGL.MATRIX_LIST.size()); OpenGL.MATRIX_LIST.add(newOne); return; } @@ -993,25 +1053,25 @@ public class OpenGL { } public static void setViewPort(final Vector2f start, final Vector2f stop) { - // Log.info("setViewport " + start + " " + stop); + // LOGGER.info("setViewport " + start + " " + stop); GL11.glViewport((int) start.x(), (int) start.y(), (int) stop.x(), (int) stop.y()); OpenGL.checkGlError("glViewport"); } public static void setViewPort(final Vector2i start, final Vector2i stop) { - // Log.info("setViewport " + start + " " + stop); + // LOGGER.info("setViewport " + start + " " + stop); GL11.glViewport(start.x(), start.y(), stop.x(), stop.y()); OpenGL.checkGlError("glViewport"); } public static void setViewPort(final Vector3f start, final Vector3f stop) { - // Log.info("setViewport " + start + " " + stop); + // LOGGER.info("setViewport " + start + " " + stop); GL11.glViewport((int) start.x(), (int) start.y(), (int) stop.x(), (int) stop.y()); OpenGL.checkGlError("glViewport"); } public static void setViewPort(final Vector3i start, final Vector3i stop) { - // Log.info("setViewport " + start + " " + stop); + // LOGGER.info("setViewport " + start + " " + stop); GL11.glViewport(start.x(), start.y(), stop.x(), stop.y()); OpenGL.checkGlError("glViewport"); } @@ -1019,18 +1079,18 @@ public class OpenGL { private static int shaderCreate(final ShaderType type) { int shaderId = 0; if (type == ShaderType.VERTEX) { - Log.verbose("create shader: VERTEX"); + LOGGER.trace("create shader: VERTEX"); shaderId = GL20.glCreateShader(GL20.GL_VERTEX_SHADER); } else if (type == ShaderType.FRAGMENT) { - Log.verbose("create shader: FRAGMENT"); + LOGGER.trace("create shader: FRAGMENT"); shaderId = GL20.glCreateShader(GL20.GL_FRAGMENT_SHADER); } else { - Log.error("create shader with wrong type ..."); + LOGGER.error("create shader with wrong type ..."); return -1; } - Log.verbose("create shader: ... (done)"); + LOGGER.trace("create shader: ... (done)"); if (shaderId == 0) { - Log.error("glCreateShader return error ..."); + LOGGER.error("glCreateShader return error ..."); OpenGL.checkGlError("glCreateShader"); return -1; } @@ -1044,8 +1104,8 @@ public class OpenGL { GL20.glShaderSource(shaderID, shaderSource); GL20.glCompileShader(shaderID); if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) { - Log.error(GL20.glGetShaderInfoLog(shaderID, 500)); - Log.error("Could not compile the shader"); + LOGGER.error(GL20.glGetShaderInfoLog(shaderID, 500)); + LOGGER.error("Could not compile the shader"); return -1; } return shaderID; @@ -1061,7 +1121,7 @@ public class OpenGL { } public static FloatBuffer storeDataInFloatBuffer(final Color[] data) { - float[] tmpData = new float[data.length * 4]; + final float[] tmpData = new float[data.length * 4]; for (int iii = 0; iii < data.length; iii++) { tmpData[iii * 4] = data[iii].r(); tmpData[iii * 4 + 1] = data[iii].g(); @@ -1098,7 +1158,7 @@ public class OpenGL { } public static FloatBuffer storeDataInFloatBuffer(final Vector2f[] data) { - float[] tmpData = new float[data.length * 2]; + final float[] tmpData = new float[data.length * 2]; for (int iii = 0; iii < data.length; iii++) { tmpData[iii * 2] = data[iii].x(); tmpData[iii * 2 + 1] = data[iii].y(); @@ -1117,7 +1177,7 @@ public class OpenGL { } public static FloatBuffer storeDataInFloatBuffer(final Vector3f[] data) { - float[] tmpData = new float[data.length * 3]; + final float[] tmpData = new float[data.length * 3]; for (int iii = 0; iii < data.length; iii++) { tmpData[iii * 3] = data[iii].x(); tmpData[iii * 3 + 1] = data[iii].y(); @@ -1140,7 +1200,7 @@ public class OpenGL { } /** - * + * */ public static void swap() { @@ -1198,11 +1258,11 @@ public class OpenGL { if (value.current) { GL11.glEnable(OpenGL.BASIC_FLAG.get(elem.getKey())); OpenGL.checkGlError("glEnable"); - // Log.info(" enable : " + elem.getKey() + " " + basicFlag.get(elem.getKey())); + // LOGGER.info(" enable : " + elem.getKey() + " " + basicFlag.get(elem.getKey())); } else { GL11.glDisable(OpenGL.BASIC_FLAG.get(elem.getKey())); OpenGL.checkGlError("glDisable"); - // Log.info(" disable : " + elem.getKey()); + // LOGGER.info(" disable : " + elem.getKey()); } } } diff --git a/src/org/atriasoft/gale/context/CommandLine.java b/src/org/atriasoft/gale/context/CommandLine.java index 7ca1108..d4ccb29 100644 --- a/src/org/atriasoft/gale/context/CommandLine.java +++ b/src/org/atriasoft/gale/context/CommandLine.java @@ -3,31 +3,33 @@ package org.atriasoft.gale.context; import java.util.ArrayList; import java.util.List; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CommandLine { - private List listArgs = new ArrayList(); - - public void parse(String[] args) { - for (int iii=1 ; iii listArgs = new ArrayList<>(); + + public void parse(final String[] args) { + for (int iii = 1; iii < args.length; iii++) { + LOGGER.info("commandLine : '" + args[iii] + "'"); + this.listArgs.add(args[iii]); } } - + public int size() { - return listArgs.size(); + return this.listArgs.size(); } - - public String get(int id) { - return listArgs.get(id); + + public String get(final int id) { + return this.listArgs.get(id); } - - public void add(String newElement) { - listArgs.add(newElement); + + public void add(final String newElement) { + this.listArgs.add(newElement); } - - public void remove(int id) { - listArgs.remove(id); + + public void remove(final int id) { + this.listArgs.remove(id); } } diff --git a/src/org/atriasoft/gale/context/GaleContext.java b/src/org/atriasoft/gale/context/GaleContext.java index 13e9d5a..07a7901 100644 --- a/src/org/atriasoft/gale/context/GaleContext.java +++ b/src/org/atriasoft/gale/context/GaleContext.java @@ -14,12 +14,13 @@ import org.atriasoft.gale.Gale; import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.Orientation; import org.atriasoft.gale.backend3d.OpenGL; -import org.atriasoft.gale.internal.Log; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; import org.atriasoft.gale.key.KeyType; import org.atriasoft.gale.resource.ResourceManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; interface ActionToDoInAsyncLoop { void run(GaleContext context); @@ -30,13 +31,14 @@ enum ApplicationState { } public abstract class GaleContext { + static final Logger LOGGER = LoggerFactory.getLogger(GaleContext.class); protected static final int MAX_MANAGE_INPUT = 15; private static final String STATIC_ID_RESIZE = "010__RESIZE"; private static final String STATIC_ID_REDRAW_ALL = "0100__REDRAW_ALL"; private static GaleContext globalContext = null; // return true if a flush is needed private static int countMemeCheck = 0; - + /** * From everyware in the program, we can get the context inteface. * @return current reference on the instance. @@ -45,11 +47,11 @@ public abstract class GaleContext { public static GaleContext getContext() { return GaleContext.globalContext; } - + public static void setContext(final GaleContext context) { GaleContext.globalContext = context; } - + protected ThreadAbstract periodicThread; protected GaleApplication application; //!< Application handle protected ApplicationState applicationState = ApplicationState.UNDEFINED; // state of the application @@ -58,7 +60,7 @@ public abstract class GaleContext { // simulation area: private long previousDisplayTime; // this is to limit framerate ... in case... private final boolean displayFps = true; - + private final Lock msgSystemAsyncLock = new ReentrantLock(); private final MessageSystem msgSystemAsync = new MessageSystem(); private final MessageSystem msgSystemGui = new MessageSystem(); @@ -71,7 +73,7 @@ public abstract class GaleContext { protected Vector2f windowsPos; //!< current size of the system // note: in the current mode, the management is not able to synchronize it good.. private final boolean requestSynchronousProcessing = true; //!< this permit to process the event in the global GUI thread instead of the local processing thread. - + public GaleContext(final GaleApplication application, final String[] args) { // set a basic this.application = application; @@ -79,17 +81,18 @@ public abstract class GaleContext { GaleContext.setContext(this); Thread.currentThread().setName("galeThread"); if (this.application == null) { - Log.critical("Can not start context with no Application ==> rtfm ..."); + LOGGER.error("Can not start context with no Application ==> rtfm ..."); + throw new RuntimeException("Can not start context with no Application ==> rtfm ..."); } this.commandLine.parse(args); - Log.info(" == > Gale system init (BEGIN)"); + LOGGER.info(" == > Gale system init (BEGIN)"); // create thread to manage real periodic event this.periodicThread = new PeriodicThread(this); - + // By default we set 2 themes (1 color and 1 shape ...) : //theme::setNameDefault("GUI", "shape/square/"); //theme::setNameDefault("COLOR", "color/black/"); - + // parse the debug level: // for(int iii=0; iii { final GaleApplication appl = context.getApplication(); @@ -132,12 +135,12 @@ public abstract class GaleContext { // this is done at the end to perform a full ended rendering. context.requestUpdateSize(); }); - + // force a recalculation //requestUpdateSize(); - Log.info(" == > Gale system init (END)"); + LOGGER.info(" == > Gale system init (END)"); } - + /** * Inform the Gui that we want to have a copy of the clipboard * @param clipboardID ID of the clipboard (STD/SELECTION) only apear here @@ -146,7 +149,7 @@ public abstract class GaleContext { // just transmit an event , we have the data in the system operatingSystemClipBoardArrive(clipboardID); } - + /** * Inform the Gui that we are the new owner of the clipboard * @param clipboardID ID of the clipboard (STD/SELECTION) only apear here @@ -154,7 +157,7 @@ public abstract class GaleContext { public void clipBoardSet(final ClipboardList clipboardID) { // nothing to do, data is already copyed in the GALE clipborad center } - + /** * force the screen orientation (availlable on portable elements ... * @param orientation Selected orientation. @@ -164,11 +167,11 @@ public abstract class GaleContext { context.forceOrientationThreadGUI(orientation); }); } - + protected void forceOrientationThreadGUI(final Orientation orientation) { - Log.todo("forceOrientation: not implemented"); + LOGGER.info("TODO: forceOrientation: not implemented"); } - + /** * Redraw all the windows */ @@ -181,12 +184,12 @@ public abstract class GaleContext { } this.application.onResize(this.windowsSize); } - + // Called by Consumer public ActionToDoInAsyncLoop getAction() { return this.msgSystemAsync.getElementWait(); } - + public GaleApplication getApplication() { return this.application; /* @@ -199,15 +202,15 @@ public abstract class GaleContext { } */ } - + public CommandLine getCmd() { return this.commandLine; } - + public boolean getFullScreen() { return this.fullscreen; } - + /** * The Application request the current position of the windows. * @return Turrent position of the Windows. @@ -215,11 +218,11 @@ public abstract class GaleContext { public Vector2f getPos() { return this.windowsPos; } - + public ResourceManager getResourcesManager() { return this.resourceManager; } - + /** * get the current windows size * @return the current size ... @@ -227,7 +230,7 @@ public abstract class GaleContext { public Vector2f getSize() { return this.windowsSize; } - + /** * get all Keyboard event from the X system (like many time use of META) * @param status "true" if all the event will be get, false if we want only ours. @@ -237,11 +240,11 @@ public abstract class GaleContext { context.grabKeyboardEventsThreadGUI(status); }); } - + protected void grabKeyboardEventsThreadGUI(final boolean status) { - Log.info("grabKeyboardEvents: NOT implemented ..."); + LOGGER.info("grabKeyboardEvents: NOT implemented ..."); } - + /** * get all Mouse/Touch events from the X system * @param status "true" if all the event will be get, false if we want only ours. @@ -252,12 +255,12 @@ public abstract class GaleContext { context.grabPointerEventsThreadGUI(status, forcedPosition); }); } - + protected void grabPointerEventsThreadGUI(final boolean status, final Vector2f forcedPosition) { - Log.info("grabPointerEvents: NOT implemented ..."); - + LOGGER.info("grabPointerEvents: NOT implemented ..."); + } - + /** * The Application request that the Windows will be Hidden. */ @@ -266,15 +269,15 @@ public abstract class GaleContext { context.hideThreadGUI(); }); } - + protected void hideThreadGUI() { - Log.info("hide: NOT implemented ..."); + LOGGER.info("hide: NOT implemented ..."); } - + public boolean isGrabPointerEvents() { return false; } - + /** * Hide the virtual keyboard (for touch system only) */ @@ -283,11 +286,11 @@ public abstract class GaleContext { context.keyboardHideThreadGUI(); }); } - + protected void keyboardHideThreadGUI() { - Log.info("keyboardHide: NOT implemented ..."); + LOGGER.info("keyboardHide: NOT implemented ..."); } - + /** * display the virtual keyboard (for touch system only) */ @@ -296,11 +299,11 @@ public abstract class GaleContext { context.keyboardShowThreadGUI(); }); } - + protected void keyboardShowThreadGUI() { - Log.info("keyboardShow: NOT implemented ..."); + LOGGER.info("keyboardShow: NOT implemented ..."); } - + /** * Open an URL on an eternal brother. * @param url URL to open. @@ -310,25 +313,25 @@ public abstract class GaleContext { context.openURLThreadGUI(url); }); } - + protected void openURLThreadGUI(final String url) { - Log.info("openURL: NOT implemented ..."); + LOGGER.info("openURL: NOT implemented ..."); } - + /** * The current context is set in background (framerate is slowing down (max fps)/5 # 4fps) */ public void operatingSystemBackground() { // set the current interface : try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { - Log.info("operatingSystemBackground..."); + LOGGER.info("operatingSystemBackground..."); // if (this.windowsCurrent != null) { // this.windowsCurrent.onStateBackground(); // } // release the current interface : } } - + /** * Call by the OS when a clipboard arrive to US (previously requested by a widget) * @param clipboardID of the clipboard @@ -341,14 +344,14 @@ public abstract class GaleContext { } }); } - + public boolean operatingSystemDraw(final boolean displayEveryTime) { if (GaleContext.countMemeCheck++ >= 10 * 16) { GaleContext.countMemeCheck = 0; } - Log.verbose("Call draw"); + LOGGER.trace("Call draw"); final long currentTime = System.nanoTime(); - //Log.warning("Time = " << currentTime << " " << currentTime2); + //LOGGER.warn("Time = " << currentTime << " " << currentTime2); // TODO Review this ... // this is to prevent the multiple display at the a high frequency ... if (currentTime - this.previousDisplayTime < 8) { @@ -374,18 +377,18 @@ public abstract class GaleContext { try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { /* Lock the event processing - + Wait end of current processing - + Display ... - + Release the event processing - + */ if (this.application != null) { if (this.applicationState == ApplicationState.RUNNING) { // Redraw all needed elements - //Log.debug("Regenerate Display"); + //LOGGER.debug("Regenerate Display"); this.application.onRegenerateDisplay(this); needRedraw = this.application.isDrawingNeeded(); } else { @@ -407,7 +410,7 @@ public abstract class GaleContext { this.fpsSystemContext.tic(); } if (needRedraw || displayEveryTime) { - //Log.debug(" ==> real Draw"); + //LOGGER.debug(" ==> real Draw"); try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { this.resourceManager.updateContext(); } @@ -430,7 +433,7 @@ public abstract class GaleContext { OpenGL.setViewPort(new Vector2f(0, 0), this.application.getSize()); final Color bgColor = new Color(0.8f, 0.5f, 0.8f, 1.0f); OpenGL.clearColor(bgColor); - //Log.info("==> appl clear ==> not created ..."); + //LOGGER.info("==> appl clear ==> not created ..."); } } hasDisplayDone = true; @@ -441,7 +444,7 @@ public abstract class GaleContext { this.fpsFlush.tic(); } if (hasDisplayDone) { - //Log.info("lklklklklk " << displayEveryTime); + //LOGGER.info("lklklklklk " << displayEveryTime); if (this.displayFps) { this.fpsFlush.incrementCounter(); } @@ -475,21 +478,21 @@ public abstract class GaleContext { OpenGL.threadHasNoMoreContext(); return hasDisplayDone; } - + /** * The current context is set in foreground (framerate is maximum speed) */ public void operatingSystemForeground() { // set the current interface : try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { - Log.info("operatingSystemForeground..."); - + LOGGER.info("operatingSystemForeground..."); + // if (this.windowsCurrent != null) { // this.windowsCurrent.onStateForeground(); // } } } - + /** * The OS inform that the Windows is now Hidden. */ @@ -505,10 +508,10 @@ public abstract class GaleContext { char, state); */ - Log.todo("HIDE ... "); + LOGGER.info("TODO: HIDE ... "); }); } - + /** * The OS inform that the current windows has change his position. * @param pos New position of the Windows. @@ -518,7 +521,7 @@ public abstract class GaleContext { return; } postActionAsync(context -> { - Log.debug("Receive MSG : THREADMOVE : {} ==> {}", context.windowsPos, pos); + LOGGER.debug("Receive MSG : THREADMOVE : {} ==> {}", context.windowsPos, pos); context.windowsPos = pos; final GaleApplication appl = context.getApplication(); if (appl == null) { @@ -527,27 +530,27 @@ public abstract class GaleContext { appl.onMovePosition(context.windowsPos); }); } - + /** * The OS inform that the openGL ext has been destroy == > use to automaticly reload the texture and other thinks ... */ public void operatingSystemOpenGlContextDestroy() { this.resourceManager.contextHasBeenDestroyed(); } - + /** * The OS inform that the current windows has change his size. * @param size new size of the windows. */ public void operatingSystemResize(final Vector2f size) { - Log.warning("Resize request={} previous={}", size, this.windowsSize); + LOGGER.warn("Resize request={} previous={}", size, this.windowsSize); if (this.windowsSize.equals(size)) { return; } // TODO Better in the thread ... ==> but generate some init error ... //gale::Dimension::setPixelWindowsSize(size); postActionAsync(GaleContext.STATIC_ID_RESIZE, context -> { - Log.error("Receive MSG : THREAD_RESIZE : {} ==> {}", context.windowsSize, size); + LOGGER.error("Receive MSG : THREAD_RESIZE : {} ==> {}", context.windowsSize, size); context.windowsSize = size; //gale::Dimension::setPixelWindowsSize(context.windowsSize); final GaleApplication tmpAppl = context.getApplication(); @@ -558,14 +561,14 @@ public abstract class GaleContext { context.forceRedrawAll(); }); } - + /** * The current context is resumed */ public void operatingSystemResume() { // set the current interface : try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { - Log.info("operatingSystemResume..."); + LOGGER.info("operatingSystemResume..."); this.previousDisplayTime = System.currentTimeMillis(); // TODO this.objectManager.timeCallResume(this.previousDisplayTime); // if (this.windowsCurrent != null) { @@ -573,9 +576,14 @@ public abstract class GaleContext { // } } } - - public void operatingSystemSetInput(final KeySpecial special, final KeyType type, final KeyStatus status, final int pointerID, final Vector2f pos) { - Log.verbose("Position motion: " + pos); + + public void operatingSystemSetInput( + final KeySpecial special, + final KeyType type, + final KeyStatus status, + final int pointerID, + final Vector2f pos) { + LOGGER.trace("Position motion: " + pos); postActionAsync(context -> { final GaleApplication appl = context.getApplication(); if (appl == null) { @@ -584,12 +592,21 @@ public abstract class GaleContext { appl.onPointer(special, type, pointerID, pos, status); }); } - - public void operatingSystemsetKeyboard(final KeySpecial special, final KeyKeyboard type, final KeyStatus state, final boolean isARepeateKey) { + + public void operatingSystemsetKeyboard( + final KeySpecial special, + final KeyKeyboard type, + final KeyStatus state, + final boolean isARepeateKey) { operatingSystemsetKeyboard(special, type, state, isARepeateKey, (char) 0); } - - public void operatingSystemsetKeyboard(final KeySpecial special, final KeyKeyboard type, final KeyStatus state, final boolean isARepeateKey, final Character charValue) { + + public void operatingSystemsetKeyboard( + final KeySpecial special, + final KeyKeyboard type, + final KeyStatus state, + final boolean isARepeateKey, + final Character charValue) { KeyStatus tmpState = state; if (isARepeateKey) { if (tmpState == KeyStatus.down) { @@ -600,8 +617,12 @@ public abstract class GaleContext { } operatingSystemsetKeyboard2(special, type, state, charValue); } - - public void operatingSystemsetKeyboard2(final KeySpecial special, final KeyKeyboard type, final KeyStatus state, final Character charValue) { + + public void operatingSystemsetKeyboard2( + final KeySpecial special, + final KeyKeyboard type, + final KeyStatus state, + final Character charValue) { postActionAsync(context -> { final GaleApplication appl = context.getApplication(); if (appl == null) { @@ -610,7 +631,7 @@ public abstract class GaleContext { appl.onKeyboard(special, type, charValue, state); }); } - + /** * The OS inform that the Windows is now visible. */ @@ -626,17 +647,17 @@ public abstract class GaleContext { char, state); */ - Log.todo("SHOW ... "); + LOGGER.info("TODO: SHOW ... "); }); } - + /** * The OS Inform that the Window has been killed */ public void operatingSystemStop() { // set the current interface : try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { - Log.info("operatingSystemStop..."); + LOGGER.info("operatingSystemStop..."); if (this.application == null) { stop(); return; @@ -644,22 +665,22 @@ public abstract class GaleContext { this.application.onKillDemand(this); } } - + /** * The current context is suspended */ public void operatingSystemSuspend() { // set the current interface : try (AutoUnLock autoUnlock = AutoUnLock.lock(this.msgSystemAsyncLock)) { - Log.info("operatingSystemSuspend..."); + LOGGER.info("operatingSystemSuspend..."); this.previousDisplayTime = 0; - + // if (this.windowsCurrent != null) { // this.windowsCurrent.onStateSuspend(); // } } } - + protected void postActionAsync(final ActionToDoInAsyncLoop data) { if (this.requestSynchronousProcessing) { this.msgSystemGui.addElement(data); @@ -668,7 +689,7 @@ public abstract class GaleContext { } //Later, when the necessary event happens, the thread that is running it calls notify() from a block synchronized on the same object. } - + protected void postActionAsync(final String uniqueID, final ActionToDoInAsyncLoop data) { if (this.requestSynchronousProcessing) { this.msgSystemGui.addElement(uniqueID, data); @@ -677,12 +698,12 @@ public abstract class GaleContext { } //Later, when the necessary event happens, the thread that is running it calls notify() from a block synchronized on the same object. } - + protected void postActionToGui(final ActionToDoInAsyncLoop data) { this.msgSystemGui.addElement(data); //Later, when the necessary event happens, the thread that is running it calls notify() from a block synchronized on the same object. } - + /** * Processing all the event arrived ... (commonly called in draw function) */ @@ -693,7 +714,7 @@ public abstract class GaleContext { try { int nbEvent = 0; while (this.msgSystemAsync.getSize() > 0) { - Log.verbose(" [" + nbEvent + "] event ..."); + LOGGER.trace(" [" + nbEvent + "] event ..."); nbEvent++; final ActionToDoInAsyncLoop func = this.msgSystemAsync.getElementWait(); if (func == null) { @@ -702,12 +723,13 @@ public abstract class GaleContext { func.run(this); } } catch (final Exception e) { - Log.critical("Catch exception in main event Loop ...", e); + LOGGER.error("Catch exception in main event Loop ...", e); + throw e; } finally { this.msgSystemAsyncLock.unlock(); } } - + /** * Process event in the GUI thread ==> prevent dead lock on the global GUI interface */ @@ -724,14 +746,15 @@ public abstract class GaleContext { func.run(this); } } catch (final Exception e) { - Log.critical("Catch exception in main event Loop ...", e); + LOGGER.error("Catch exception in main event Loop ...", e); + throw e; } finally { this.msgSystemAsyncLock.unlock(); } } - + // gale::Context::~Context() { - // Log.info(" == > Gale system Un-Init (BEGIN)"); + // LOGGER.info(" == > Gale system Un-Init (BEGIN)"); // this.periodicThread.threadStart(); // getResourcesManager().applicationExiting(); // // TODO Clean the message list ... @@ -751,7 +774,7 @@ public abstract class GaleContext { // //this.objectManager.cleanInternalRemoved(); // this.resourceManager.cleanInternalRemoved(); // - // Log.info("List of all widget of this context must be equal at 0 ==> otherwise some remove is missing"); + // LOGGER.info("List of all widget of this context must be equal at 0 ==> otherwise some remove is missing"); // //this.objectManager.displayListObject(); // // Resource is an lower element as objects ... // this.resourceManager.unInit(); @@ -759,7 +782,7 @@ public abstract class GaleContext { // //this.objectManager.unInit(); // // release the current interface : // unLockContext(); - // Log.info(" == > Gale system Un-Init (END)"); + // LOGGER.info(" == > Gale system Un-Init (END)"); // if (this.simulationActive) { // // in simulation case: // this.simulationFile.close(); @@ -767,25 +790,25 @@ public abstract class GaleContext { // } public void requestUpdateSize() { postActionAsync(this.STATIC_ID_REDRAW_ALL, context -> { - //Log.debug("Receive MSG : THREADRESIZE"); + //LOGGER.debug("Receive MSG : THREADRESIZE"); context.forceRedrawAll(); }); } - + /** * reset event management for the IO like Input ou Mouse or keyborad */ public void resetIOEvent() { // TODO this.input.newLayerSet(); } - + /** * Internal API to run the processing of the event loop ... * @return The Exit value of the program * @note INTERNAL API */ public abstract int run(); - + /** * set the cursor display type. * @param newCursor selected new cursor. @@ -795,11 +818,11 @@ public abstract class GaleContext { context.setCursorThreadGUI(newCursor); }); } - + public void setCursorThreadGUI(final Cursor newCursor) { - Log.info("setCursor: NOT implemented ..."); + LOGGER.info("setCursor: NOT implemented ..."); } - + /** * The application request a change of his current size force the fullscreen mode. * @param status status of the fullscreen mode. @@ -810,11 +833,11 @@ public abstract class GaleContext { context.setFullScreenThreadGUI(status); }); } - + protected void setFullScreenThreadGUI(final boolean status) { - Log.info("setFullScreen: NOT implemented ..."); + LOGGER.info("setFullScreen: NOT implemented ..."); } - + /** * set the Icon of the program * @param inputFile new filename icon of the current program. @@ -824,11 +847,11 @@ public abstract class GaleContext { context.setIconThreadGUI(inputFile); }); } - + public void setIconThreadGUI(final Uri inputFile) { - Log.info("setIcon: NOT implemented ..."); + LOGGER.info("setIcon: NOT implemented ..."); } - + /** * The Application request that the current windows will change his position. * @param pos New position of the Windows requested. @@ -838,11 +861,11 @@ public abstract class GaleContext { context.setPosThreadGUI(pos); }); } - + protected void setPosThreadGUI(final Vector2f pos) { - Log.info("setPos: NOT implemented ..."); + LOGGER.info("setPos: NOT implemented ..."); } - + /** * The application request a change of his current size. * @param size new Requested size of the windows. @@ -852,11 +875,11 @@ public abstract class GaleContext { context.setSizeThreadGUI(size); }); } - + protected void setSizeThreadGUI(final Vector2f size) { - Log.info("setSize: NOT implemented ..."); + LOGGER.info("setSize: NOT implemented ..."); } - + /** * set the new title of the windows * @param title New desired title @@ -866,15 +889,15 @@ public abstract class GaleContext { context.setTitleThreadGUI(title); }); } - + /** * set the new title of the windows * @param title New desired title */ protected void setTitleThreadGUI(final String title) { - Log.info("setTitle: NOT implemented ..."); + LOGGER.info("setTitle: NOT implemented ..."); } - + /** * Enable or Disable the decoration on the Windows (availlable only on Desktop) * @param status "true" to enable decoration / false otherwise @@ -884,11 +907,11 @@ public abstract class GaleContext { context.setWindowsDecorationThreadGUI(status); }); } - + protected void setWindowsDecorationThreadGUI(final boolean status) { - Log.info("setWindowsDecoration: NOT implemented ..."); + LOGGER.info("setWindowsDecoration: NOT implemented ..."); } - + /** * The Application request that the Windows will be visible. */ @@ -897,11 +920,11 @@ public abstract class GaleContext { context.showThreadGUI(); }); } - + public void showThreadGUI() { - Log.info("show: NOT implemented ..."); + LOGGER.info("show: NOT implemented ..."); } - + /** * StartProcessing (2nd thread). * @note to call when all the Context is started @@ -918,12 +941,12 @@ public abstract class GaleContext { } } } - + /** * The application request that the Window will be killed */ public void stop() { - Log.warning("stop: NOT implemented for this platform..."); + LOGGER.warn("stop: NOT implemented for this platform..."); } - + } diff --git a/src/org/atriasoft/gale/context/LWJG_AWT/ContextLWJGLAWT.java b/src/org/atriasoft/gale/context/LWJG_AWT/ContextLWJGLAWT.java index 9031a86..1c666d1 100644 --- a/src/org/atriasoft/gale/context/LWJG_AWT/ContextLWJGLAWT.java +++ b/src/org/atriasoft/gale/context/LWJG_AWT/ContextLWJGLAWT.java @@ -31,7 +31,6 @@ import org.atriasoft.gale.DisplayManagerDraw; import org.atriasoft.gale.Fps; import org.atriasoft.gale.GaleApplication; import org.atriasoft.gale.context.GaleContext; -import org.atriasoft.gale.internal.Log; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; import org.atriasoft.gale.key.KeyStatus; @@ -45,10 +44,12 @@ import org.lwjgl.opengl.awt.AWTGLCanvas; //import org.lwjgl.opengl.GL; //import org.lwjgl.system.MemoryStack; import org.lwjgl.opengl.awt.GLData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import org.atriasoft.reggol.Logger; - -public class ContextLWJGLAWT extends GaleContext implements MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { +public class ContextLWJGLAWT extends GaleContext + implements MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { + static final Logger LOGGER = LoggerFactory.getLogger(ContextLWJGLAWT.class); private static final int WIDTH = 800; private static final int HEIGHT = 600; private static final int MAX_MANAGE_INPUT = 15; @@ -57,36 +58,36 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse private static float delta; private static double whellOffsetY; private static double whellOffsetX; - + private static boolean rightButtonStateDown = false; private static boolean leftButtonStateDown = false; - + private static double lastMousePositionX = 0; - + private static double lastMousePositionY = 0; private static double currentMousePositionX = 0; private static double currentMousePositionY = 0; - + public static GaleContext create(final GaleApplication application, final String[] arg) { // TODO Auto-generated method stub return new ContextLWJGLAWT(application, arg); } - + private static long getCurrentTime() { return System.currentTimeMillis(); } - + public static float getFrameTimeSecconds() { return ContextLWJGLAWT.delta; } - + private final boolean[] inputIsPressed = new boolean[ContextLWJGLAWT.MAX_MANAGE_INPUT]; private Vector2f decoratedWindowsSize = Vector2f.ZERO; private Vector2f cursorPos = Vector2f.ZERO; - + private final Vector2f cursorSize = Vector2f.ZERO; private final Fps fps = new Fps("Main Loop", true); - + private DisplayManagerDraw drawer = null; // The window handle private final long window = 0; @@ -94,14 +95,14 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse // Generic UI properties private JFrame frame; private GLData glData; - + private AWTGLCanvas canvas; - + private Robot robot = null; - + private final List pressedKey = new ArrayList<>(); private Boolean isInitialized = false; - + public ContextLWJGLAWT(final GaleApplication application, final String[] args) { super(application, args); System.out.println("Hello JOGL !"); @@ -109,7 +110,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse start2ndThreadProcessing(); this.isInitialized = true; } - + private int getUniqueIndex(final KeyEvent e) { int internalKeyValue = e.getKeyCode(); if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { @@ -123,7 +124,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } return internalKeyValue; } - + @Override protected void grabPointerEventsThreadGUI(final boolean status, final Vector2f forcedPosition) { if (status) { @@ -139,14 +140,15 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse showCursor(); } } - + private void hideCursor() { final int[] pixels = new int[16 * 16]; final Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); - final Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisiblecursor"); + final Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), + "invisiblecursor"); this.frame.setCursor(transparentCursor); } - + private void initWindows() { this.frame = new JFrame("Gale base"); this.frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); @@ -158,19 +160,21 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse this.frame.add(this.canvas = new AWTGLCanvas(this.glData) { @Override public void initGL() { - System.out.println("OpenGL version: " + this.effective.majorVersion + "." + this.effective.minorVersion + " (Profile: " + this.effective.profile + ")"); + System.out.println("OpenGL version: " + this.effective.majorVersion + "." + this.effective.minorVersion + + " (Profile: " + this.effective.profile + ")"); GL.createCapabilities(); GL11.glClearColor(0.3f, 0.4f, 0.5f, 1); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } - + @Override public void paintGL() { final long startRender = System.currentTimeMillis(); - //Log.warning("Draw ... "); + //LOGGER.warn("Draw ... "); final int w = getWidth(); final int h = getHeight(); - if (ContextLWJGLAWT.this.decoratedWindowsSize.x() != w || ContextLWJGLAWT.this.decoratedWindowsSize.y() != h) { + if (ContextLWJGLAWT.this.decoratedWindowsSize.x() != w + || ContextLWJGLAWT.this.decoratedWindowsSize.y() != h) { ContextLWJGLAWT.this.decoratedWindowsSize = new Vector2f(w, h); final Rectangle bounds = ContextLWJGLAWT.this.canvas.getBounds(); final Vector2f tmpWindowsSize = new Vector2f(bounds.width, bounds.height); @@ -178,9 +182,11 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } operatingSystemDraw(true); swapBuffers(); + /* if (Logger.isCriticalOccured()) { ContextLWJGLAWT.this.frame.dispose(); } + */ // Process event from the GUI (specific events... processEventsGui(); /* @@ -204,21 +210,21 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse this.canvas.addKeyListener(this); this.canvas.addMouseWheelListener(this); this.frame.transferFocus(); - + ContextLWJGLAWT.lastFrameTime = ContextLWJGLAWT.getCurrentTime(); - + } - + @Override public boolean isGrabPointerEvents() { return this.robot != null; } - + public void keyEvent(final KeyEvent e, final boolean pressed, final boolean thisIsAReapeateKey) { - //Log.info("event " + thisIsAReapeateKey + " " + e.getKeyCode() + " " + e); + //LOGGER.info("event " + thisIsAReapeateKey + " " + e.getKeyCode() + " " + e); boolean find = true; KeyKeyboard keyInput = KeyKeyboard.UNKNOWN; - //Log.error("keyboard input " + e.getWhen() + " " + e.getKeyCode() + " " + e.getKeyLocation()); + //LOGGER.error("keyboard input " + e.getWhen() + " " + e.getKeyCode() + " " + e.getKeyLocation()); switch (e.getKeyCode()) { //case 328: // keypad case KeyEvent.VK_UP: @@ -362,38 +368,48 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse find = false; if (this.guiKeyBoardMode.getNumLock()) { if (thisIsAReapeateKey) { - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, '.'); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, '.'); } - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, '.'); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, '.'); } else { if (thisIsAReapeateKey) { - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x7F); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x7F); } - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x7F); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x7F); } break; case KeyEvent.VK_TAB: // special case for TAB find = false; if (thisIsAReapeateKey) { - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x09); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x09); } - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x09); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, (char) 0x09); break; default: find = false; if (thisIsAReapeateKey) { - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, e.getKeyChar()); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, e.getKeyChar()); } - operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, e.getKeyChar()); + operatingSystemsetKeyboard(this.guiKeyBoardMode, KeyKeyboard.CHARACTER, + (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey, e.getKeyChar()); } if (find) { if (thisIsAReapeateKey) { - operatingSystemsetKeyboard(this.guiKeyBoardMode, keyInput, (!pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey); + operatingSystemsetKeyboard(this.guiKeyBoardMode, keyInput, (!pressed ? KeyStatus.down : KeyStatus.up), + thisIsAReapeateKey); } - operatingSystemsetKeyboard(this.guiKeyBoardMode, keyInput, (pressed ? KeyStatus.down : KeyStatus.up), thisIsAReapeateKey); + operatingSystemsetKeyboard(this.guiKeyBoardMode, keyInput, (pressed ? KeyStatus.down : KeyStatus.up), + thisIsAReapeateKey); } } - + @Override public void keyPressed(final KeyEvent e) { final int internalKeyValue = getUniqueIndex(e); @@ -403,7 +419,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } keyEvent(e, true, index != -1); } - + @Override public void keyReleased(final KeyEvent e) { final int internalKeyValue = getUniqueIndex(e); @@ -413,60 +429,60 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } keyEvent(e, false, false); } - + @Override public void keyTyped(final KeyEvent e) { // not needed with my model ... - //Log.info(" typed " + e.getKeyChar() + " " + e); + //LOGGER.info(" typed " + e.getKeyChar() + " " + e); } - + @Override public void mouseClicked(final MouseEvent e) { // System.out.println(e.getX()); // System.out.println(e.getY()); - Log.info("Mouse clicked:" + e.getX() + " " + e.getY()); + LOGGER.info("Mouse clicked:" + e.getX() + " " + e.getY()); } - + @Override public void mouseDragged(final MouseEvent e) { - //Log.error("mouse drag ... " + e); + //LOGGER.error("mouse drag ... " + e); mouseMoved(e); } - + @Override public void mouseEntered(final MouseEvent e) { // TODO Auto-generated method stub - //Log.info("Mouse entered:" + e.getX() + " " + e.getY()); + //LOGGER.info("Mouse entered:" + e.getX() + " " + e.getY()); this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() - e.getY()); operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.enter, 0, this.cursorPos); } - + @Override public void mouseExited(final MouseEvent e) { // TODO Auto-generated method stub - //Log.info("Mouse exited:" + e.getX() + " " + e.getY()); + //LOGGER.info("Mouse exited:" + e.getX() + " " + e.getY()); this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() - e.getY()); operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.leave, 0, this.cursorPos); //this.frame.mouseMove(e, 200, 200); } - + @Override public void mouseMoved(final MouseEvent e) { - Log.verbose("Mouse moved:" + e.getX() + " " + e.getY() + " " + e); + LOGGER.trace("Mouse moved:" + e.getX() + " " + e.getY() + " " + e); if (this.robot != null) { final Rectangle bounds = this.frame.getBounds(); - //Log.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); + //LOGGER.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); final float refPosX = bounds.x + bounds.width / 2.0f; final float refPosY = bounds.y + bounds.height / 2.0f; if (e.getXOnScreen() == (int) refPosX && e.getYOnScreen() == (int) refPosY) { this.cursorPos = Vector2f.ZERO; return; } - //Log.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); + //LOGGER.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); this.cursorPos = new Vector2f(-(e.getXOnScreen() - refPosX), (e.getYOnScreen() - refPosY)); //this.cursorPos = new Vector2f(-(e.getXOnScreen() - refPosX), refPosY); this.robot.mouseMove((int) refPosX, (int) refPosY); - Log.info("delta moved:" + this.cursorPos); + LOGGER.info("delta moved:" + this.cursorPos); } else { // TODO use real size ... !!!! this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() + (this.cursorSize.y() - e.getY())); @@ -475,7 +491,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse boolean findOne = false; for (int iii = 0; iii < ContextLWJGLAWT.MAX_MANAGE_INPUT; iii++) { if (this.inputIsPressed[iii]) { - //Log.debug("X11 event: bt=" << iii << " " << event.type << " = \"MotionNotify\" (" << m_cursorEventX << "," << m_cursorEventY << ")"); + //LOGGER.debug("X11 event: bt=" << iii << " " << event.type << " = \"MotionNotify\" (" << m_cursorEventX << "," << m_cursorEventY << ")"); operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.move, iii, this.cursorPos); findOne = true; } @@ -485,10 +501,10 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.move, 0, this.cursorPos); } } - + @Override public void mousePressed(final MouseEvent e) { - Log.info("Mouse pressed:" + e.getX() + " " + e.getY()); + LOGGER.info("Mouse pressed:" + e.getX() + " " + e.getY()); final int button = e.getButton(); this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() - e.getY()); if (button < ContextLWJGLAWT.MAX_MANAGE_INPUT) { @@ -496,11 +512,11 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.down, button, this.cursorPos); } - + @Override public void mouseReleased(final MouseEvent e) { - //Log.info("Mouse release:" + e.getX() + " " + e.getY()); - // Log.info("mouse value: GLFW_RELEASE" + action + " bt=" + button); + //LOGGER.info("Mouse release:" + e.getX() + " " + e.getY()); + // LOGGER.info("mouse value: GLFW_RELEASE" + action + " bt=" + button); final int button = e.getButton(); this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() - e.getY()); if (button < ContextLWJGLAWT.MAX_MANAGE_INPUT) { @@ -508,10 +524,10 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.up, button, this.cursorPos); } - + @Override public void mouseWheelMoved(final MouseWheelEvent e) { - //Log.info("wheel_event : " + e); + //LOGGER.info("wheel_event : " + e); this.cursorPos = new Vector2f(e.getX(), this.decoratedWindowsSize.y() - e.getY()); if (e.getWheelRotation() < 0) { this.inputIsPressed[5] = true; @@ -525,7 +541,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse operatingSystemSetInput(this.guiKeyBoardMode, KeyType.mouse, KeyStatus.up, 4, this.cursorPos); } } - + @Override public int run() { final Runnable renderLoop = new Runnable() { @@ -545,7 +561,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse } }; SwingUtilities.invokeLater(renderLoop); - + // while (canvas != null && canvas.isValid()) { // canvas.render(); // try { @@ -555,7 +571,7 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse // e.printStackTrace(); // } // } - + // Run the rendering loop until the user has attempted to close // the window or has pressed the ESCAPE key. // while ( !glfwWindowShouldClose(window) ) { @@ -597,11 +613,11 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse //System.exit(0); return 0; } - + public void setDrawer(final DisplayManagerDraw drawer) { this.drawer = drawer; } - + @Override public void setFullScreenThreadGUI(final boolean status) { super.setFullScreen(status); @@ -613,24 +629,24 @@ public class ContextLWJGLAWT extends GaleContext implements MouseListener, Mouse this.frame.setUndecorated(false); } } - + @Override public void setIconThreadGUI(final Uri inputFile) { - + } - + /****************************************************************************************/ @Override public void setTitleThreadGUI(final String title) { this.frame.setTitle(title); } - + private void showCursor() { this.frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } - + public void unInit() { - + } - + } diff --git a/src/org/atriasoft/gale/context/MessageSystem.java b/src/org/atriasoft/gale/context/MessageSystem.java index d6e0bc5..84baf66 100644 --- a/src/org/atriasoft/gale/context/MessageSystem.java +++ b/src/org/atriasoft/gale/context/MessageSystem.java @@ -4,40 +4,42 @@ import java.util.HashMap; import java.util.Map; import java.util.Vector; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class MessageSystem { + static final Logger LOGGER = LoggerFactory.getLogger(MessageSystem.class); private final Vector data = new Vector<>(); private final Map dataSingle = new HashMap<>(); - + public synchronized void addElement(final ActionToDoInAsyncLoop data2) { this.data.addElement(data2); notifyAll(); } - + public synchronized void addElement(final String uniqueID, final ActionToDoInAsyncLoop data2) { this.dataSingle.put(uniqueID, data2); notifyAll(); } - + protected synchronized ActionToDoInAsyncLoop getElementSingle() { - //Log.warning("+++++++++++++++++++++++++++++++++ getElement()"); + //LOGGER.warn("+++++++++++++++++++++++++++++++++ getElement()"); final Map.Entry entry = this.dataSingle.entrySet().iterator().next(); final String key = entry.getKey(); final ActionToDoInAsyncLoop message = entry.getValue(); this.dataSingle.remove(key); - //Log.warning("+++++++++++++++++++++++++++++++++ getElement() ===> done " + message); + //LOGGER.warn("+++++++++++++++++++++++++++++++++ getElement() ===> done " + message); return message; } - + protected synchronized ActionToDoInAsyncLoop getElementVector() { - //Log.warning("+++++++++++++++++++++++++++++++++ getElement()"); + //LOGGER.warn("+++++++++++++++++++++++++++++++++ getElement()"); final ActionToDoInAsyncLoop message = this.data.firstElement(); this.data.removeElement(message); - //Log.warning("+++++++++++++++++++++++++++++++++ getElement() ===> done " + message); + //LOGGER.warn("+++++++++++++++++++++++++++++++++ getElement() ===> done " + message); return message; } - + public synchronized ActionToDoInAsyncLoop getElementWait() { if (this.data.isEmpty() && this.dataSingle.isEmpty()) { try { @@ -56,11 +58,11 @@ public class MessageSystem { } return null; } - + public synchronized int getSize() { - Log.verbose("------------------------------------------------------------"); - Log.verbose("-- nb message: {} + {}", this.data.size(), this.dataSingle.size()); - Log.verbose("------------------------------------------------------------"); + LOGGER.trace("------------------------------------------------------------"); + LOGGER.trace("-- nb message: {} + {}", this.data.size(), this.dataSingle.size()); + LOGGER.trace("------------------------------------------------------------"); return this.data.size() + this.dataSingle.size(); } } \ No newline at end of file diff --git a/src/org/atriasoft/gale/context/PeriodicThread.java b/src/org/atriasoft/gale/context/PeriodicThread.java index deb951f..1660118 100644 --- a/src/org/atriasoft/gale/context/PeriodicThread.java +++ b/src/org/atriasoft/gale/context/PeriodicThread.java @@ -4,29 +4,31 @@ import java.time.Clock; import org.atriasoft.etk.ThreadAbstract; import org.atriasoft.gale.GaleApplication; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PeriodicThread extends ThreadAbstract { + static final Logger LOGGER = LoggerFactory.getLogger(PeriodicThread.class); private final GaleContext context; - + public PeriodicThread(final GaleContext context) { super("GaleAsync"); this.context = context; } - + @Override protected void birth() { // TODO Auto-generated method stub } - + @Override protected void death() { // TODO Auto-generated method stub } - + @Override protected void runPeriodic() { - Log.verbose("----------------------------- [START] -----------------------------------"); + LOGGER.trace("----------------------------- [START] -----------------------------------"); try { Thread.sleep(100); } catch (final InterruptedException e) { @@ -37,15 +39,15 @@ public class PeriodicThread extends ThreadAbstract { // Keep global clock to process events final Clock clock = Clock.systemUTC(); final long time = System.nanoTime(); - + ///synchronized (this.context) { this.context.processEventsAsync(clock, time); // call all the application for periodic request (the application manage multiple instance )... final GaleApplication appl = this.context.getApplication(); - //Log.verbose("Call application : " + appl); + //LOGGER.trace("Call application : " + appl); if (appl != null) { appl.onPeriod(clock, time); } - Log.verbose("----------------------------- [ END ] -----------------------------------"); + LOGGER.trace("----------------------------- [ END ] -----------------------------------"); } } diff --git a/src/org/atriasoft/gale/internal/Log.java b/src/org/atriasoft/gale/internal/Log.java deleted file mode 100644 index b61cdf6..0000000 --- a/src/org/atriasoft/gale/internal/Log.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.atriasoft.gale.internal; - -import org.atriasoft.reggol.LogLevel; -import org.atriasoft.reggol.Logger; - -public class Log { - private static final boolean FORCE_ALL = false; - private static final String LIB_NAME = "gale"; - private static final String LIB_NAME_DRAW = Logger.getDrawableName(LIB_NAME); - private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(LIB_NAME, LogLevel.CRITICAL); - private static final boolean PRINT_ERROR = Logger.getNeedPrint(LIB_NAME, LogLevel.ERROR); - private static final boolean PRINT_WARNING = Logger.getNeedPrint(LIB_NAME, LogLevel.WARNING); - private static final boolean PRINT_INFO = Logger.getNeedPrint(LIB_NAME, LogLevel.INFO); - private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LIB_NAME, LogLevel.DEBUG); - private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(LIB_NAME, LogLevel.VERBOSE); - private static final boolean PRINT_TODO = Logger.getNeedPrint(LIB_NAME, LogLevel.TODO); - private static final boolean PRINT_PRINT = Logger.getNeedPrint(LIB_NAME, LogLevel.PRINT); - - public static void critical(final Exception e, final String data) { - e.printStackTrace(); - if (PRINT_CRITICAL || FORCE_ALL) { - Logger.critical(LIB_NAME_DRAW, data + " : " + e.getMessage()); - } - } - - public static void critical(final String data, final Object... objects) { - if (PRINT_CRITICAL || FORCE_ALL) { - Logger.critical(LIB_NAME_DRAW, data, objects); - } - } - - public static void debug(final String data, final Object... objects) { - if (PRINT_DEBUG || FORCE_ALL) { - Logger.debug(LIB_NAME_DRAW, data, objects); - } - } - - public static void error(final String data, final Object... objects) { - if (PRINT_ERROR || FORCE_ALL) { - Logger.error(LIB_NAME_DRAW, data, objects); - } - } - - public static void info(final String data, final Object... objects) { - if (PRINT_INFO || FORCE_ALL) { - Logger.info(LIB_NAME_DRAW, data, objects); - } - } - - public static void print(final String data, final Object... objects) { - if (PRINT_PRINT || FORCE_ALL) { - Logger.print(LIB_NAME_DRAW, data, objects); - } - } - - public static void todo(final String data, final Object... objects) { - if (PRINT_TODO || FORCE_ALL) { - Logger.todo(LIB_NAME_DRAW, data, objects); - } - } - - public static void verbose(final String data, final Object... objects) { - if (PRINT_VERBOSE || FORCE_ALL) { - Logger.verbose(LIB_NAME_DRAW, data, objects); - } - } - - public static void warning(final String data, final Object... objects) { - if (PRINT_WARNING || FORCE_ALL) { - Logger.warning(LIB_NAME_DRAW, data, objects); - } - } - - private Log() {} - -} diff --git a/src/org/atriasoft/gale/resource/Resource.java b/src/org/atriasoft/gale/resource/Resource.java index 31b656d..2502893 100644 --- a/src/org/atriasoft/gale/resource/Resource.java +++ b/src/org/atriasoft/gale/resource/Resource.java @@ -2,25 +2,27 @@ package org.atriasoft.gale.resource; import org.atriasoft.etk.Uri; import org.atriasoft.gale.context.GaleContext; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public abstract class Resource { + static final Logger LOGGER = LoggerFactory.getLogger(Resource.class); protected static final String NO_NAME_RESOURCE = "---"; protected static final int MAXRESOURCELEVEL = 5; private static int idGenerated = 10; - + /** * Get the current resource Manager */ protected static ResourceManager getManager() { return GaleContext.getContext().getResourcesManager(); } - + protected long uid = -1; //!< unique ID definition protected int count = 1; protected int resourceLevel = MAXRESOURCELEVEL - 1; //!< Level of the resource ==> for update priority [0..5] 0 must be update first. protected String name = NO_NAME_RESOURCE; //!< name of the resource ... - + /** * generic protected contructor (use factory to create this class) */ @@ -28,7 +30,7 @@ public abstract class Resource { this.uid = idGenerated++; getManager().localAdd(this); } - + protected Resource(final String name) { if (name == null) { this.name = "---"; @@ -37,7 +39,7 @@ public abstract class Resource { } getManager().localAdd(this); } - + protected Resource(final Uri uri) { if (uri == null) { this.name = "---"; @@ -46,17 +48,17 @@ public abstract class Resource { } getManager().localAdd(this); } - + public abstract void cleanUp(); - + public int getCount() { return this.count; } - + public long getId() { return this.uid; } - + /** * get the resource name * @return The requested name @@ -64,7 +66,7 @@ public abstract class Resource { public String getName() { return this.name; } - + /** * Get the current resource level; * @return value in [0..5] @@ -72,40 +74,40 @@ public abstract class Resource { public int getResourceLevel() { return this.resourceLevel; } - + public void keep() { this.count++; } - + public void release() { this.count--; if (this.count == 0) { - + } } - + /** * User request the reload of all resources (usefull when the file depend on DATA:GUI:xxx ... */ public void reload() { - Log.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); + LOGGER.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); } - + /** * The current OpenGl context is removing ==> remove yout own system data */ public void removeContext() { - Log.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); + LOGGER.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); } - + /** * The notification of the Context removing is too late, we have no more acces on the OpenGl context (thank you Android). * Just update your internal state */ public void removeContextToLate() { - Log.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); + LOGGER.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); } - + /** * get the resource name * @param name The name to set. @@ -113,7 +115,7 @@ public abstract class Resource { public void setName(final String name) { this.name = name; } - + /** * Call when need to send data on the harware (openGL) * @note This is done asynchronously with the create of the Resource. @@ -121,7 +123,7 @@ public abstract class Resource { * @return false The context is not updated */ public boolean updateContext() { - Log.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); + LOGGER.debug("Not set for : [" + getId() + "]" + getName() + " loaded ??? time(s)"); return true; } } diff --git a/src/org/atriasoft/gale/resource/ResourceColored3DObject.java b/src/org/atriasoft/gale/resource/ResourceColored3DObject.java index 1dae37c..8b39170 100644 --- a/src/org/atriasoft/gale/resource/ResourceColored3DObject.java +++ b/src/org/atriasoft/gale/resource/ResourceColored3DObject.java @@ -9,27 +9,31 @@ import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Matrix4f; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.gale.backend3d.OpenGL; -import org.atriasoft.gale.internal.Log; import org.lwjgl.BufferUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceColored3DObject extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceColored3DObject.class); + public static ResourceColored3DObject create() { final ResourceColored3DObject resource = new ResourceColored3DObject(); getManager().localAdd(resource); return resource; } - + private final ResourceProgram program; private int oGLPosition; private int oGLColor; private int oGLMatrixTransformation; private int oGLMatrixProjection; private int oGLMatrixView; - + protected ResourceColored3DObject() { // get the shader resource : this.oGLPosition = 0; - this.program = ResourceProgram.create(new Uri("DATA", "simple3D.vert", "gale"), new Uri("DATA", "simple3D.frag", "gale")); + this.program = ResourceProgram.create(new Uri("DATA", "simple3D.vert", "gale"), + new Uri("DATA", "simple3D.frag", "gale")); if (this.program != null) { this.oGLMatrixTransformation = this.program.getUniform("in_matrixTransformation"); this.oGLMatrixProjection = this.program.getUniform("in_matrixProjection"); @@ -38,13 +42,13 @@ public class ResourceColored3DObject extends Resource { this.oGLColor = this.program.getUniform("in_colors"); } } - + @Override public void cleanUp() { // TODO Auto-generated method stub - + } - + private float[] convertInFloat(final List data) { final float[] out = new float[data.size() * 3]; for (int iii = 0; iii < data.size(); iii++) { @@ -54,13 +58,17 @@ public class ResourceColored3DObject extends Resource { } return out; } - - public void draw(final List vertices, final Color color, final boolean updateDepthBuffer, final boolean depthtest) { + + public void draw( + final List vertices, + final Color color, + final boolean updateDepthBuffer, + final boolean depthtest) { if (vertices.size() <= 0) { return; } if (this.program == null) { - Log.error("No shader ..."); + LOGGER.error("No shader ..."); return; } if (depthtest) { @@ -69,7 +77,7 @@ public class ResourceColored3DObject extends Resource { OpenGL.setDeathMask(false); } } - //Log.debug(" display " << this.coord.size() << " elements" ); + //LOGGER.debug(" display " << this.coord.size() << " elements" ); this.program.use(); final Matrix4f projectionMatrix = OpenGL.getMatrix(); final Matrix4f viewMatrix = OpenGL.getCameraMatrix(); @@ -101,13 +109,18 @@ public class ResourceColored3DObject extends Resource { OpenGL.disable(OpenGL.Flag.flag_depthTest); } } - - public void draw(final List vertices, final Color color, final Matrix4f transformationMatrix, final boolean updateDepthBuffer, final boolean depthtest) { + + public void draw( + final List vertices, + final Color color, + final Matrix4f transformationMatrix, + final boolean updateDepthBuffer, + final boolean depthtest) { if (vertices.size() <= 0) { return; } if (this.program == null) { - Log.error("No shader ..."); + LOGGER.error("No shader ..."); return; } if (depthtest) { @@ -116,7 +129,7 @@ public class ResourceColored3DObject extends Resource { OpenGL.setDeathMask(false); } } - //Log.debug(" display " << this.coord.size() << " elements" ); + //LOGGER.debug(" display " << this.coord.size() << " elements" ); this.program.use(); // set Matrix: translation/positionMatrix final Matrix4f projectionMatrix = OpenGL.getMatrix(); @@ -128,7 +141,7 @@ public class ResourceColored3DObject extends Resource { final FloatBuffer buffer = storeDataInFloatBuffer(convertInFloat(vertices)); this.program.sendAttribute(this.oGLPosition, 3, buffer, 3); // color : - //Log.info("color= " + color + " " + this.oGLPosition); + //LOGGER.info("color= " + color + " " + this.oGLPosition); this.program.uniformColor(this.oGLColor, color); if (color.a() < 1.0f) { OpenGL.enable(OpenGL.Flag.flag_blend); @@ -146,29 +159,35 @@ public class ResourceColored3DObject extends Resource { OpenGL.disable(OpenGL.Flag.flag_depthTest); } } - - public void drawCapsule(final float radius, final float size, int lats, final int longs, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawCapsule( + final float radius, + final float size, + int lats, + final int longs, + final Matrix4f transformationMatrix, + final Color tmpColor) { final List tmpVertices = new ArrayList<>(); lats = lats / 2 * 2; - + // center to border (TOP) float offset = size * 0.5f; for (int iii = lats / 2 + 1; iii <= lats; ++iii) { final float lat0 = (float) Math.PI * (-0.5f + (float) (iii - 1) / lats); final float z0 = radius * (float) Math.sin(lat0); final float zr0 = radius * (float) Math.cos(lat0); - + final float lat1 = (float) Math.PI * (-0.5f + (float) (iii) / lats); final float z1 = radius * (float) Math.sin(lat1); final float zr1 = radius * (float) Math.cos(lat1); - + for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; float x = (float) Math.cos(lng); float y = (float) Math.sin(lng); final Vector3f v1 = new Vector3f(x * zr1, y * zr1, z1 + offset); final Vector3f v4 = new Vector3f(x * zr0, y * zr0, z0 + offset); - + lng = 2 * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng); y = (float) Math.sin(lng); @@ -177,7 +196,7 @@ public class ResourceColored3DObject extends Resource { tmpVertices.add(v1); tmpVertices.add(v2); tmpVertices.add(v3); - + tmpVertices.add(v1); tmpVertices.add(v3); tmpVertices.add(v4); @@ -186,24 +205,24 @@ public class ResourceColored3DObject extends Resource { // Cylinder for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; - + final float z = size * 0.5f; - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, z); final Vector3f v2b = new Vector3f(x, y, -z); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; final Vector3f v3 = new Vector3f(x, y, z); final Vector3f v3b = new Vector3f(x, y, -z); - + tmpVertices.add(v2); tmpVertices.add(v3); tmpVertices.add(v3b); - + tmpVertices.add(v2); tmpVertices.add(v3b); tmpVertices.add(v2b); @@ -214,18 +233,18 @@ public class ResourceColored3DObject extends Resource { final float lat0 = (float) Math.PI * (-0.5f + (float) (iii - 1) / lats); final float z0 = radius * (float) Math.sin(lat0); final float zr0 = radius * (float) Math.cos(lat0); - + final float lat1 = (float) Math.PI * (-0.5f + (float) (iii) / lats); final float z1 = radius * (float) Math.sin(lat1); final float zr1 = radius * (float) Math.cos(lat1); - + for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; float x = (float) Math.cos(lng); float y = (float) Math.sin(lng); final Vector3f v1 = new Vector3f(x * zr1, y * zr1, z1 + offset); final Vector3f v4 = new Vector3f(x * zr0, y * zr0, z0 + offset); - + lng = 2 * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng); y = (float) Math.sin(lng); @@ -234,7 +253,7 @@ public class ResourceColored3DObject extends Resource { tmpVertices.add(v1); tmpVertices.add(v2); tmpVertices.add(v3); - + tmpVertices.add(v1); tmpVertices.add(v3); tmpVertices.add(v4); @@ -242,18 +261,24 @@ public class ResourceColored3DObject extends Resource { } draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - - public void drawCone(final float radius, final float size, final int lats, final int longs, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawCone( + final float radius, + final float size, + final int lats, + final int longs, + final Matrix4f transformationMatrix, + final Color tmpColor) { final List tmpVertices = new ArrayList<>(); // center to border (TOP) for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; final Vector3f v1 = new Vector3f(0.0f, 0.0f, -size / 2); - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, size / 2); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; @@ -265,13 +290,13 @@ public class ResourceColored3DObject extends Resource { // center to border (BUTTOM) for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; - + final Vector3f v1 = new Vector3f(0.0f, 0.0f, size / 2); - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, size / 2); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; @@ -282,67 +307,86 @@ public class ResourceColored3DObject extends Resource { } draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - - public void drawCubeLine(final Vector3f min, final Vector3f max, final Color color, final Matrix4f transformationMatrix, final boolean updateDepthBuffer, final boolean depthtest) { + + public void drawCubeLine( + final Vector3f min, + final Vector3f max, + final Color color, + final Matrix4f transformationMatrix, + final boolean updateDepthBuffer, + final boolean depthtest) { final List vertices = new ArrayList<>(); vertices.add(new Vector3f(min.x(), min.y(), min.z())); vertices.add(new Vector3f(max.x(), min.y(), min.z())); - + vertices.add(new Vector3f(max.x(), min.y(), min.z())); vertices.add(new Vector3f(max.x(), min.y(), max.z())); - + vertices.add(new Vector3f(max.x(), min.y(), max.z())); vertices.add(new Vector3f(min.x(), min.y(), max.z())); - + vertices.add(new Vector3f(min.x(), min.y(), max.z())); vertices.add(new Vector3f(min.x(), min.y(), min.z())); - + vertices.add(new Vector3f(min.x(), max.y(), min.z())); vertices.add(new Vector3f(max.x(), max.y(), min.z())); - + vertices.add(new Vector3f(max.x(), max.y(), min.z())); vertices.add(new Vector3f(max.x(), max.y(), max.z())); - + vertices.add(new Vector3f(max.x(), max.y(), max.z())); vertices.add(new Vector3f(min.x(), max.y(), max.z())); - + vertices.add(new Vector3f(min.x(), max.y(), max.z())); vertices.add(new Vector3f(min.x(), max.y(), min.z())); - + vertices.add(new Vector3f(min.x(), min.y(), min.z())); vertices.add(new Vector3f(min.x(), max.y(), min.z())); - + vertices.add(new Vector3f(max.x(), min.y(), min.z())); vertices.add(new Vector3f(max.x(), max.y(), min.z())); - + vertices.add(new Vector3f(max.x(), min.y(), max.z())); vertices.add(new Vector3f(max.x(), max.y(), max.z())); - + vertices.add(new Vector3f(min.x(), min.y(), max.z())); vertices.add(new Vector3f(min.x(), max.y(), max.z())); drawLine(vertices, color, transformationMatrix, updateDepthBuffer, depthtest); } - - public void drawCylinder(final float radius, final float size, final int lats, final int longs, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawCylinder( + final float radius, + final float size, + final int lats, + final int longs, + final Matrix4f transformationMatrix, + final Color tmpColor) { drawCylinder(radius, size, lats, longs, transformationMatrix, tmpColor, true, true); } - - public void drawCylinder(final float radius, final float size, final int lats, final int longs, final Matrix4f transformationMatrix, final Color tmpColor, final boolean updateDepthBuffer, + + public void drawCylinder( + final float radius, + final float size, + final int lats, + final int longs, + final Matrix4f transformationMatrix, + final Color tmpColor, + final boolean updateDepthBuffer, final boolean depthtest) { final List tmpVertices = new ArrayList<>(); // center to border (TOP) - + // center to border (TOP) for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; - + final float z = size * 0.5f; final Vector3f v1 = new Vector3f(0.0f, 0.0f, z); - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, z); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; @@ -354,24 +398,24 @@ public class ResourceColored3DObject extends Resource { // Cylinder for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; - + final float z = size * 0.5f; - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, z); final Vector3f v2b = new Vector3f(x, y, -z); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; final Vector3f v3 = new Vector3f(x, y, z); final Vector3f v3b = new Vector3f(x, y, -z); - + tmpVertices.add(v2); tmpVertices.add(v3); tmpVertices.add(v3b); - + tmpVertices.add(v2); tmpVertices.add(v3b); tmpVertices.add(v2b); @@ -379,14 +423,14 @@ public class ResourceColored3DObject extends Resource { // center to border (BUTTOM) for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; - + final float z = size * -0.5f; final Vector3f v1 = new Vector3f(0.0f, 0.0f, z); - + float x = (float) Math.cos(lng) * radius; float y = (float) Math.sin(lng) * radius; final Vector3f v2 = new Vector3f(x, y, z); - + lng = 2.0f * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng) * radius; y = (float) Math.sin(lng) * radius; @@ -397,13 +441,18 @@ public class ResourceColored3DObject extends Resource { } draw(tmpVertices, tmpColor, transformationMatrix, updateDepthBuffer, depthtest); } - - public void drawLine(final List vertices, final Color color, final Matrix4f transformationMatrix, final boolean updateDepthBuffer, final boolean depthtest) { + + public void drawLine( + final List vertices, + final Color color, + final Matrix4f transformationMatrix, + final boolean updateDepthBuffer, + final boolean depthtest) { if (vertices.size() <= 0) { return; } if (this.program == null) { - Log.error("No shader ..."); + LOGGER.error("No shader ..."); return; } if (depthtest) { @@ -412,7 +461,7 @@ public class ResourceColored3DObject extends Resource { OpenGL.setDeathMask(false); } } - //Log.debug(" display " << this.coord.size() << " elements" ); + //LOGGER.debug(" display " << this.coord.size() << " elements" ); this.program.use(); // set Matrix: translation/positionMatrix final Matrix4f projectionMatrix = OpenGL.getMatrix(); @@ -441,35 +490,40 @@ public class ResourceColored3DObject extends Resource { OpenGL.disable(OpenGL.Flag.flag_depthTest); } } - - public void drawSphere(final float radius, final int lats, final int longs, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawSphere( + final float radius, + final int lats, + final int longs, + final Matrix4f transformationMatrix, + final Color tmpColor) { final List tmpVertices = new ArrayList<>(); for (int iii = 0; iii <= lats; ++iii) { final float lat0 = (float) Math.PI * (-0.5f + (float) (iii - 1) / lats); final float z0 = radius * (float) Math.sin(lat0); final float zr0 = radius * (float) Math.cos(lat0); - + final float lat1 = (float) Math.PI * (-0.5f + (float) (iii) / lats); final float z1 = radius * (float) Math.sin(lat1); final float zr1 = radius * (float) Math.cos(lat1); - + for (int jjj = 0; jjj < longs; ++jjj) { float lng = 2.0f * (float) Math.PI * (jjj - 1) / longs; float x = (float) Math.cos(lng); float y = (float) Math.sin(lng); final Vector3f v1 = new Vector3f(x * zr1, y * zr1, z1); final Vector3f v4 = new Vector3f(x * zr0, y * zr0, z0); - + lng = 2 * (float) Math.PI * (jjj) / longs; x = (float) Math.cos(lng); y = (float) Math.sin(lng); final Vector3f v2 = new Vector3f(x * zr1, y * zr1, z1); final Vector3f v3 = new Vector3f(x * zr0, y * zr0, z0); - + tmpVertices.add(v1); tmpVertices.add(v2); tmpVertices.add(v3); - + tmpVertices.add(v1); tmpVertices.add(v3); tmpVertices.add(v4); @@ -477,12 +531,15 @@ public class ResourceColored3DObject extends Resource { } draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - + public void drawSquare(final Vector3f size, final Matrix4f transformationMatrix, final Color tmpColor) { final List tmpVertices = new ArrayList<>(); - final int[] indices = { 0, 1, 2, 3, 2, 1, 4, 0, 6, 6, 0, 2, 5, 1, 4, 4, 1, 0, 7, 3, 1, 7, 1, 5, 5, 4, 7, 7, 4, 6, 7, 2, 3, 7, 6, 2 }; - final Vector3f[] vertices = { new Vector3f(size.x(), size.y(), size.z()), new Vector3f(-size.x(), size.y(), size.z()), new Vector3f(size.x(), -size.y(), size.z()), - new Vector3f(-size.x(), -size.y(), size.z()), new Vector3f(size.x(), size.y(), -size.z()), new Vector3f(-size.x(), size.y(), -size.z()), new Vector3f(size.x(), -size.y(), -size.z()), + final int[] indices = { 0, 1, 2, 3, 2, 1, 4, 0, 6, 6, 0, 2, 5, 1, 4, 4, 1, 0, 7, 3, 1, 7, 1, 5, 5, 4, 7, 7, 4, + 6, 7, 2, 3, 7, 6, 2 }; + final Vector3f[] vertices = { new Vector3f(size.x(), size.y(), size.z()), + new Vector3f(-size.x(), size.y(), size.z()), new Vector3f(size.x(), -size.y(), size.z()), + new Vector3f(-size.x(), -size.y(), size.z()), new Vector3f(size.x(), size.y(), -size.z()), + new Vector3f(-size.x(), size.y(), -size.z()), new Vector3f(size.x(), -size.y(), -size.z()), new Vector3f(-size.x(), -size.y(), -size.z()) }; tmpVertices.clear(); for (int iii = 0; iii < 36; iii += 3) { @@ -495,33 +552,47 @@ public class ResourceColored3DObject extends Resource { } draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - - public void drawTriangle(final Vector3f p1, final Vector3f p2, final Vector3f p3, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawTriangle( + final Vector3f p1, + final Vector3f p2, + final Vector3f p3, + final Matrix4f transformationMatrix, + final Color tmpColor) { final List tmpVertices = new ArrayList<>(); tmpVertices.add(p1); tmpVertices.add(p2); tmpVertices.add(p3); - //Log.info("display " << tmpVertices.size() << " vertices form " << indice.size()); + //LOGGER.info("display " << tmpVertices.size() << " vertices form " << indice.size()); draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - - public void drawTriangles(final List vertex, final List indice, final Matrix4f transformationMatrix, final Color tmpColor) { + + public void drawTriangles( + final List vertex, + final List indice, + final Matrix4f transformationMatrix, + final Color tmpColor) { drawTriangles(vertex, indice, transformationMatrix, tmpColor, new Vector3f(0.0f, 0.0f, 0.1f)); } - - public void drawTriangles(final List vertex, final List indice, final Matrix4f transformationMatrix, final Color tmpColor, final Vector3f offset) { + + public void drawTriangles( + final List vertex, + final List indice, + final Matrix4f transformationMatrix, + final Color tmpColor, + final Vector3f offset) { final List tmpVertices = new ArrayList<>(); for (int iii = 0; iii < indice.size() / 3; ++iii) { tmpVertices.add(vertex.get(indice.get(iii * 3 + 0)).add(offset)); tmpVertices.add(vertex.get(indice.get(iii * 3 + 1)).add(offset)); tmpVertices.add(vertex.get(indice.get(iii * 3 + 2)).add(offset)); - //Log.info(" indices " << indice[iii*3 + 0] << " " << indice[iii*3 + 1] << " " << indice[iii*3 + 2]); - //Log.info(" triangle " << vertex[indice[iii*3 + 0]] << " " << vertex[indice[iii*3 + 1]] << " " << vertex[indice[iii*3 + 2]]); + //LOGGER.info(" indices " << indice[iii*3 + 0] << " " << indice[iii*3 + 1] << " " << indice[iii*3 + 2]); + //LOGGER.info(" triangle " << vertex[indice[iii*3 + 0]] << " " << vertex[indice[iii*3 + 1]] << " " << vertex[indice[iii*3 + 2]]); } - //Log.info("display " << tmpVertices.size() << " vertices form " << indice.size()); + //LOGGER.info("display " << tmpVertices.size() << " vertices form " << indice.size()); draw(tmpVertices, tmpColor, transformationMatrix, true, true); } - + private FloatBuffer storeDataInFloatBuffer(final float[] data) { final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length); buffer.put(data); diff --git a/src/org/atriasoft/gale/resource/ResourceManager.java b/src/org/atriasoft/gale/resource/ResourceManager.java index 97cf853..1351aa3 100644 --- a/src/org/atriasoft/gale/resource/ResourceManager.java +++ b/src/org/atriasoft/gale/resource/ResourceManager.java @@ -4,22 +4,24 @@ import java.util.ArrayList; import java.util.List; import org.atriasoft.etk.Uri; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceManager { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceManager.class); private static final int MAX_RESOURCE_LEVEL = 9; private final List resourceList = new ArrayList<>(); private List resourceListToUpdate = new ArrayList<>(); private boolean contextHasBeenRemoved = true; private boolean exiting = false; - + /** * initialize the internal variable */ public ResourceManager() { - + } - + /** * special end of application */ @@ -27,9 +29,9 @@ public class ResourceManager { contextHasBeenDestroyed(); this.exiting = true; } - + public synchronized void cleanInternalRemoved() { - //Log.info("remove object in Manager"); + //LOGGER.info("remove object in Manager"); updateContext(); // TODO ... // for (auto it(this.resourceList.begin()); it!=this.resourceList.end(); ++it) { @@ -39,7 +41,7 @@ public class ResourceManager { // } // } } - + /** * This is to inform the resources manager that we have no more openGl context ... */ @@ -54,33 +56,34 @@ public class ResourceManager { // no context preent ... this.contextHasBeenRemoved = true; } - + /** * display in the log all the resources loaded ... */ public synchronized void display() { - Log.info("Resources loaded : "); + LOGGER.info("Resources loaded : "); // remove all resources ... - + synchronized (this.resourceList) { for (final Resource it : this.resourceList) { - Log.info(" [" + it.getId() + "]" + it.getClass().getCanonicalName() + "='" + it.getName() + "' " + it.getCount() + " elements"); + LOGGER.info(" [" + it.getId() + "]" + it.getClass().getCanonicalName() + "='" + it.getName() + "' " + + it.getCount() + " elements"); } } - Log.info("Resources ---"); + LOGGER.info("Resources ---"); } - + public synchronized void localAdd(final Resource object) { // add at the end if no slot is free synchronized (this.resourceList) { this.resourceList.add(object); } } - + // internal API to extent eResources in extern Soft public synchronized Resource localKeep(final String filename) { synchronized (this.resourceList) { - Log.verbose("KEEP (DEFAULT) : file : '" + filename + "' in " + this.resourceList.size() + " resources"); + LOGGER.trace("KEEP (DEFAULT) : file : '" + filename + "' in " + this.resourceList.size() + " resources"); for (final Resource it : this.resourceList) { if (it == null) { continue; @@ -88,7 +91,7 @@ public class ResourceManager { if (it.getName() == null) { continue; } - //Log.verbose("compare : " + filename + " ==???== " + it.getName()); + //LOGGER.trace("compare : " + filename + " ==???== " + it.getName()); if (it.getName().contentEquals(Resource.NO_NAME_RESOURCE)) { continue; } @@ -99,27 +102,27 @@ public class ResourceManager { } return null; } - + public synchronized Resource localKeep(final Uri uri) { // TODO Auto-generated method stub return localKeep(uri.toString()); } - + /** * Reload all resources from files, and send there in openGL card if needed. * @note If file is reference at THEMEXXX:///filename if the Theme change the file will reload the newOne */ public synchronized void reLoadResources() { - Log.info("------------- Resources re-loaded -------------"); + LOGGER.info("------------- Resources re-loaded -------------"); // remove all resources ... for (long jjj = 0; jjj < ResourceManager.MAX_RESOURCE_LEVEL; jjj++) { - Log.info(" Reload level : " + jjj + "/" + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); + LOGGER.info(" Reload level : " + jjj + "/" + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); synchronized (this.resourceList) { for (final Resource it : this.resourceList) { if (jjj == it.getResourceLevel()) { if (it.getCount() > 0) { it.reload(); - Log.info(" [" + it.getId() + "]=" + it.getClass().getCanonicalName()); + LOGGER.info(" [" + it.getId() + "]=" + it.getClass().getCanonicalName()); } } } @@ -127,9 +130,9 @@ public class ResourceManager { } // TODO UNderstand why it is set here ... //gale::requestUpdateSize(); - Log.info("------------- Resources -------------"); + LOGGER.info("------------- Resources -------------"); } - + /** * Uninitiamize the resource manager, free all resources previously requested * @note when not free == > generate warning, because the segfault can appear after... @@ -144,12 +147,13 @@ public class ResourceManager { // remove all resources ... synchronized (this.resourceList) { for (final Resource it : this.resourceList) { - Log.warning("Find a resource that is not removed : [" + it.getId() + "]" + "='" + it.getName() + "' " + it.getCount() + " elements"); + LOGGER.warn("Find a resource that is not removed : [" + it.getId() + "]" + "='" + it.getName() + "' " + + it.getCount() + " elements"); } this.resourceList.clear(); } } - + /** * Call by the system to send all the needed data on the graphic card chen they change ... * @param object The resources that might be updated @@ -167,16 +171,16 @@ public class ResourceManager { this.resourceListToUpdate.add(object); } } - + /** * Call by the system chen the openGL Context has been unexpectially removed == > This reload all the texture, VBO and other .... */ public void updateContext() { if (this.exiting) { - Log.error("Request update after application EXIT ..."); + LOGGER.error("Request update after application EXIT ..."); return; } - // TODO Check the number of call this ... Log.info("update open-gl context ... "); + // TODO Check the number of call this ... LOGGER.info("update open-gl context ... "); if (this.contextHasBeenRemoved) { // need to update all ... this.contextHasBeenRemoved = false; @@ -186,10 +190,11 @@ public class ResourceManager { synchronized (this.resourceList) { if (this.resourceList.size() != 0) { for (long jjj = 0; jjj < ResourceManager.MAX_RESOURCE_LEVEL; jjj++) { - Log.verbose(" updateContext level (D) : " + jjj + "/" + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); + LOGGER.trace(" updateContext level (D) : " + jjj + "/" + + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); for (final Resource it : this.resourceList) { if (jjj == it.getResourceLevel()) { - //Log.debug("Update context named : " + lresourceList[iii].getName()); + //LOGGER.debug("Update context named : " + lresourceList[iii].getName()); if (!it.updateContext()) { // Lock error ==> postponned synchronized (this.resourceListToUpdate) { @@ -209,7 +214,8 @@ public class ResourceManager { } if (resourceListToUpdate.size() != 0) { for (long jjj = 0; jjj < ResourceManager.MAX_RESOURCE_LEVEL; jjj++) { - Log.verbose(" updateContext level (U) : " + jjj + "/" + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); + LOGGER.trace( + " updateContext level (U) : " + jjj + "/" + (ResourceManager.MAX_RESOURCE_LEVEL - 1)); for (final Resource it : resourceListToUpdate) { if (jjj == it.getResourceLevel()) { if (!it.updateContext()) { @@ -222,5 +228,5 @@ public class ResourceManager { } } } - + } diff --git a/src/org/atriasoft/gale/resource/ResourceProgram.java b/src/org/atriasoft/gale/resource/ResourceProgram.java index 3c9930f..3d26d88 100644 --- a/src/org/atriasoft/gale/resource/ResourceProgram.java +++ b/src/org/atriasoft/gale/resource/ResourceProgram.java @@ -13,12 +13,12 @@ import org.atriasoft.etk.math.Vector3f; import org.atriasoft.etk.math.Vector3i; import org.atriasoft.etk.math.Vector4f; import org.atriasoft.gale.backend3d.OpenGL; -import org.atriasoft.gale.internal.Log; - import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; class ProgAttributeElement { public String name; // !< Name of the element @@ -28,18 +28,20 @@ class ProgAttributeElement { } public class ResourceProgram extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceProgram.class); static final boolean DEBUG = false; // TODO externalize this ... public static ResourceProgram create(final Uri uriVertexShader, final Uri uriFragmentShader) { ResourceProgram resource; final String name = uriVertexShader.getValue() + "<-->" + uriFragmentShader.getValue(); - Resource resource2 = Resource.getManager().localKeep(name); + final Resource resource2 = Resource.getManager().localKeep(name); if (resource2 != null) { if (resource2 instanceof ResourceProgram) { resource2.keep(); return (ResourceProgram) resource2; } - Log.critical("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } resource = new ResourceProgram(uriVertexShader, uriFragmentShader); @@ -99,19 +101,19 @@ public class ResourceProgram extends Resource { protected ResourceProgram(final Uri uriVertexShader, final Uri uriFragmentShader) { super(uriVertexShader.getValue() + "<-->" + uriFragmentShader.getValue()); this.resourceLevel = 1; - Log.debug("OGL : load PROGRAM '" + uriVertexShader + "' && '" + uriFragmentShader + "'"); + LOGGER.debug("OGL : load PROGRAM '" + uriVertexShader + "' && '" + uriFragmentShader + "'"); this.shaderVertex = ResourceShader.create(uriVertexShader); if (this.shaderVertex == null) { - Log.error("Error while getting a specific shader filename: " + uriVertexShader); + LOGGER.error("Error while getting a specific shader filename: " + uriVertexShader); return; } - Log.debug("Add shader on program: '" + uriFragmentShader + "'"); + LOGGER.debug("Add shader on program: '" + uriFragmentShader + "'"); this.shaderFragment = ResourceShader.create(uriFragmentShader); if (this.shaderFragment == null) { - Log.error("Error while getting a specific shader filename: " + uriFragmentShader); + LOGGER.error("Error while getting a specific shader filename: " + uriFragmentShader); return; } - Log.debug("Add shader on program : " + uriFragmentShader + "frag"); + LOGGER.debug("Add shader on program : " + uriFragmentShader + "frag"); if (OpenGL.hasContext()) { updateContext(); } else { @@ -131,14 +133,15 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { return; } - Log.error("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(vboId) + " VBOindex=" + vboId); + LOGGER.error("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(vboId) + + " VBOindex=" + vboId); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo.getOpenGlId(vboId)); GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId); this.listOfVBOUsed.add(this.elementList.get(idElem).elementId); @@ -223,10 +226,12 @@ public class ResourceProgram extends Resource { tmp.elementId = OpenGL.programGetAttributeLocation(this.program, tmp.name); tmp.isLinked = true; if (tmp.elementId < 0) { - Log.warning(" {" + this.program + "}[" + this.elementList.size() + "] glGetAttribLocation(\"" + tmp.name + "\") = " + tmp.elementId); + LOGGER.warn(" {" + this.program + "}[" + this.elementList.size() + "] glGetAttribLocation(\"" + + tmp.name + "\") = " + tmp.elementId); tmp.isLinked = false; } else { - Log.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetAttribLocation(\"" + tmp.name + "\") = " + tmp.elementId); + LOGGER.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetAttribLocation(\"" + + tmp.name + "\") = " + tmp.elementId); } } else { // program is not loaded ==> just local reister ... @@ -269,10 +274,12 @@ public class ResourceProgram extends Resource { tmp.elementId = OpenGL.programGetUniformLocation(this.program, tmp.name); tmp.isLinked = true; if (tmp.elementId < 0) { - Log.warning(" {" + this.program + "}[" + this.elementList.size() + "] glGetUniformLocation(\"" + tmp.name + "\") = " + tmp.elementId); + LOGGER.warn(" {" + this.program + "}[" + this.elementList.size() + "] glGetUniformLocation(\"" + + tmp.name + "\") = " + tmp.elementId); tmp.isLinked = false; } else { - Log.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetUniformLocation(\"" + tmp.name + "\") = " + tmp.elementId); + LOGGER.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetUniformLocation(\"" + + tmp.name + "\") = " + tmp.elementId); } } else { // program is not loaded ==> just local reister ... @@ -293,14 +300,14 @@ public class ResourceProgram extends Resource { public void reload() { /* * TODO ... etk::file file(this.name, etk::FILETYPEDATA); if (file.Exist() == - * false) { Log.error("File does not Exist :"" + file + "\""); return; } - * + * false) { LOGGER.error("File does not Exist :"" + file + "\""); return; } + * * int fileSize = file.size(); if (fileSize == 0) { - * Log.error("This file is empty : " + file); return; } if (file.fOpenRead() == - * false) { Log.error("Can not open the file : " + file); return; } // remove + * LOGGER.error("This file is empty : " + file); return; } if (file.fOpenRead() == + * false) { LOGGER.error("Can not open the file : " + file); return; } // remove * previous data ... if (this.fileData != null) { del ete[] this.fileData; * this.fileData = 0; } // allocate data this.fileData = ne w char[fileSize+5]; - * if (this.fileData == null) { Log.error("Error Memory allocation size=" + + * if (this.fileData == null) { LOGGER.error("Error Memory allocation size=" + * fileSize); return; } memset(this.fileData, 0, (fileSize+5)*sizeof(char)); // * load data from the file : file.fRead(this.fileData, 1, fileSize); // close * the file: file.fClose(); @@ -353,7 +360,7 @@ public class ResourceProgram extends Resource { // } // if ( idElem < 0 // || (long)idElem > this.elementList.size()) { - // Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size()-1) + // LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size()-1) // + "]"); // return; // } @@ -362,7 +369,7 @@ public class ResourceProgram extends Resource { // } // FloatBuffer buffer = storeDataInFloatBuffer(data); // //GL40.glBindVertexArray(this.elementList.get(idElem).elementId); - // Log.error("[" + this.elementList.get(idElem).name + "] send " + data.length + + // LOGGER.error("[" + this.elementList.get(idElem).name + "] send " + data.length + // " element"); // GL40.glVertexAttribPointer( // this.elementList.get(idElem).elementId, @@ -381,21 +388,26 @@ public class ResourceProgram extends Resource { // public void sendAttribute(int idElem, List data) { // sendAttribute3fv(idElem, convertInFloat(data)); // } - public void sendAttribute(final int idElem, final int nbElement, final FloatBuffer data, final int jumpBetweenSample) { + public void sendAttribute( + final int idElem, + final int nbElement, + final FloatBuffer data, + final int jumpBetweenSample) { if (!this.exist) { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { return; } // GL40.glBindVertexArray(this.elementList.get(idElem).elementId); - // Log.error("[" + this.elementList.get(idElem).name + "] send " + 3 + " + // LOGGER.error("[" + this.elementList.get(idElem).name + "] send " + 3 + " // element"); - GL20.glVertexAttribPointer(this.elementList.get(idElem).elementId, nbElement, GL11.GL_FLOAT, false, jumpBetweenSample * 4, /* 4 is the size of float in the generic system... */ + GL20.glVertexAttribPointer(this.elementList.get(idElem).elementId, nbElement, GL11.GL_FLOAT, false, + jumpBetweenSample * 4, /* 4 is the size of float in the generic system... */ data); // checkGlError("glVertexAttribPointer", LINE, idElem); GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId); @@ -420,7 +432,7 @@ public class ResourceProgram extends Resource { // } // if ( idElem < 0 // || (long)idElem > this.elementList.size()) { - // Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size()-1) + // LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size()-1) // + "]"); // return; // } @@ -429,17 +441,17 @@ public class ResourceProgram extends Resource { // } // // check error of the VBO goog enought ... // if (vbo.getElementSize(index) <= 0) { - // Log.error("Can not bind a VBO Buffer with an element size of : " + + // LOGGER.error("Can not bind a VBO Buffer with an element size of : " + // vbo.getElementSize(index) + " named=" + vbo.getName()); // return; // } // - // Log.verbose("[" + this.elementList.get(idElem).name + "] send " + + // LOGGER.trace("[" + this.elementList.get(idElem).name + "] send " + // vbo.getElementSize(index) + " element on oglID=" + vbo.getGLID(index) + " // VBOindex=" + index); // OpenGL.bindBuffer(vbo.getGLID(index)); - // Log.verbose(" id=" + this.elementList.get(idElem).elementId); - // Log.verbose(" eleme size=" + vbo.getElementSize(index)); + // LOGGER.trace(" id=" + this.elementList.get(idElem).elementId); + // LOGGER.trace(" eleme size=" + vbo.getElementSize(index)); // OpenGL.bufferData(data, Usage.staticDraw); // OpenGL.vertexAttribPointerFloat(this.elementList.get(idElem).elementId, // vbo.getElementSize(index)); // Pointer on the buffer @@ -454,19 +466,20 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { return; } - Log.verbose("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(index) + " VBOindex=" + index); + LOGGER.trace("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(index) + + " VBOindex=" + index); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo.getOpenGlId(index)); // checkGlError("glBindBuffer", __LINE__, _idElem); - Log.verbose(" id=" + this.elementList.get(idElem).elementId); - Log.verbose(" jump sample=" + jumpBetweenSample); - Log.verbose(" offset=" + offset); + LOGGER.trace(" id=" + this.elementList.get(idElem).elementId); + LOGGER.trace(" jump sample=" + jumpBetweenSample); + LOGGER.trace(" offset=" + offset); GL20.glVertexAttribPointer(this.elementList.get(idElem).elementId, // attribute ID of openGL vbo.getElementSize(index), // number of elements per vertex, here (r,g,b,a) GL11.GL_FLOAT, // the type of each element @@ -525,7 +538,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -539,7 +552,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -547,6 +560,7 @@ public class ResourceProgram extends Resource { } OpenGL.programLoadUniformColorRGB(this.elementList.get(idElem).elementId, value); } + /** * Send 1 float uniform element to the spefified ID (not send if does not * really exist in the openGL program) @@ -558,7 +572,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -580,7 +594,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -603,7 +617,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -621,13 +635,18 @@ public class ResourceProgram extends Resource { * @param value3 Value to send at the Uniform * @param value4 Value to send at the Uniform */ - public void uniformFloat(final int idElem, final float value1, final float value2, final float value3, final float value4) { + public void uniformFloat( + final int idElem, + final float value1, + final float value2, + final float value3, + final float value4) { if (!this.exist) { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -648,7 +667,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -670,7 +689,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -693,7 +712,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -717,7 +736,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -744,13 +763,13 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { return; } - // Log.error("[" + this.elementList.get(idElem).name + "] send 1 matrix"); + // LOGGER.error("[" + this.elementList.get(idElem).name + "] send 1 matrix"); // note : Android des not supported the transposition of the matrix, then we // will done it oursef: /* @@ -762,13 +781,12 @@ public class ResourceProgram extends Resource { OpenGL.programLoadUniformMatrix(this.elementList.get(idElem).elementId, matrix, transpose); } - public void uniformVector(final int idElem, final Vector2f value) { if (!this.exist) { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -782,7 +800,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -796,7 +814,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -810,7 +828,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -824,7 +842,7 @@ public class ResourceProgram extends Resource { return; } if (idElem < 0 || (long) idElem > this.elementList.size()) { - Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); + LOGGER.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]"); return; } if (!this.elementList.get(idElem).isLinked) { @@ -837,7 +855,7 @@ public class ResourceProgram extends Resource { * Stop the processing of this program */ public void unUse() { - // Log.verbose("Will UN-use program : " + this.program); + // LOGGER.trace("Will UN-use program : " + this.program); if (!this.exist) { return; @@ -860,7 +878,7 @@ public class ResourceProgram extends Resource { // Do nothing == > too dangerous ... } else { // create the Shader - Log.debug("Create the Program ...'" + this.name + "'"); + LOGGER.debug("Create the Program ...'" + this.name + "'"); this.program = OpenGL.programCreate(); if (this.program < 0) { return true; @@ -874,12 +892,13 @@ public class ResourceProgram extends Resource { } OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_POSITIONS, "in_position"); - OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, "in_extureCoords"); + OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, + "in_extureCoords"); OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_NORMALS, "in_normal"); OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_COLORS, "in_colors"); if (!OpenGL.programCompile(this.program)) { - Log.error("Could not compile'PROGRAM':'" + this.name + "'"); + LOGGER.error("Could not compile'PROGRAM':'" + this.name + "'"); OpenGL.programRemove(this.program); return true; } @@ -890,19 +909,23 @@ public class ResourceProgram extends Resource { it.elementId = OpenGL.programGetAttributeLocation(this.program, it.name); it.isLinked = true; if (it.elementId < 0) { - Log.warning(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name + "\") = " + it.elementId); + LOGGER.warn(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name + + "\") = " + it.elementId); it.isLinked = false; } else { - Log.debug(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name + "\") = " + it.elementId); + LOGGER.debug(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name + + "\") = " + it.elementId); } } else { it.elementId = OpenGL.programGetUniformLocation(this.program, it.name); it.isLinked = true; if (it.elementId < 0) { - Log.warning(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + "\") = " + it.elementId); + LOGGER.warn(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + + "\") = " + it.elementId); it.isLinked = false; } else { - Log.debug(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + "\") = " + it.elementId); + LOGGER.debug(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + + "\") = " + it.elementId); } } iii++; @@ -917,7 +940,7 @@ public class ResourceProgram extends Resource { * Request the processing of this program */ public void use() { - // Log.verbose("Will use program : " + this.program); + // LOGGER.trace("Will use program : " + this.program); // event if it was 0 == > set it to prevent other use of the previous shader // display ... OpenGL.programUse(this.program); diff --git a/src/org/atriasoft/gale/resource/ResourceShader.java b/src/org/atriasoft/gale/resource/ResourceShader.java index 3d9dae9..aad4658 100644 --- a/src/org/atriasoft/gale/resource/ResourceShader.java +++ b/src/org/atriasoft/gale/resource/ResourceShader.java @@ -3,9 +3,11 @@ package org.atriasoft.gale.resource; import org.atriasoft.etk.Uri; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.ShaderType; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceShader extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceShader.class); public static ResourceShader create(final Uri uriShader) { ResourceShader resource; @@ -14,7 +16,7 @@ public class ResourceShader extends Resource { if (!name.isEmpty() && !name.equals("---")) { resource2 = getManager().localKeep(name); } else { - Log.error("Can not create a shader without a filaname"); + LOGGER.error("Can not create a shader without a filaname"); return null; } if (resource2 != null) { @@ -22,7 +24,8 @@ public class ResourceShader extends Resource { resource2.keep(); return (ResourceShader) resource2; } - Log.critical("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } resource = new ResourceShader(uriShader); @@ -43,7 +46,7 @@ public class ResourceShader extends Resource { super(uri); this.uri = uri; this.resourceLevel = 0; - Log.debug("OGL : load SHADER '" + uri + "'"); + LOGGER.debug("OGL : load SHADER '" + uri + "'"); // load data from file "all the time ..." if (uri.get().endsWith(".frag")) { @@ -51,7 +54,9 @@ public class ResourceShader extends Resource { } else if (uri.get().endsWith(".vert")) { this.type = ShaderType.VERTEX; } else { - Log.error("File does not have extention '.vert' for Vertex Shader or '.frag' for Fragment Shader. but : \"" + uri + "\""); + LOGGER.error( + "File does not have extention '.vert' for Vertex Shader or '.frag' for Fragment Shader. but : \"" + + uri + "\""); this.type = ShaderType.VERTEX; return; } @@ -90,15 +95,16 @@ public class ResourceShader extends Resource { @Override public void reload() { //!< A copy of the data loaded from the file (useful only when opengl context is removed) - String fileData = ""; - Log.verbose("load shader:\n-----------------------------------------------------------------\n" + fileData + "\n-----------------------------------------------------------------"); + final String fileData = ""; + LOGGER.trace("load shader:\n-----------------------------------------------------------------\n" + fileData + + "\n-----------------------------------------------------------------"); // now change the OGL context ... if (OpenGL.hasContext()) { - Log.debug("OGL : load SHADER '" + this.name + "' ==> call update context (direct)"); + LOGGER.debug("OGL : load SHADER '" + this.name + "' ==> call update context (direct)"); removeContext(); updateContext(); } else { - Log.debug("OGL : load SHADER '" + this.name + "' ==> tagged has update context needed"); + LOGGER.debug("OGL : load SHADER '" + this.name + "' ==> tagged has update context needed"); // TODO Check this, this is a leek ==> in the GPU ... really bad ... this.exist = false; this.shader = 0; diff --git a/src/org/atriasoft/gale/resource/ResourceTexture.java b/src/org/atriasoft/gale/resource/ResourceTexture.java index 3045c5a..135e8b3 100644 --- a/src/org/atriasoft/gale/resource/ResourceTexture.java +++ b/src/org/atriasoft/gale/resource/ResourceTexture.java @@ -6,29 +6,35 @@ import org.atriasoft.egami.ImageByteRGBA; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2i; import org.atriasoft.gale.backend3d.OpenGL; -import org.atriasoft.gale.internal.Log; import org.atriasoft.gale.tools.ImageLoader; import org.atriasoft.gale.tools.ImageRawData; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL30; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Deprecated public class ResourceTexture extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceTexture.class); + public enum TextureColorMode { rgb, //!< red/green/blue data rgba //!< red/green/blue/alpha data } - - private static int[] textureIdBinding = { GL13.GL_TEXTURE0, GL13.GL_TEXTURE1, GL13.GL_TEXTURE2, GL13.GL_TEXTURE3, GL13.GL_TEXTURE4, GL13.GL_TEXTURE5, GL13.GL_TEXTURE6, GL13.GL_TEXTURE7, - GL13.GL_TEXTURE8, GL13.GL_TEXTURE9, GL13.GL_TEXTURE10, GL13.GL_TEXTURE11, GL13.GL_TEXTURE12, GL13.GL_TEXTURE13, GL13.GL_TEXTURE14, GL13.GL_TEXTURE15, GL13.GL_TEXTURE16, GL13.GL_TEXTURE17, - GL13.GL_TEXTURE18, GL13.GL_TEXTURE19, GL13.GL_TEXTURE20, GL13.GL_TEXTURE21, GL13.GL_TEXTURE22, GL13.GL_TEXTURE23, GL13.GL_TEXTURE24, GL13.GL_TEXTURE25, GL13.GL_TEXTURE26, - GL13.GL_TEXTURE27, GL13.GL_TEXTURE28, GL13.GL_TEXTURE29, GL13.GL_TEXTURE30, GL13.GL_TEXTURE31 };; - + + private static int[] textureIdBinding = { GL13.GL_TEXTURE0, GL13.GL_TEXTURE1, GL13.GL_TEXTURE2, GL13.GL_TEXTURE3, + GL13.GL_TEXTURE4, GL13.GL_TEXTURE5, GL13.GL_TEXTURE6, GL13.GL_TEXTURE7, GL13.GL_TEXTURE8, GL13.GL_TEXTURE9, + GL13.GL_TEXTURE10, GL13.GL_TEXTURE11, GL13.GL_TEXTURE12, GL13.GL_TEXTURE13, GL13.GL_TEXTURE14, + GL13.GL_TEXTURE15, GL13.GL_TEXTURE16, GL13.GL_TEXTURE17, GL13.GL_TEXTURE18, GL13.GL_TEXTURE19, + GL13.GL_TEXTURE20, GL13.GL_TEXTURE21, GL13.GL_TEXTURE22, GL13.GL_TEXTURE23, GL13.GL_TEXTURE24, + GL13.GL_TEXTURE25, GL13.GL_TEXTURE26, GL13.GL_TEXTURE27, GL13.GL_TEXTURE28, GL13.GL_TEXTURE29, + GL13.GL_TEXTURE30, GL13.GL_TEXTURE31 };; + public static ResourceTexture createFromPng(final Uri uriTexture) { return createFromPng(uriTexture, 1); } - + public static ResourceTexture createFromPng(final Uri uriTexture, final int textureUnit) { ResourceTexture resource; Resource resource2; @@ -36,7 +42,7 @@ public class ResourceTexture extends Resource { if (!name.isEmpty() && !name.equals("---")) { resource2 = getManager().localKeep(name); } else { - Log.error("Can not create a shader without a filaname"); + LOGGER.error("Can not create a shader without a filaname"); return null; } if (resource2 != null) { @@ -44,14 +50,15 @@ public class ResourceTexture extends Resource { resource2.keep(); return (ResourceTexture) resource2; } - Log.critical("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } resource = new ResourceTexture(uriTexture, textureUnit); final ImageRawData decodedData = ImageLoader.decodePngFile(uriTexture); - ImageByteRGBA img = new ImageByteRGBA(decodedData.getWidth(), decodedData.getHeight()); - ByteBuffer mlklmklm = decodedData.getBuffer(); - byte[] elemData = new byte[mlklmklm.remaining()]; + final ImageByteRGBA img = new ImageByteRGBA(decodedData.getWidth(), decodedData.getHeight()); + final ByteBuffer mlklmklm = decodedData.getBuffer(); + final byte[] elemData = new byte[mlklmklm.remaining()]; mlklmklm.get(elemData); if (decodedData.isHasAlpha()) { for (int yyy = 0; yyy < decodedData.getHeight(); yyy++) { @@ -65,18 +72,19 @@ public class ResourceTexture extends Resource { } else { for (int yyy = 0; yyy < decodedData.getHeight(); yyy++) { for (int xxx = 0; xxx < decodedData.getWidth(); xxx++) { - img.setAByte(xxx, yyy, (byte)0xFF); + img.setAByte(xxx, yyy, (byte) 0xFF); img.setRByte(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 3 + 0]); img.setGByte(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 3 + 1]); img.setBByte(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 3 + 2]); } } } - resource.setTexture(img, new Vector2i(decodedData.getWidth(), decodedData.getHeight()), (decodedData.isHasAlpha() ? TextureColorMode.rgba : TextureColorMode.rgb), textureUnit); + resource.setTexture(img, new Vector2i(decodedData.getWidth(), decodedData.getHeight()), + (decodedData.isHasAlpha() ? TextureColorMode.rgba : TextureColorMode.rgb), textureUnit); resource.flush(); return resource; } - + /** * get the next power 2 if the input * @param value Value that we want the next power of 2 @@ -90,10 +98,11 @@ public class ResourceTexture extends Resource { } val *= 2; } - Log.critical("impossible CASE...."); + LOGGER.error("impossible CASE...."); + System.exit(-1); return val; } - + protected int texId = -1; //!< openGl textureID. // some image are not square == > we need to sqared it to prevent some openGl api error the the displayable size is not all the time 0.0 . 1.0. protected Vector2i endPointSize = new Vector2i(-1, -1); @@ -109,16 +118,14 @@ public class ResourceTexture extends Resource { private TextureColorMode dataColorSpace = TextureColorMode.rgb; // number of lines and colomns in the texture (multiple texturing in a single texture) private int textureUnit = 0; - - protected ResourceTexture() { - super(); - } - + + protected ResourceTexture() {} + protected ResourceTexture(final Uri filename, final int textureUnit) { super(filename.toString() + "__" + textureUnit); this.textureUnit = textureUnit; } - + public void bindForRendering(final int idTexture) { if (!this.loaded) { return; @@ -130,49 +137,53 @@ public class ResourceTexture extends Resource { OpenGL.enable(OpenGL.Flag.flag_back); } } - + @Override public void cleanUp() { removeContext(); } - + // Flush the data to send it at the openGl system public synchronized void flush() { // request to the manager to be call at the next update ... - Log.verbose("Request UPDATE of Element"); + LOGGER.trace("Request UPDATE of Element"); getManager().update(this); } - + public Vector2i getOpenGlSize() { return this.size; }; - + public int getRendererId() { return this.texId; } - + public Vector2i getUsableSize() { return this.endPointSize; } - + @Override public synchronized void removeContext() { if (this.loaded) { // Request remove texture ... - Log.info("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); + LOGGER.info("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); // TODO Check if we are in the correct thread OpenGL.glDeleteTextures(this.texId); this.loaded = false; } } - + @Override public synchronized void removeContextToLate() { this.loaded = false; this.texId = -1; } - - public void setTexture(final ImageByteRGBA data, final Vector2i size, final TextureColorMode dataColorSpace, final int textureUnit) { + + public void setTexture( + final ImageByteRGBA data, + final Vector2i size, + final TextureColorMode dataColorSpace, + final int textureUnit) { this.data = data; this.size = size; this.textureUnit = textureUnit; @@ -180,7 +191,7 @@ public class ResourceTexture extends Resource { this.dataColorSpace = dataColorSpace; flush(); } - + public void unBindForRendering() { if (!this.loaded) { return; @@ -190,7 +201,7 @@ public class ResourceTexture extends Resource { OpenGL.disable(OpenGL.Flag.flag_back); } } - + // Gale internal API: @Override public boolean updateContext() { @@ -201,24 +212,26 @@ public class ResourceTexture extends Resource { this.texId = GL11.glGenTextures(); GL13.glActiveTexture(this.textureUnit); GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.texId); - + // All RGB bytes are aligned to each other and each component is 1 byte GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); - Log.info("TEXTURE: add [" + getId() + "]=" + this.size + " OGlId=" + this.texId); + LOGGER.info("TEXTURE: add [" + getId() + "]=" + this.size + " OGlId=" + this.texId); if (this.dataColorSpace == TextureColorMode.rgb) { - OpenGL.glTexImage2D(0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, this.data.getRaw()); - //The local image has not RGB but only RGBA data ... + OpenGL.glTexImage2D(0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, + this.data.getRaw()); + //The local image has not RGB but only RGBA data ... //OpenGL.glTexImage2D(0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, this.data.getRaw()); } else { - OpenGL.glTexImage2D(0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, this.data.getRaw()); + OpenGL.glTexImage2D(0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, + this.data.getRaw()); } // generate multi-texture mapping GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D); - + // Setup the ST coordinate system GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); - + // Setup what to do when the texture has to be scaled GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR); diff --git a/src/org/atriasoft/gale/resource/ResourceTexture2.java b/src/org/atriasoft/gale/resource/ResourceTexture2.java index 7ab6f2a..c2cd4fc 100644 --- a/src/org/atriasoft/gale/resource/ResourceTexture2.java +++ b/src/org/atriasoft/gale/resource/ResourceTexture2.java @@ -12,59 +12,64 @@ import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2i; import org.atriasoft.gale.TextureFilter; import org.atriasoft.gale.backend3d.OpenGL; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceTexture2 extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceTexture2.class); + public enum TextureColorMode { rgb, // !< red/green/blue data rgba // !< red/green/blue/alpha data } public static ResourceTexture2 create() { - Log.verbose("KEEP: Resource Texture Dynamic: "); + LOGGER.trace("KEEP: Resource Texture Dynamic: "); return new ResourceTexture2(); } public static ResourceTexture2 create(final Uri uri) { - Log.verbose("KEEP: Resource Texture: " + uri); + LOGGER.trace("KEEP: Resource Texture: " + uri); final Resource object2 = Resource.getManager().localKeep(uri); if (object2 != null) { - if (object2 instanceof ResourceTexture2 tmpp) { + if (object2 instanceof final ResourceTexture2 tmpp) { return tmpp; } - Log.critical("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } - Log.verbose("CREATE: new Texture: " + uri); + LOGGER.trace("CREATE: new Texture: " + uri); return new ResourceTexture2(uri); } public static ResourceTexture2 createNamed(final String uri) { - Log.verbose("KEEP: Resource Texture Named: " + uri); + LOGGER.trace("KEEP: Resource Texture Named: " + uri); final Resource object2 = Resource.getManager().localKeep(uri); if (object2 != null) { - if (object2 instanceof ResourceTexture2 tmpp) { + if (object2 instanceof final ResourceTexture2 tmpp) { return tmpp; } - Log.critical("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } - Log.debug("CREATE: new Texture Named: " + uri); + LOGGER.debug("CREATE: new Texture Named: " + uri); return new ResourceTexture2(uri); } /* * public static ResourceTexture2 createFromPng(final Uri uriTexture) { return * createFromPng(uriTexture, 1); } - * + * * public static ResourceTexture2 createFromPng(final Uri uriTexture, final int * textureUnit) { ResourceTexture2 resource; Resource resource2; final String * name = uriTexture.getValue(); if (name.isEmpty() == false && name != "---") { * resource2 = getManager().localKeep(name); } else { - * Log.error("Can not create a shader without a filaname"); return null; } if + * LOGGER.error("Can not create a shader without a filaname"); return null; } if * (resource2 != null) { if (resource2 instanceof ResourceTexture2) { * resource2.keep(); return (ResourceTexture2) resource2; } - * Log.critical("Request resource file : '" + name + + * LOGGER.critical("Request resource file : '" + name + * "' With the wrong type (dynamic cast error)"); return null; } resource = new * ResourceTexture2(uriTexture, textureUnit); final ImageRawData decodedData = * ImageLoader.decodePngFile(uriTexture); @@ -133,7 +138,7 @@ public class ResourceTexture2 extends Resource { // Flush the data to send it at the openGl system public synchronized void flush() { // request to the manager to be call at the next update ... - Log.verbose("Request UPDATE of Element"); + LOGGER.trace("Request UPDATE of Element"); Resource.getManager().update(this); } @@ -158,7 +163,7 @@ public class ResourceTexture2 extends Resource { public synchronized void removeContext() { if (this.loaded) { // Request remove texture ... - Log.info("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); + LOGGER.info("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); // TODO Check if we are in the correct thread OpenGL.glDeleteTextures(this.texId); this.loaded = false; @@ -177,16 +182,16 @@ public class ResourceTexture2 extends Resource { * @param image Image to set. */ public synchronized void set(final ImageByte image) { - Log.debug("Set a new image in a texture:"); - Log.debug(" size=" + image.getSize()); + LOGGER.debug("Set a new image in a texture:"); + LOGGER.debug(" size=" + image.getSize()); this.data = image; this.realImageSize = this.data.getSize(); - // Disable compatibility size for embended ... -// final Vector2i compatibilityHWSize = new Vector2i(Tools.nextP2(this.realImageSize.x()), Tools.nextP2(this.realImageSize.y())); -// if (!this.realImageSize.equals(compatibilityHWSize)) { -// Log.warning("RESIZE Image for HArwareCompatibility:" + this.realImageSize + " => " + compatibilityHWSize); -// this.data.resize(compatibilityHWSize.x(), compatibilityHWSize.y()); -// } + // Disable compatibility size for embended ... + // final Vector2i compatibilityHWSize = new Vector2i(Tools.nextP2(this.realImageSize.x()), Tools.nextP2(this.realImageSize.y())); + // if (!this.realImageSize.equals(compatibilityHWSize)) { + // LOGGER.warn("RESIZE Image for HArwareCompatibility:" + this.realImageSize + " => " + compatibilityHWSize); + // this.data.resize(compatibilityHWSize.x(), compatibilityHWSize.y()); + // } flush(); } @@ -225,7 +230,7 @@ public class ResourceTexture2 extends Resource { @Override public synchronized boolean updateContext() { - Log.verbose("updateContext [START]"); + LOGGER.trace("updateContext [START]"); //final Steady tic = Steady.now(); /* * TODO : use unlockable synchronized ... if (lock.tryLock() == false) { //Lock @@ -234,8 +239,9 @@ public class ResourceTexture2 extends Resource { final int typeObject = this.data.hasAlpha() ? OpenGL.GL_RGBA : OpenGL.GL_RGB; final int sizeObject = OpenGL.GL_UNSIGNED_BYTE; if (this.loaded) { - if (this.lastTypeObject != typeObject || this.lastSizeObject != sizeObject || !this.lastSize.equals(this.data.getSize())) { - Log.warning("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); + if (this.lastTypeObject != typeObject || this.lastSizeObject != sizeObject + || !this.lastSize.equals(this.data.getSize())) { + LOGGER.warn("TEXTURE: Rm [" + getId() + "] texId=" + this.texId); OpenGL.glDeleteTextures(this.texId); this.loaded = false; } @@ -246,9 +252,11 @@ public class ResourceTexture2 extends Resource { this.lastSize = this.data.getSize(); this.lastTypeObject = typeObject; this.lastSizeObject = sizeObject; - Log.debug("TEXTURE: add [" + getId() + "]=" + this.data.getSize() + "=>" + this.data.getGPUSize() + " OGlId=" + this.texId + " type=" + this.data.getClass().getCanonicalName()); + LOGGER.debug("TEXTURE: add [" + getId() + "]=" + this.data.getSize() + "=>" + this.data.getGPUSize() + + " OGlId=" + this.texId + " type=" + this.data.getClass().getCanonicalName()); } else { - Log.debug("TEXTURE: update [" + getId() + "]=" + this.data.getSize() + "=>" + this.data.getGPUSize() + " OGlId=" + this.texId + " type=" + this.data.getClass().getCanonicalName()); + LOGGER.debug("TEXTURE: update [" + getId() + "]=" + this.data.getSize() + "=>" + this.data.getGPUSize() + + " OGlId=" + this.texId + " type=" + this.data.getClass().getCanonicalName()); } // in all case we set the texture properties : // TODO check error ??? @@ -268,7 +276,7 @@ public class ResourceTexture2 extends Resource { } // glPixelStorei(GLUNPACKALIGNMENT,1); //final Steady toc1 = Steady.now(); - //Log.verbose(" BIND ==> " + toc1.less(tic)); + //LOGGER.trace(" BIND ==> " + toc1.less(tic)); // egami::store(this.data, String("~/texture") + etk::toString(getId()) + ".bmp"); if (!this.loaded) { OpenGL.glTexImage2D(0, // Level @@ -289,7 +297,7 @@ public class ResourceTexture2 extends Resource { // now the data is loaded this.loaded = true; // final Steady toc = Steady.now(); - // Log.error(" updateContext [STOP] ==> " + (toc - toc1)); + // LOGGER.error(" updateContext [STOP] ==> " + (toc - toc1)); return true; } diff --git a/src/org/atriasoft/gale/resource/ResourceTextureFile.java b/src/org/atriasoft/gale/resource/ResourceTextureFile.java index 57b1b82..a4b1080 100644 --- a/src/org/atriasoft/gale/resource/ResourceTextureFile.java +++ b/src/org/atriasoft/gale/resource/ResourceTextureFile.java @@ -4,12 +4,14 @@ import org.atriasoft.egami.ImageByte; import org.atriasoft.etk.Tools; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2i; -import org.atriasoft.gale.internal.Log; import org.atriasoft.iogami.IOgami; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // TODO : Change tis file name ... public class ResourceTextureFile extends ResourceTexture2 { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceTextureFile.class); public static Vector2i sizeAuto = new Vector2i(-1, -1); public static Vector2i sizeDefault = Vector2i.ZERO; @@ -32,24 +34,24 @@ public class ResourceTextureFile extends ResourceTexture2 { * @return pointer on the resource or null if an error occured. */ public static ResourceTextureFile create(final Uri uri, final Vector2i inSize, final Vector2i sizeRegister) { - Log.verbose("KEEP: TextureFile: '" + uri + "' size=" + inSize + " sizeRegister=" + sizeRegister); + LOGGER.trace("KEEP: TextureFile: '" + uri + "' size=" + inSize + " sizeRegister=" + sizeRegister); Vector2i size = inSize; if (uri == null) { return new ResourceTextureFile(); } if (size.x() == 0) { size = size.withX(-1); - // Log.error("Error Request the image size.x() =0 ???"); + // LOGGER.error("Error Request the image size.x() =0 ???"); } if (size.y() == 0) { size = size.withY(-1); - // Log.error("Error Request the image size.y() =0 ???"); + // LOGGER.error("Error Request the image size.y() =0 ???"); } if (!uri.getExtention().toLowerCase().contentEquals("svg")) { size = ResourceTextureFile.sizeAuto; } if (size.x() > 0 && size.y() > 0) { - Log.verbose(" == > specific size : " + size); + LOGGER.trace(" == > specific size : " + size); size = new Vector2i(Tools.nextP2(size.x()), Tools.nextP2(size.y())); if (!sizeRegister.equals(ResourceTextureFile.sizeAuto)) { if (!sizeRegister.equals(ResourceTextureFile.sizeDefault)) { @@ -59,19 +61,20 @@ public class ResourceTextureFile extends ResourceTexture2 { } } - Log.verbose("KEEP: TextureFile: '" + uri + "' new size=" + size); + LOGGER.trace("KEEP: TextureFile: '" + uri + "' new size=" + size); final Resource object2 = Resource.getManager().localKeep(uri.toString()); if (object2 != null) { - if (object2 instanceof ResourceTextureFile out) { + if (object2 instanceof final ResourceTextureFile out) { object2.keep(); return out; } - Log.critical("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } - Log.debug("CREATE: TextureFile: '" + uri + "' size=" + size); + LOGGER.debug("CREATE: TextureFile: '" + uri + "' size=" + size); // need to crate a new one ... - ResourceTextureFile object = new ResourceTextureFile(uri.toString(), uri, size); + final ResourceTextureFile object = new ResourceTextureFile(uri.toString(), uri, size); Resource.getManager().localAdd(object); return object; } @@ -80,10 +83,10 @@ public class ResourceTextureFile extends ResourceTexture2 { protected ResourceTextureFile(final String genName, final Uri uri, final Vector2i size) { super(genName); - Log.debug("create a new resource::Image : genName=" + genName + " uri=" + uri + " size=" + size); + LOGGER.debug("create a new resource::Image : genName=" + genName + " uri=" + uri + " size=" + size); final ImageByte tmp = IOgami.load(uri, size); if (tmp == null) { - Log.error("Can not load the file : " + uri); + LOGGER.error("Can not load the file : " + uri); return; } set(tmp); diff --git a/src/org/atriasoft/gale/resource/ResourceVirtualArrayObject.java b/src/org/atriasoft/gale/resource/ResourceVirtualArrayObject.java index 722e5e2..8021f9f 100644 --- a/src/org/atriasoft/gale/resource/ResourceVirtualArrayObject.java +++ b/src/org/atriasoft/gale/resource/ResourceVirtualArrayObject.java @@ -12,99 +12,118 @@ import org.atriasoft.etk.math.Vector3f; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.gale.backend3d.OpenGL.Usage; -import org.atriasoft.gale.internal.Log; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; //import models.RawModel; public class ResourceVirtualArrayObject extends Resource { + static final Logger LOGGER = LoggerFactory.getLogger(ResourceVirtualArrayObject.class); public static final int INDICE_VBO_POSITIONS = 0; public static final int INDICE_VBO_TEXTURE_COORDINATES = 1; public static final int INDICE_VBO_NORMALS = 2; public static final int INDICE_VBO_COLORS = 3; - + public static int[] convertIntegers(final List integers) { - int[] ret = new int[integers.size()]; - Iterator iterator = integers.iterator(); + final int[] ret = new int[integers.size()]; + final Iterator iterator = integers.iterator(); for (int i = 0; i < ret.length; i++) { ret[i] = iterator.next().intValue(); } return ret; } - - public static ResourceVirtualArrayObject create(final float[] positions, final float[] colors, final float[] textureCoordinates, final float[] normals, final int[] indices) { - final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, colors, textureCoordinates, normals, indices, indices.length); + + public static ResourceVirtualArrayObject create( + final float[] positions, + final float[] colors, + final float[] textureCoordinates, + final float[] normals, + final int[] indices) { + final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, colors, + textureCoordinates, normals, indices, indices.length); Resource.getManager().localAdd(resource); return resource; } - - public static ResourceVirtualArrayObject create(final float[] positions, final float[] textureCoordinates, final float[] normals, final int[] indices) { - final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, null, textureCoordinates, normals, indices, indices.length); + + public static ResourceVirtualArrayObject create( + final float[] positions, + final float[] textureCoordinates, + final float[] normals, + final int[] indices) { + final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, null, textureCoordinates, + normals, indices, indices.length); Resource.getManager().localAdd(resource); return resource; } - - public static ResourceVirtualArrayObject create(final float[] positions, final float[] colors, final int[] indices) { - final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, colors, null, null, indices, indices.length); + + public static ResourceVirtualArrayObject create( + final float[] positions, + final float[] colors, + final int[] indices) { + final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, colors, null, null, + indices, indices.length); Resource.getManager().localAdd(resource); return resource; } - + public static ResourceVirtualArrayObject create(final float[] positions, final int dimentions) { - final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, null, null, null, null, positions.length / dimentions); + final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, null, null, null, null, + positions.length / dimentions); Resource.getManager().localAdd(resource); return resource; } - + public static ResourceVirtualArrayObject createDynamic() { final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(); Resource.getManager().localAdd(resource); return resource; } - + public static FloatBuffer storeDataInFloatBuffer(final float[] data) { final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length); buffer.put(data); buffer.flip(); return buffer; } - + public static IntBuffer storeDataInIntBuffer(final int[] data) { final IntBuffer buffer = BufferUtils.createIntBuffer(data.length); buffer.put(data); buffer.flip(); return buffer; } - + private boolean dynamic = false; private int vaoID = -1; private boolean exist = false; //!< This data is availlable in the Graphic card - + private final List vbo = new ArrayList<>(); - + Object positions = null; - + Object colors = null; - + Object textureCoordinates = null; - + Object normals = null; - + int[] indices = null; - + int vertexCount = -1; - + protected ResourceVirtualArrayObject() { this.resourceLevel = 3; this.dynamic = true; - Log.debug("OGL: load VBO count (dynamic)"); + LOGGER.debug("OGL: load VBO count (dynamic)"); } - - protected ResourceVirtualArrayObject(final float[] positions, final float[] colors, final float[] textureCoordinates, final float[] normals, final int[] indices, final int vertexCount) { + + protected ResourceVirtualArrayObject(final float[] positions, final float[] colors, + final float[] textureCoordinates, final float[] normals, final int[] indices, final int vertexCount) { this.resourceLevel = 3; this.positions = positions; this.colors = colors; @@ -112,9 +131,9 @@ public class ResourceVirtualArrayObject extends Resource { this.normals = normals; this.indices = indices; this.vertexCount = vertexCount; - Log.debug("OGL: load VBO count"); + LOGGER.debug("OGL: load VBO count"); } - + public void bindForRendering() { if (!this.exist) { return; @@ -122,7 +141,7 @@ public class ResourceVirtualArrayObject extends Resource { GL30.glBindVertexArray(this.vaoID); if (this.positions != null) { GL20.glEnableVertexAttribArray(ResourceVirtualArrayObject.INDICE_VBO_POSITIONS); - //Log.info("unbind POSITION"); + //LOGGER.info("unbind POSITION"); } if (this.textureCoordinates != null) { GL20.glEnableVertexAttribArray(ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES); @@ -134,7 +153,7 @@ public class ResourceVirtualArrayObject extends Resource { GL20.glEnableVertexAttribArray(ResourceVirtualArrayObject.INDICE_VBO_COLORS); } } - + private void bindIndicesBuffer(final int[] indices) { final int vboId = OpenGL.genBuffers(); this.vbo.add(vboId); @@ -146,7 +165,7 @@ public class ResourceVirtualArrayObject extends Resource { GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW); } } - + /** * Destructor of this VBO. */ @@ -154,12 +173,12 @@ public class ResourceVirtualArrayObject extends Resource { public void cleanUp() { removeContext(); } - + /** * clear buffers */ public void clear() { - //Log.verbose(" Clear: [" + getId() + "] '" + getName() + "' (size=" + buffer.get(0).length + ")"); + //LOGGER.trace(" Clear: [" + getId() + "] '" + getName() + "' (size=" + buffer.get(0).length + ")"); this.positions = null; this.colors = null; this.textureCoordinates = null; @@ -167,22 +186,22 @@ public class ResourceVirtualArrayObject extends Resource { this.indices = null; this.vertexCount = -1; } - + private void createVAO() { - Log.verbose("create VAO..."); + LOGGER.trace("create VAO..."); this.vaoID = GL30.glGenVertexArrays(); GL30.glBindVertexArray(this.vaoID); } - + /** * Send the data to the graphic card. */ public void flush() { // request to the manager to be call at the next update ... Resource.getManager().update(this); - Log.verbose("Request flush of VAO: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace("Request flush of VAO: [" + getId() + "] '" + getName() + "'"); } - + /** * get the real openGL ID. * @return the Ogl id reference of this VBO. @@ -190,63 +209,65 @@ public class ResourceVirtualArrayObject extends Resource { public int getGLID() { return this.vaoID; } - + public int getVertexCount() { return this.vertexCount; } - + public void loadAgainToVAO() { GL30.glBindVertexArray(this.vaoID); - Log.verbose("push VAO: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace("push VAO: [" + getId() + "] '" + getName() + "'"); if (this.indices != null) { - Log.verbose("Set indices"); + LOGGER.trace("Set indices"); bindIndicesBuffer(this.indices); } if (this.positions != null) { - Log.verbose("Set positions"); + LOGGER.trace("Set positions"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_POSITIONS, 3, this.positions); } if (this.textureCoordinates != null) { - Log.verbose("Set textureCoordinates"); - storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, 2, this.textureCoordinates); + LOGGER.trace("Set textureCoordinates"); + storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, 2, + this.textureCoordinates); } if (this.normals != null) { - Log.verbose("Set normals"); + LOGGER.trace("Set normals"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_NORMALS, 3, this.normals); } if (this.colors != null) { - Log.verbose("Set colors"); + LOGGER.trace("Set colors"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_COLORS, 4, this.colors); } unbindVAO(); } - + public void loadToVAO() { createVAO(); - Log.verbose("push VAO: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace("push VAO: [" + getId() + "] '" + getName() + "'"); if (this.indices != null) { - Log.verbose("Set indices"); + LOGGER.trace("Set indices"); bindIndicesBuffer(this.indices); } if (this.positions != null) { - Log.verbose("Set positions"); + LOGGER.trace("Set positions"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_POSITIONS, 3, this.positions); } if (this.textureCoordinates != null) { - Log.verbose("Set textureCoordinates"); - storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, 2, this.textureCoordinates); + LOGGER.trace("Set textureCoordinates"); + storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, 2, + this.textureCoordinates); } if (this.normals != null) { - Log.verbose("Set normals"); + LOGGER.trace("Set normals"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_NORMALS, 3, this.normals); } if (this.colors != null) { - Log.verbose("Set colors"); + LOGGER.trace("Set colors"); storeDataInAttributeList(ResourceVirtualArrayObject.INDICE_VBO_COLORS, 4, this.colors); } unbindVAO(); } - + /** * Relode the shader from the file. used when a request of resouces reload is done. * @note this is really usefull when we tested the new themes or shader developpements. @@ -256,7 +277,7 @@ public class ResourceVirtualArrayObject extends Resource { removeContext(); updateContext(); } - + /** * remove the data from the opengl context. */ @@ -267,7 +288,7 @@ public class ResourceVirtualArrayObject extends Resource { this.exist = false; } } - + /** * Special android spec! It inform us that all context is removed and after notify us... */ @@ -278,84 +299,84 @@ public class ResourceVirtualArrayObject extends Resource { // this.vbo[iii] = 0; // } } - + public void render(final RenderMode mode) { - Log.verbose("request rendering indices : " + this.vertexCount); + LOGGER.trace("request rendering indices : " + this.vertexCount); OpenGL.drawElements(mode, this.vertexCount); } - + public void render(final RenderMode mode, final int start, final int stop) { OpenGL.drawArrays(mode, start, stop); } - + public void renderArrays(final RenderMode mode) { - Log.verbose("request rendering direct : " + this.vertexCount); + LOGGER.trace("request rendering direct : " + this.vertexCount); OpenGL.drawArrays(mode, 0, this.vertexCount); } - + public void setColors(final Color[] colors) { this.colors = colors; } - + public void setColors(final float[] colors) { this.colors = colors; } - + public void setColors(final List colors) { setColors(colors.toArray(Color[]::new)); - + } - + public void setIndices(final int[] indices) { this.indices = indices; } - + public void setIndices(final List indices) { this.indices = ResourceVirtualArrayObject.convertIntegers(indices); this.vertexCount = this.indices.length; } - + public void setNormals(final float[] normals) { this.normals = normals; } - + public void setNormals(final List normals) { setNormals(normals.toArray(Vector3f[]::new)); } - + public void setNormals(final Vector3f[] normals) { this.normals = normals; } - + public void setPosition(final float[] positions) { this.positions = positions; } - + public void setPosition(final List outPosition) { setPosition(outPosition.toArray(Vector3f[]::new)); - + } - + public void setPosition(final Vector3f[] positions) { this.positions = positions; } - + public void setTextureCoordinate(final float[] textureCoordinates) { this.textureCoordinates = textureCoordinates; } - + public void setTextureCoordinate(final List outTexturePosition) { setTextureCoordinate(outTexturePosition.toArray(Vector2f[]::new)); } - + public void setTextureCoordinate(final Vector2f[] textureCoordinates) { this.textureCoordinates = textureCoordinates; } - + public void setVertexCount(final int vertexCount) { this.vertexCount = vertexCount; } - + private void storeDataInAttributeList(final int attributeNumber, final int coordinateSize, final Object data) { final int vboID = GL15.glGenBuffers(); this.vbo.add(vboID); @@ -365,23 +386,23 @@ public class ResourceVirtualArrayObject extends Resource { usage = Usage.streamDraw; } // select the buffer to set data inside it ... - if (data instanceof float[] buffer) { + if (data instanceof final float[] buffer) { OpenGL.bufferData(buffer, usage); - } else if (data instanceof int[] buffer) { + } else if (data instanceof final int[] buffer) { OpenGL.bufferData(buffer, usage); - } else if (data instanceof Vector2f[] buffer) { + } else if (data instanceof final Vector2f[] buffer) { OpenGL.bufferData(buffer, usage); - } else if (data instanceof Vector3f[] buffer) { + } else if (data instanceof final Vector3f[] buffer) { OpenGL.bufferData(buffer, usage); - } else if (data instanceof Color[] buffer) { + } else if (data instanceof final Color[] buffer) { OpenGL.bufferData(buffer, usage); } else { - Log.error("Not managed VBO model : " + data.getClass().getCanonicalName()); + LOGGER.error("Not managed VBO model : " + data.getClass().getCanonicalName()); } GL20.glVertexAttribPointer(attributeNumber, coordinateSize, GL11.GL_FLOAT, false, 0, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); } - + public void unBindForRendering() { if (!this.exist) { return; @@ -400,33 +421,34 @@ public class ResourceVirtualArrayObject extends Resource { } GL30.glBindVertexArray(0); } - + private void unbindVAO() { - Log.verbose("Unbind VAO ..."); + LOGGER.trace("Unbind VAO ..."); GL30.glBindVertexArray(0); } - + /** * This load/reload the data in the opengl context, needed when removed previously. */ @Override public boolean updateContext() { - Log.verbose(" Start: [" + getId() + "] '" + getName() + "' (size=" + this.vertexCount + ") ********************************"); + LOGGER.trace(" Start: [" + getId() + "] '" + getName() + "' (size=" + this.vertexCount + + ") ********************************"); if (!this.exist) { - Log.verbose(" ==> ALLOCATE new handle"); + LOGGER.trace(" ==> ALLOCATE new handle"); // Allocate and assign a Vertex Array Object to our handle loadToVAO(); } else { // Update VAO (only for dynamic: if (!this.dynamic) { - Log.error(" Request update a VAO with a static buffer !!!" + this.name); + LOGGER.error(" Request update a VAO with a static buffer !!!" + this.name); } loadAgainToVAO(); - + } this.exist = true; - Log.verbose(" Stop: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace(" Stop: [" + getId() + "] '" + getName() + "'"); return true; } - + } diff --git a/src/org/atriasoft/gale/resource/ResourceVirtualBufferObject.java b/src/org/atriasoft/gale/resource/ResourceVirtualBufferObject.java index eb29090..7fe3c75 100644 --- a/src/org/atriasoft/gale/resource/ResourceVirtualBufferObject.java +++ b/src/org/atriasoft/gale/resource/ResourceVirtualBufferObject.java @@ -12,21 +12,23 @@ import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL.Usage; -import org.atriasoft.gale.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * ResourceVirtualBufferObject is a specific resources for opengl, this load the data directly in the graphic card ad keep these inside */ public class ResourceVirtualBufferObject extends Resource { - + static final Logger LOGGER = LoggerFactory.getLogger(ResourceVirtualBufferObject.class); + public static ResourceVirtualBufferObject create(final int count) { return new ResourceVirtualBufferObject(count); } - + private boolean exist = false; //!< This data is available in the Graphic card private final int[] vbo; //!< openGl ID of this VBO private final Object[] buffer; //!< data that is available in the VBO system ... - + /** * Constructor of this VBO. * @param accesMode Access mode : ??? @@ -34,10 +36,10 @@ public class ResourceVirtualBufferObject extends Resource { protected ResourceVirtualBufferObject(final int number) { this.vbo = new int[number]; // 0 this.buffer = new Object[number]; - Log.debug("OGL : load VBO count=\"" + number + "\""); + LOGGER.debug("OGL : load VBO count=\"" + number + "\""); this.resourceLevel = 3; } - + public int bufferSize(final int vboidcoord) { if (this.buffer[vboidcoord] != null) { // select the buffer to set data inside it ... @@ -53,35 +55,35 @@ public class ResourceVirtualBufferObject extends Resource { } else if (this.buffer[vboidcoord] instanceof Color[]) { return ((Color[]) (this.buffer[vboidcoord])).length; } else { - Log.error("Not managed VBO model : " + this.buffer[vboidcoord].getClass().getCanonicalName()); + LOGGER.error("Not managed VBO model : " + this.buffer[vboidcoord].getClass().getCanonicalName()); } } return 0; } - + @Override public void cleanUp() { // TODO Auto-generated method stub } - + /** * clear buffers */ public void clear() { - Log.verbose(" Clear: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")"); + LOGGER.trace(" Clear: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")"); // DO not clear the this.vbo indexed in the graphic cards ... Arrays.fill(this.buffer, null); } - + /** * Send the data to the graphic card. */ public synchronized void flush() { // request to the manager to be call at the next update ... Resource.getManager().update(this); - Log.verbose("Request flush of VBO: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace("Request flush of VBO: [" + getId() + "] '" + getName() + "'"); } - + public int getElementSize(final int index) { if (this.buffer[index] != null) { // select the buffer to set data inside it ... @@ -97,12 +99,12 @@ public class ResourceVirtualBufferObject extends Resource { } else if (this.buffer[index] instanceof Color[]) { return 4; } else { - Log.error("Not managed VBO model : " + this.buffer[index].getClass().getCanonicalName()); + LOGGER.error("Not managed VBO model : " + this.buffer[index].getClass().getCanonicalName()); } } return 1; } - + /** * get the real openGL ID. * @return the Ogl id reference of this VBO. @@ -110,7 +112,7 @@ public class ResourceVirtualBufferObject extends Resource { public int getOpenGlId(final int id) { return this.vbo[id]; } - + /** * Relode the shader from the file. used when a request of resouces reload is done. * @note this is really usefull when we tested the new themes or shader developpements. @@ -120,7 +122,7 @@ public class ResourceVirtualBufferObject extends Resource { removeContext(); updateContext(); } - + /** * remove the data from the opengl context. */ @@ -131,7 +133,7 @@ public class ResourceVirtualBufferObject extends Resource { this.exist = false; } } - + /** * Special android spec! It inform us that all context is removed and after notify us... */ @@ -140,56 +142,58 @@ public class ResourceVirtualBufferObject extends Resource { this.exist = false; Arrays.fill(this.vbo, 0); } - + /** * get the data from the graphic card. */ public void retreiveData() { - Log.error("TODO ... "); + LOGGER.error("TODO ... "); } - + public void setVboData(final int vboId, final Color[] data) { this.buffer[vboId] = data; } - + public void setVboData(final int vboId, final float[] data) { this.buffer[vboId] = data; } - + public void setVboData(final int vboId, final int[] data) { this.buffer[vboId] = data; } - + public void setVboData(final int vboId, final Vector2f[] data) { this.buffer[vboId] = data; } - + public void setVboData(final int vboId, final Vector3f[] data) { this.buffer[vboId] = data; } - + /** * This load/reload the data in the opengl context, needed when removed previously. */ @Override public synchronized boolean updateContext() { - Log.verbose("updateContext (VBO Start: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")"); + LOGGER.trace( + "updateContext (VBO Start: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")"); /* if (lock.tryLock() == false) { //Lock error ==> try later ... - Log.warning(" ==> Lock error on VBO"); + LOGGER.warn(" ==> Lock error on VBO"); return false; } */ if (!this.exist) { - Log.debug(" ==> ALLOCATE new handle"); + LOGGER.debug(" ==> ALLOCATE new handle"); // Allocate and assign a Vertex Array Object to our handle OpenGL.genBuffers(this.vbo); } this.exist = true; for (int iii = 0; iii < this.vbo.length; iii++) { if (this.buffer[iii] != null) { - Log.verbose("VBO : add [" + getId() + "]=" + this.buffer[iii].getClass().getCanonicalName() + "*sizeof(float) OGl_Id=" + this.vbo[iii]); + LOGGER.trace("VBO : add [" + getId() + "]=" + this.buffer[iii].getClass().getCanonicalName() + + "*sizeof(float) OGl_Id=" + this.vbo[iii]); OpenGL.bindBuffer(this.vbo[iii]); // select the buffer to set data inside it ... if (this.buffer[iii] instanceof float[]) { @@ -203,13 +207,13 @@ public class ResourceVirtualBufferObject extends Resource { } else if (this.buffer[iii] instanceof Color[]) { OpenGL.bufferData((Color[]) (this.buffer[iii]), Usage.streamDraw); } else { - Log.error("Not managed VBO model : " + this.buffer[iii].getClass().getCanonicalName()); + LOGGER.error("Not managed VBO model : " + this.buffer[iii].getClass().getCanonicalName()); } } } // un-bind it to permet to have no error in the next display ... OpenGL.unbindBuffer(); - Log.verbose(" Stop: [" + getId() + "] '" + getName() + "'"); + LOGGER.trace(" Stop: [" + getId() + "] '" + getName() + "'"); return true; } } diff --git a/src/org/atriasoft/gale/test/sample1/Sample1Application.java b/src/org/atriasoft/gale/test/sample1/Sample1Application.java index 92f97ed..525e546 100644 --- a/src/org/atriasoft/gale/test/sample1/Sample1Application.java +++ b/src/org/atriasoft/gale/test/sample1/Sample1Application.java @@ -14,23 +14,26 @@ import org.atriasoft.gale.key.KeyStatus; import org.atriasoft.gale.key.KeyType; import org.atriasoft.gale.resource.ResourceProgram; import org.atriasoft.gale.resource.ResourceVirtualArrayObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Sample1Application extends GaleApplication { + static final Logger LOGGER = LoggerFactory.getLogger(Sample1Application.class); //float[] vertices = { 0.2f, 0.1f, 0.0f, 0.3f, 0.4f, 0.0f, 0.1f, 0.4f, 0.0f }; private static final float[] VERTICES = { -0.5f, -0.5f, -1.0f, 0.0f, 0.5f, -1.0f, 0.5f, -0.5f, -1.0f }; private static final float[] COLORS = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, }; private static final int[] INDICES = { 0, 1, 2 }; - + private static final boolean TEST_STATIC_MODE = false; - + private ResourceProgram oGLprogram; private int oGLMatrixTransformation; private int oGLMatrixProjection; private int oGLMatrixView; - + private float angle; private ResourceVirtualArrayObject verticesVBO; - + @Override public void onCreate(final GaleContext context) { //setSize(new Vector2f(800, 600)); @@ -41,7 +44,7 @@ public class Sample1Application extends GaleApplication { this.oGLMatrixProjection = this.oGLprogram.getUniform("in_matrixProjection"); this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView"); } - + // this is the properties of the buffer requested : "r"/"w" + "-" + buffer type "f"=float "i"=integer if (TEST_STATIC_MODE) { this.verticesVBO = ResourceVirtualArrayObject.create(VERTICES, COLORS, INDICES); @@ -52,49 +55,49 @@ public class Sample1Application extends GaleApplication { this.verticesVBO.setName("[VBO] of basic SAMPLE"); // update all the VBO elements ... this.verticesVBO.flush(); - Log.info("==> Init APPL (END)"); + LOGGER.info("==> Init APPL (END)"); } - + @Override public void onDraw(final GaleContext context) { this.angle += 0.01; - //Log.info("==> appl Draw ..."); - Vector2f size = getSize(); + //LOGGER.info("==> appl Draw ..."); + final Vector2f size = getSize(); // set the basic openGL view port: (position drawed in the windows) OpenGL.setViewPort(Vector2f.ZERO, size); // Clear all the stacked matrix ... OpenGL.setBasicMatrix(Matrix4f.IDENTITY); // clear background - Color bgColor = Color.CYAN; + final Color bgColor = Color.CYAN; OpenGL.clearColor(bgColor); // real clear request: OpenGL.clear(OpenGL.ClearFlag.clearFlag_colorBuffer); // create a local matrix environment. OpenGL.push(); - - Matrix4f tmpProjection = Matrix4f.createMatrixOrtho(-getAspectRatio(), getAspectRatio(), -1, 1, -50, 50); + + final Matrix4f tmpProjection = Matrix4f.createMatrixOrtho(-getAspectRatio(), getAspectRatio(), -1, 1, -50, 50); //Matrix4f tmpProjection = Matrix4f.IDENTITY; // set internal matrix system: OpenGL.setMatrix(tmpProjection); if (this.oGLprogram == null) { - Log.info("No shader ..."); + LOGGER.info("No shader ..."); return; } //EWOL_DEBUG(" display " + this.coord.size() + " elements" ); this.oGLprogram.use(); - + // set Matrix: translation/positionMatrix - Matrix4f projectionMatrix = tmpProjection; //OpenGL.getMatrix(); - Matrix4f transforamtionMatrix = Matrix4f.createMatrixRotate(new Vector3f(0, 0, 1), this.angle); - Matrix4f viewMatrix = OpenGL.getCameraMatrix(); + final Matrix4f projectionMatrix = tmpProjection; //OpenGL.getMatrix(); + final Matrix4f transforamtionMatrix = Matrix4f.createMatrixRotate(new Vector3f(0, 0, 1), this.angle); + final Matrix4f viewMatrix = OpenGL.getCameraMatrix(); //Matrix4f tmpMatrix = projMatrix * camMatrix; - + this.verticesVBO.bindForRendering(); this.oGLprogram.uniformMatrix(this.oGLMatrixView, viewMatrix); this.oGLprogram.uniformMatrix(this.oGLMatrixProjection, projectionMatrix); // Change the position for each element with the same pipeline you need to render ... this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, transforamtionMatrix); - + // Request the draw of the elements: if (TEST_STATIC_MODE) { this.verticesVBO.render(OpenGL.RenderMode.TRIANGLE); @@ -107,7 +110,7 @@ public class Sample1Application extends GaleApplication { OpenGL.pop(); // mark to redraw the screen ==> demo only.... markDrawingIsNeeded(); - + if (!TEST_STATIC_MODE) { this.verticesVBO.clear(); this.verticesVBO.setPosition(VERTICES); @@ -116,20 +119,29 @@ public class Sample1Application extends GaleApplication { this.verticesVBO.flush(); } } - + @Override - public void onKeyboard(final KeySpecial special, final KeyKeyboard type, final Character value, final KeyStatus state) { - Log.info("Keyboard event: special=" + special); - Log.info(" type=" + type); - Log.info(" value='" + value + "'"); - Log.info(" state=" + state); + public void onKeyboard( + final KeySpecial special, + final KeyKeyboard type, + final Character value, + final KeyStatus state) { + LOGGER.info("Keyboard event: special=" + special); + LOGGER.info(" type=" + type); + LOGGER.info(" value='" + value + "'"); + LOGGER.info(" state=" + state); } - + @Override - public void onPointer(final KeySpecial special, final KeyType type, final int pointerID, final Vector2f pos, final KeyStatus state) { - // Log.info("input event: type=" + type); - // Log.info(" id=" + pointerID); - // Log.info(" pos=" + pos); - // Log.info(" state=" + state); + public void onPointer( + final KeySpecial special, + final KeyType type, + final int pointerID, + final Vector2f pos, + final KeyStatus state) { + // LOGGER.info("input event: type=" + type); + // LOGGER.info(" id=" + pointerID); + // LOGGER.info(" pos=" + pos); + // LOGGER.info(" state=" + state); } } diff --git a/src/org/atriasoft/gale/test/sample2/Sample2Application.java b/src/org/atriasoft/gale/test/sample2/Sample2Application.java index ddc6bc9..24e9dba 100644 --- a/src/org/atriasoft/gale/test/sample2/Sample2Application.java +++ b/src/org/atriasoft/gale/test/sample2/Sample2Application.java @@ -15,8 +15,11 @@ import org.atriasoft.gale.key.KeyType; import org.atriasoft.gale.resource.ResourceProgram; import org.atriasoft.gale.resource.ResourceTexture; import org.atriasoft.gale.resource.ResourceVirtualArrayObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Sample2Application extends GaleApplication { + static final Logger LOGGER = LoggerFactory.getLogger(Sample2Application.class); private ResourceProgram oGLprogram; private int oGLMatrixTransformation; private int oGLMatrixProjection; @@ -26,7 +29,7 @@ public class Sample2Application extends GaleApplication { private float angleZ = 0; private ResourceVirtualArrayObject verticesVBO; private ResourceTexture texture; - + @Override public void onCreate(final GaleContext context) { setSize(new Vector2f(800, 600)); @@ -37,88 +40,88 @@ public class Sample2Application extends GaleApplication { this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView"); } //@formatter:off - float[] vertices = { - -0.5f,0.5f,-0.5f, - -0.5f,-0.5f,-0.5f, - 0.5f,-0.5f,-0.5f, - 0.5f,0.5f,-0.5f, - - -0.5f,0.5f,0.5f, - -0.5f,-0.5f,0.5f, - 0.5f,-0.5f,0.5f, - 0.5f,0.5f,0.5f, - - 0.5f,0.5f,-0.5f, - 0.5f,-0.5f,-0.5f, - 0.5f,-0.5f,0.5f, - 0.5f,0.5f,0.5f, - - -0.5f,0.5f,-0.5f, - -0.5f,-0.5f,-0.5f, - -0.5f,-0.5f,0.5f, + final float[] vertices = { + -0.5f,0.5f,-0.5f, + -0.5f,-0.5f,-0.5f, + 0.5f,-0.5f,-0.5f, + 0.5f,0.5f,-0.5f, + -0.5f,0.5f,0.5f, - + -0.5f,-0.5f,0.5f, + 0.5f,-0.5f,0.5f, + 0.5f,0.5f,0.5f, + + 0.5f,0.5f,-0.5f, + 0.5f,-0.5f,-0.5f, + 0.5f,-0.5f,0.5f, + 0.5f,0.5f,0.5f, + + -0.5f,0.5f,-0.5f, + -0.5f,-0.5f,-0.5f, + -0.5f,-0.5f,0.5f, + -0.5f,0.5f,0.5f, + -0.5f,0.5f,0.5f, -0.5f,0.5f,-0.5f, 0.5f,0.5f,-0.5f, 0.5f,0.5f,0.5f, - + -0.5f,-0.5f,0.5f, -0.5f,-0.5f,-0.5f, 0.5f,-0.5f,-0.5f, 0.5f,-0.5f,0.5f - + }; - - float[] textureCoords = { - 0,0, 0,1, 1,1, 1,0, - 0,0, 0,1, 1,1, 1,0, + + final float[] textureCoords = { + 0,0, 0,1, 1,1, 1,0, + 0,0, 0,1, 1,1, 1,0, 0,0, 0,1, 1,1, 1,0, 0,0, 0,1, 1,1, 1,0, 0,0, 0,1, 1,1, 1,0, 0,0, 0,1, 1,1, 1,0 }; - - int[] indices = { - 1,0,3, 1,3,2, - 4,5,7, 7,5,6, + + final int[] indices = { + 1,0,3, 1,3,2, + 4,5,7, 7,5,6, 9,8,11, 9,11,10, - 12,13,15, 15,13,14, + 12,13,15, 15,13,14, 17,16,19, 17,19,18, 20,21,23, 23,21,22 }; //@formatter:on - + // this is the properties of the buffer requested : "r"/"w" + "-" + buffer type "f"=float "i"=integer this.verticesVBO = ResourceVirtualArrayObject.create(vertices, textureCoords, null, indices); // TO facilitate some debugs we add a name of the VBO: this.verticesVBO.setName("[VBO] of basic SAMPLE"); // update all the VBO elements ... this.verticesVBO.flush(); - + this.texture = ResourceTexture.createFromPng(new Uri("DATA", "tree_sample.png")); if (this.texture == null) { - Log.error("can not instanciate Texture ..."); + LOGGER.error("can not instanciate Texture ..."); return; } - Log.info("==> Init APPL (END)"); + LOGGER.info("==> Init APPL (END)"); } - + @Override public void onDraw(final GaleContext context) { this.angleX += 0.001; this.angleY += 0.005; this.angleZ += 0.01; - //Log.info("==> appl Draw ..."); - Vector2f size = getSize(); - //Log.info("==> Windows size = " + size); + //LOGGER.info("==> appl Draw ..."); + final Vector2f size = getSize(); + //LOGGER.info("==> Windows size = " + size); // set the basic openGL view port: (position drawed in the windows) OpenGL.setViewPort(new Vector2f(0, 0), size); // Clear all the stacked matrix ... OpenGL.setBasicMatrix(Matrix4f.IDENTITY); // clear background - Color bgColor = new Color(0.0f, 1.0f, 1.0f, 0.75f); + final Color bgColor = new Color(0.0f, 1.0f, 1.0f, 0.75f); OpenGL.enable(OpenGL.Flag.flag_depthTest); OpenGL.clearColor(bgColor); // real clear request: @@ -126,26 +129,30 @@ public class Sample2Application extends GaleApplication { OpenGL.clear(OpenGL.ClearFlag.clearFlag_depthBuffer); // create a local matrix environnement. OpenGL.push(); - + //Matrix4f tmpProjection = Matrix4f.createMatrixOrtho(-getAspectRatio(), getAspectRatio(), -1, 1, -50, 50); - Matrix4f tmpProjection = Matrix4f.createMatrixPerspective(1.30f, getAspectRatio(), 1, 50); + final Matrix4f tmpProjection = Matrix4f.createMatrixPerspective(1.30f, getAspectRatio(), 1, 50); // set internal matrix system: OpenGL.setMatrix(tmpProjection); if (this.oGLprogram == null) { - Log.info("No shader ..."); + LOGGER.info("No shader ..."); return; } //EWOL_DEBUG(" display " + this.coord.size() + " elements" ); this.oGLprogram.use(); - + // set Matrix : translation/positionMatrix - Matrix4f projectionMatrix = tmpProjection; //OpenGL.getMatrix(); + final Matrix4f projectionMatrix = tmpProjection; //OpenGL.getMatrix(); Matrix4f transforamtionMatrix = Matrix4f.IDENTITY; transforamtionMatrix = transforamtionMatrix.multiply(Matrix4f.createMatrixTranslate(new Vector3f(0, 0, -1))); - transforamtionMatrix = transforamtionMatrix.multiply(Matrix4f.createMatrixRotate(new Vector3f(1, 0, 0), this.angleX)); - transforamtionMatrix = transforamtionMatrix.multiply(Matrix4f.createMatrixRotate(new Vector3f(0, 1, 0), this.angleY)); - transforamtionMatrix = transforamtionMatrix.multiply(Matrix4f.createMatrixRotate(new Vector3f(0, 0, 1), this.angleZ)); - Matrix4f viewMatrix = OpenGL.getCameraMatrix().multiply(Matrix4f.createMatrixTranslate(new Vector3f(0, 0, -2))); + transforamtionMatrix = transforamtionMatrix + .multiply(Matrix4f.createMatrixRotate(new Vector3f(1, 0, 0), this.angleX)); + transforamtionMatrix = transforamtionMatrix + .multiply(Matrix4f.createMatrixRotate(new Vector3f(0, 1, 0), this.angleY)); + transforamtionMatrix = transforamtionMatrix + .multiply(Matrix4f.createMatrixRotate(new Vector3f(0, 0, 1), this.angleZ)); + final Matrix4f viewMatrix = OpenGL.getCameraMatrix() + .multiply(Matrix4f.createMatrixTranslate(new Vector3f(0, 0, -2))); //Matrix4f tmpMatrix = projMatrix * camMatrix; this.verticesVBO.bindForRendering(); this.oGLprogram.uniformMatrix(this.oGLMatrixView, viewMatrix); @@ -157,7 +164,7 @@ public class Sample2Application extends GaleApplication { OpenGL.updateAllFlags(); // Request the draw od the elements: this.verticesVBO.render(OpenGL.RenderMode.TRIANGLE); - + this.verticesVBO.unBindForRendering(); this.texture.unBindForRendering(); this.oGLprogram.unUse(); @@ -165,20 +172,29 @@ public class Sample2Application extends GaleApplication { OpenGL.pop(); markDrawingIsNeeded(); } - + @Override - public void onKeyboard(final KeySpecial special, final KeyKeyboard type, final Character value, final KeyStatus state) { - Log.info("Keyboard event: special=" + special); - Log.info(" type=" + type); - Log.info(" value='" + value + "'"); - Log.info(" state=" + state); + public void onKeyboard( + final KeySpecial special, + final KeyKeyboard type, + final Character value, + final KeyStatus state) { + LOGGER.info("Keyboard event: special=" + special); + LOGGER.info(" type=" + type); + LOGGER.info(" value='" + value + "'"); + LOGGER.info(" state=" + state); } - + @Override - public void onPointer(final KeySpecial special, final KeyType type, final int pointerID, final Vector2f pos, final KeyStatus state) { - // Log.info("input event: type=" + type); - // Log.info(" id=" + pointerID); - // Log.info(" pos=" + pos); - // Log.info(" state=" + state); + public void onPointer( + final KeySpecial special, + final KeyType type, + final int pointerID, + final Vector2f pos, + final KeyStatus state) { + // LOGGER.info("input event: type=" + type); + // LOGGER.info(" id=" + pointerID); + // LOGGER.info(" pos=" + pos); + // LOGGER.info(" state=" + state); } } diff --git a/test/src/test/atriasoft/gale/Log.java b/test/src/test/atriasoft/gale/Log.java deleted file mode 100644 index 91c3afa..0000000 --- a/test/src/test/atriasoft/gale/Log.java +++ /dev/null @@ -1,59 +0,0 @@ -package test.atriasoft.gale; - -import org.atriasoft.reggol.LogLevel; -import org.atriasoft.reggol.Logger; - -public class Log { - private static final String LIB_NAME = "gale-test"; - private static final String LIB_NAME_DRAW = Logger.getDrawableName(LIB_NAME); - private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(LIB_NAME, LogLevel.CRITICAL); - private static final boolean PRINT_ERROR = Logger.getNeedPrint(LIB_NAME, LogLevel.ERROR); - private static final boolean PRINT_WARNING = Logger.getNeedPrint(LIB_NAME, LogLevel.WARNING); - private static final boolean PRINT_INFO = Logger.getNeedPrint(LIB_NAME, LogLevel.INFO); - private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LIB_NAME, LogLevel.DEBUG); - private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(LIB_NAME, LogLevel.VERBOSE); - private static final boolean PRINT_TODO = Logger.getNeedPrint(LIB_NAME, LogLevel.TODO); - private static final boolean PRINT_PRINT = Logger.getNeedPrint(LIB_NAME, LogLevel.PRINT); - - private Log() {} - - public static void print(String data) { - if (PRINT_PRINT) - Logger.print(LIB_NAME_DRAW, data); - } - - public static void critical(String data) { - if (PRINT_CRITICAL) - Logger.critical(LIB_NAME_DRAW, data); - } - - public static void error(String data) { - if (PRINT_ERROR) - Logger.error(LIB_NAME_DRAW, data); - } - - public static void warning(String data) { - if (PRINT_WARNING) - Logger.warning(LIB_NAME_DRAW, data); - } - - public static void info(String data) { - if (PRINT_INFO) - Logger.info(LIB_NAME_DRAW, data); - } - - public static void debug(String data) { - if (PRINT_DEBUG) - Logger.debug(LIB_NAME_DRAW, data); - } - - public static void verbose(String data) { - if (PRINT_VERBOSE) - Logger.verbose(LIB_NAME_DRAW, data); - } - - public static void todo(String data) { - if (PRINT_TODO) - Logger.todo(LIB_NAME_DRAW, data); - } -} diff --git a/test/src/test/atriasoft/gale/Log2.java b/test/src/test/atriasoft/gale/Log2.java deleted file mode 100644 index c48509c..0000000 --- a/test/src/test/atriasoft/gale/Log2.java +++ /dev/null @@ -1,18 +0,0 @@ -package test.atriasoft.gale; - -import org.atriasoft.reggol.LogLevel; -import org.atriasoft.reggol.Logger; - -public class Log2 { - private static final String LIB_NAME = "gale-test-2"; - private static final String LIB_NAME_DRAW = Logger.getDrawableName(LIB_NAME); - private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LIB_NAME, LogLevel.DEBUG); - - private Log2() {} - - public static void debug(String data) { - if (PRINT_DEBUG) - Logger.debug(LIB_NAME_DRAW, data); - } - -} diff --git a/test/src/test/atriasoft/gale/TestBasicLog.java b/test/src/test/atriasoft/gale/TestBasicLog.java index 145f028..8b04328 100644 --- a/test/src/test/atriasoft/gale/TestBasicLog.java +++ b/test/src/test/atriasoft/gale/TestBasicLog.java @@ -11,20 +11,18 @@ package test.atriasoft.gale; import java.util.ArrayList; import java.util.List; -import org.atriasoft.reggol.Logger; - -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @TestMethodOrder(OrderAnnotation.class) public class TestBasicLog { - + // JUST keep a kanva ... @Test @Order(1) public void aaFirstInitialisation() { - List args = new ArrayList<>(); + final List args = new ArrayList<>(); args.add("--log-level=999"); args.add("--log-level=1"); args.add("--log-no-color"); @@ -37,66 +35,6 @@ public class TestBasicLog { args.add("--log-lib=sc-log-test"); args.add("--log-with-stupid-parameter=sdkfjsqdlkf"); args.add("--help"); - Logger.init(args); - } - - @Test - @Order(2) - public void bbSecondInitialisation() { - List args = new ArrayList<>(); - Logger.init(args); - } - - @Test - @Order(3) - public void ccBasicLogCall() { - Log.print("Simple print"); - Log.todo("Simple todo"); - Log.error("Simple error"); - Log.warning("Simple warning"); - Log.info("Simple info"); - Log.debug("Simple debug"); - Log.verbose("Simple verbose"); - } - - // TODO REFACTO REMOVE this and set it in the Test of the logger. - public static String getAAAAAAA(int dfsdf) { - int hhh = 0; - for (int kkk = 0; kkk < dfsdf; kkk++) - for (int iii = 0; iii < 10000; iii++) - for (int jjj = 0; jjj < 100000; jjj++) - for (int lll = 0; lll < 100000; lll++) - hhh++; - return "kkk" + hhh; - } - - public static void testLog() { - Log.print("test direct [START]"); - // test de 10 secondes contre 0.0?? second quand le niveau n'est pas assez grand ... - long timeStart = System.currentTimeMillis(); - for (int iii = 0; iii < 100000000; iii++) - Log2.debug("test direct"); - long timeStop = System.currentTimeMillis(); - Log.print("test direct [END] : " + timeStart + " to " + timeStop + " ==> delta=" + (timeStop - timeStart)); - Log.print("test concat [START]"); - // C'est très long dans les 2 cas ... - timeStart = System.currentTimeMillis(); - for (int iii = 0; iii < 6; iii++) - Log2.debug("test concat: non fonctionnel, il applelle le get a chaque log ... " + getAAAAAAA(iii)); - timeStop = System.currentTimeMillis(); - Log.print("test concat [END] : " + timeStart + " to " + timeStop + " ==> delta=" + (timeStop - timeStart)); - } - - @Test - @Order(4) - public void ddTestSimpleLog() { - testLog(); - } - - @Test - @Order(4) - public void eeUsage() { - Logger.usage(); } }