[DEBUG] correct the display bug
This commit is contained in:
parent
438b8aeee4
commit
3664c311ef
12
.classpath
12
.classpath
@ -87,7 +87,17 @@
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-etk">
|
||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/atriasoft-egami">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/atriasoft-etk">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-io-gami">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
|
@ -12,29 +12,24 @@ 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 vecmath;
|
||||
requires transitive org.atriasoft.egami;
|
||||
|
||||
requires transitive org.lwjgl;
|
||||
requires transitive org.lwjgl.natives;
|
||||
requires transitive org.lwjgl.glfw;
|
||||
requires transitive org.lwjgl.glfw.natives;
|
||||
requires transitive org.lwjgl.assimp;
|
||||
requires transitive org.lwjgl.assimp.natives;
|
||||
// requires transitive org.lwjgl.openal;
|
||||
// requires transitive org.lwjgl.openal.natives;
|
||||
requires transitive org.lwjgl.stb;
|
||||
requires transitive org.lwjgl.stb.natives;
|
||||
requires transitive org.lwjgl.jawt;
|
||||
// requires transitive org.lwjgl.opengl.awt;
|
||||
requires transitive org.lwjgl.opengl;
|
||||
requires transitive org.lwjgl.opengl.natives;
|
||||
// requires org.lwjgl.openvr;
|
||||
|
||||
// requires transitive jogamp.fat;
|
||||
|
||||
|
||||
requires transitive java.desktop;
|
||||
requires transitive pngdecoder;
|
||||
requires transitive lwjgl3.awt;
|
||||
requires io.scenarium.logger;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ public class Application {
|
||||
private Uri iconName = null;
|
||||
private final Cursor cursor = Cursor.arrow;
|
||||
private Orientation orientation = Orientation.screenAuto;
|
||||
Vector2f windowsSize = new Vector2f(800, 600);
|
||||
private Vector2f windowsSize = new Vector2f(800, 600);
|
||||
|
||||
public Application() {
|
||||
Log.verbose("Constructor Gale Application");
|
||||
@ -286,6 +286,9 @@ public class Application {
|
||||
* @return
|
||||
*/
|
||||
public void setSize(final Vector2f size) {
|
||||
if (size.x() <= 0 || size.y() <= 0) {
|
||||
Log.error("Wrong windows size: " + size);
|
||||
}
|
||||
this.windowsSize = size;
|
||||
final Context context = Gale.getContext();
|
||||
if (context == null) {
|
||||
|
@ -1,282 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
package org.atriasoft.gale;
|
||||
|
||||
import org.atriasoft.etk.math.Vector2f;
|
||||
import org.atriasoft.etk.math.Vector2i;
|
||||
import org.atriasoft.gale.internal.Log;
|
||||
|
||||
/**
|
||||
* in the dimension class we store the data as the more usefull unit (pixel)
|
||||
* but one case need to be dynamic the %, then when requested in % the register the % value
|
||||
*/
|
||||
@SuppressWarnings("preview")
|
||||
public record Dimension(
|
||||
Vector2f size,
|
||||
Distance type) {
|
||||
public static final Dimension ZERO = new Dimension(Vector2f.ZERO, Distance.PIXEL);
|
||||
private static Vector2f ratio = new Vector2f(9999999, 888888);
|
||||
private static Vector2f invRatio = new Vector2f(1, 1);
|
||||
private static Dimension windowsSize = new Dimension(Vector2f.MAX_VALUE, Distance.PIXEL);
|
||||
|
||||
public static final float INCH_TO_MILLIMETER = 1.0f / 25.4f;
|
||||
public static final float FOOT_TO_MILLIMETER = 1.0f / 304.8f;
|
||||
public static final float METER_TO_MILLIMETER = 1.0f / 1000.0f;
|
||||
public static final float CENTIMETER_TO_MILLIMETER = 1.0f / 10.0f;
|
||||
public static final float KILOMETER_TO_MILLIMETER = 1.0f / 1000000.0f;
|
||||
public static final float MILLIMETER_TO_INCH = 25.4f;
|
||||
public static final float MILLIMETER_TO_FOOT = 304.8f;
|
||||
public static final float MILLIMETER_TO_METER = 1000.0f;
|
||||
public static final float MILLIMETER_TO_CENTIMETER = 10.0f;
|
||||
public static final float MILLIMETER_TO_KILOMETER = 1000000.0f;
|
||||
/**
|
||||
* basic init
|
||||
*/
|
||||
static {
|
||||
final Dimension conversion = new Dimension(new Vector2f(72, 72), Distance.INCH);
|
||||
ratio = conversion.getMillimeter();
|
||||
invRatio = new Vector2f(1.0f / ratio.x(), 1.0f / ratio.y());
|
||||
windowsSize = new Dimension(new Vector2f(200, 200), Distance.PIXEL);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the Windows diagonal size in the request unit
|
||||
* @param type Unit type requested.
|
||||
* @return the requested size
|
||||
*/
|
||||
public static float getWindowsDiag(final Distance type) {
|
||||
final Vector2f size = getWindowsSize(type);
|
||||
return size.length();
|
||||
}
|
||||
|
||||
/**
|
||||
* get the Windows size in the request unit
|
||||
* @param type Unit type requested.
|
||||
* @return the requested size
|
||||
*/
|
||||
public static Vector2f getWindowsSize(final Distance type) {
|
||||
return windowsSize.get(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* set the Milimeter ratio for calculation
|
||||
* @param ratio Milimeter ration for the screen calculation interpolation
|
||||
* @param type Unit type requested.
|
||||
* @note: same as @ref setPixelPerInch (internal manage convertion)
|
||||
*/
|
||||
public static void setPixelRatio(final Vector2f ratio, final Distance type) {
|
||||
Log.info("Set a new screen ratio for the screen : ratio=" + ratio + " type=" + type);
|
||||
final Dimension conversion = new Dimension(ratio, type);
|
||||
Log.info(" == > " + conversion);
|
||||
Dimension.ratio = conversion.getMillimeter();
|
||||
invRatio = new Vector2f(1.0f / Dimension.ratio.x(), 1.0f / Dimension.ratio.y());
|
||||
Log.info("Set a new screen ratio for the screen : ratioMm=" + Dimension.ratio);
|
||||
}
|
||||
|
||||
/**
|
||||
* set the current Windows size
|
||||
* @param size size of the current windows in pixel.
|
||||
*/
|
||||
public static void setPixelWindowsSize(final Vector2f size) {
|
||||
windowsSize = new Dimension(size);
|
||||
Log.verbose("Set a new Windows property size " + windowsSize + "px");
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor (default :0,0 mode pixel)
|
||||
*/
|
||||
public Dimension() {
|
||||
this(Vector2f.ZERO, Distance.PIXEL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param size Requested dimension
|
||||
*/
|
||||
public Dimension(final Vector2f size) {
|
||||
this(size, Distance.PIXEL);
|
||||
}
|
||||
|
||||
public Dimension(final Vector2f size, final Distance type) {
|
||||
this.size = size;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in requested type
|
||||
* @param type Type of unit requested.
|
||||
* @return dimension requested.
|
||||
*/
|
||||
public Vector2f get(final Distance type) {
|
||||
return switch (type) {
|
||||
case POURCENT -> getPourcent();
|
||||
case PIXEL -> getPixel();
|
||||
case METER -> getMeter();
|
||||
case CENTIMETER -> getCentimeter();
|
||||
case MILLIMETER -> getMillimeter();
|
||||
case KILOMETER -> getKilometer();
|
||||
case INCH -> getInch();
|
||||
case FOOT -> getFoot();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Centimeter
|
||||
* @return dimension in Centimeter
|
||||
*/
|
||||
public Vector2f getCentimeter() {
|
||||
return getMillimeter().multiply(MILLIMETER_TO_CENTIMETER);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Foot
|
||||
* @return dimension in Foot
|
||||
*/
|
||||
public Vector2f getFoot() {
|
||||
return getMillimeter().multiply(MILLIMETER_TO_FOOT);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Inch
|
||||
* @return dimension in Inch
|
||||
*/
|
||||
public Vector2f getInch() {
|
||||
return getMillimeter().multiply(MILLIMETER_TO_INCH);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Kilometer
|
||||
* @return dimension in Kilometer
|
||||
*/
|
||||
public Vector2f getKilometer() {
|
||||
return getMillimeter().multiply(MILLIMETER_TO_KILOMETER);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Meter
|
||||
* @return dimension in Meter
|
||||
*/
|
||||
public Vector2f getMeter() {
|
||||
return getMillimeter().multiply(MILLIMETER_TO_METER);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Millimeter
|
||||
* @return dimension in Millimeter
|
||||
*/
|
||||
public Vector2f getMillimeter() {
|
||||
return new Vector2f(getPixel().x() * invRatio.x(), getPixel().y() * invRatio.y());
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in pixel
|
||||
* @return dimension in Pixel
|
||||
*/
|
||||
public Vector2f getPixel() {
|
||||
if (this.type != Distance.POURCENT) {
|
||||
return this.size;
|
||||
}
|
||||
final Vector2f windDim = windowsSize.getPixel();
|
||||
final Vector2f res = new Vector2f(windDim.x() * this.size.x(), windDim.y() * this.size.y());
|
||||
//GALE_DEBUG("Get % : " + m_data + " / " + windDim + " == > " + res);
|
||||
return res;
|
||||
}
|
||||
|
||||
public Vector2i getPixeli() {
|
||||
if (this.type != Distance.POURCENT) {
|
||||
return new Vector2i((int) this.size.x(), (int) this.size.y());
|
||||
}
|
||||
final Vector2f windDim = windowsSize.getPixel();
|
||||
final Vector2i res = new Vector2i((int) (windDim.x() * this.size.x()), (int) (windDim.y() * this.size.y()));
|
||||
//GALE_DEBUG("Get % : " + m_data + " / " + windDim + " == > " + res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current dimension in Pourcent
|
||||
* @return dimension in Pourcent
|
||||
*/
|
||||
public Vector2f getPourcent() {
|
||||
if (this.type != Distance.POURCENT) {
|
||||
final Vector2f windDim = windowsSize.getPixel();
|
||||
//GALE_DEBUG(" windows dimension : " /*+ windowsSize*/ + " == > " + windDim + "px"); // ==> infinite loop ...
|
||||
//printf(" windows dimension : %f,%f", windDim.x(),windDim.y());
|
||||
//printf(" data : %f,%f", m_data.x(),m_data.y());
|
||||
return new Vector2f((this.size.x() / windDim.x()) * 100.0f, (this.size.y() / windDim.y()) * 100.0f);
|
||||
}
|
||||
return new Vector2f(this.size.x() * 100.0f, this.size.y() * 100.0f);
|
||||
};
|
||||
|
||||
/**
|
||||
* get the dimension type
|
||||
* @return the type
|
||||
*/
|
||||
public Distance getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the current dimension in requested type
|
||||
* @param config dimension configuration.
|
||||
*/
|
||||
public static Dimension valueOf(String config) {
|
||||
final Vector2f size = Vector2f.ZERO;
|
||||
Distance type = Distance.PIXEL;
|
||||
if (config.endsWith("%")) {
|
||||
type = Distance.POURCENT;
|
||||
config = config.substring(0, config.length() - 1);
|
||||
} else if (config.endsWith("px")) {
|
||||
type = Distance.PIXEL;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("ft")) {
|
||||
type = Distance.FOOT;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("in")) {
|
||||
type = Distance.INCH;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("km")) {
|
||||
type = Distance.KILOMETER;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("mm")) {
|
||||
type = Distance.MILLIMETER;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("cm")) {
|
||||
type = Distance.CENTIMETER;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else if (config.endsWith("m")) {
|
||||
type = Distance.METER;
|
||||
config = config.substring(0, config.length() - 1);
|
||||
} else {
|
||||
Log.critical("Can not parse dimension : '" + config + "'");
|
||||
return null;
|
||||
}
|
||||
final Vector2f tmp = Vector2f.valueOf(config);
|
||||
final Dimension ret = new Dimension(tmp, type);
|
||||
Log.verbose(" config dimension : '" + config + "' == > " + ret.toString());
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* string cast :
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = get(getType()).toString();
|
||||
switch (getType()) {
|
||||
case POURCENT -> str += "%";
|
||||
case PIXEL -> str += "px";
|
||||
case METER -> str += "m";
|
||||
case CENTIMETER -> str += "cm";
|
||||
case MILLIMETER -> str += "mm";
|
||||
case KILOMETER -> str += "km";
|
||||
case INCH -> str += "in";
|
||||
case FOOT -> str += "ft";
|
||||
default -> str += "";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package org.atriasoft.gale;
|
||||
|
||||
public enum Distance {
|
||||
POURCENT,
|
||||
PIXEL,
|
||||
METER,
|
||||
CENTIMETER,
|
||||
MILLIMETER,
|
||||
KILOMETER,
|
||||
INCH,
|
||||
FOOT;
|
||||
}
|
@ -41,9 +41,7 @@ public class OpenGL {
|
||||
|
||||
// We map all the flag, but not all is supported by all platform...
|
||||
public static enum Flag {
|
||||
flag_blend, // !< If enabled, blend the computed fragment color values with the values in
|
||||
// the color buffers.
|
||||
// See glBlendFunc.
|
||||
flag_blend, // !< If enabled, blend the computed fragment color values with the values in the color buffers. See glBlendFunc.
|
||||
flag_clipDistanceI, // !< If enabled, clip geometry against user-defined half space i.
|
||||
flag_colorLogigOP, // !< If enabled, apply the currently selected logical operation to the computed
|
||||
// fragment color and color buffer values. See glLogicOp.
|
||||
@ -62,10 +60,8 @@ public class OpenGL {
|
||||
// glDepthRange.
|
||||
flag_depthTest, // !< If enabled, do depth comparisons and update the depth buffer. Note that
|
||||
// even if the depth buffer exists and the depth mask is non-zero, the depth
|
||||
// buffer is not updated if the depth test is disabled. See glDepthFunc and
|
||||
// glDepthRange.
|
||||
flag_dither, // !< If enabled, dither color components or indices before they are written to
|
||||
// the color buffer.
|
||||
// buffer is not updated if the depth test is disabled. See glDepthFunc and glDepthRange.
|
||||
flag_dither, // !< If enabled, dither color components or indices before they are written to the color buffer.
|
||||
flag_framebufferSRGB, // !< If enabled and the value of GLFRAMEBUFFERATTACHMENTCOLORENCODING for the
|
||||
// framebuffer attachment corresponding to the destination buffer is GLSRGB, the
|
||||
// R, G, and B destination color values (after conversion from fixed-point to
|
||||
@ -438,6 +434,10 @@ public class OpenGL {
|
||||
GL11.glDrawElements(CONVERT_RENDER_MODE.get(mode), vertexCount, GL11.GL_UNSIGNED_INT, 0);
|
||||
}
|
||||
|
||||
public static void drawTriangleRed(final Vector3f aaa, final Vector3f bbb, final Vector3f ccc) {
|
||||
GL11.glFinish();
|
||||
}
|
||||
|
||||
/**
|
||||
* enable a flag on the system
|
||||
* @param flagID The flag requested
|
||||
@ -526,7 +526,11 @@ public class OpenGL {
|
||||
}
|
||||
|
||||
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.wrap(data);
|
||||
final ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length);
|
||||
for (int iii = 0; iii < data.length; iii++) {
|
||||
dataBuffer.put(data[iii]);
|
||||
}
|
||||
dataBuffer.flip();
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, internalFormat, width, height, border, format, sizeObject, dataBuffer);
|
||||
}
|
||||
|
||||
@ -535,7 +539,11 @@ public class OpenGL {
|
||||
}
|
||||
|
||||
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.wrap(data);
|
||||
final ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length);
|
||||
for (int iii = 0; iii < data.length; iii++) {
|
||||
dataBuffer.put(data[iii]);
|
||||
}
|
||||
dataBuffer.flip();
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, xOffset, yOffset, width, height, format, sizeObject, dataBuffer);
|
||||
}
|
||||
|
||||
|
@ -57,7 +57,7 @@ public abstract class Context {
|
||||
private final Fps fpsSystemContext = new Fps("SystemContext", this.displayFps);
|
||||
private final Fps fpsSystem = new Fps("System", this.displayFps);
|
||||
private final Fps fpsFlush = new Fps("Flush", this.displayFps);
|
||||
protected Vector2f windowsSize = new Vector2f(0, 0); //!< current size of the system
|
||||
protected Vector2f windowsSize = Vector2f.ZERO; //!< current size of the system
|
||||
protected boolean fullscreen = false;
|
||||
protected Vector2f windowsPos; //!< current size of the system
|
||||
|
||||
@ -155,6 +155,9 @@ public abstract class Context {
|
||||
if (this.application == null) {
|
||||
return;
|
||||
}
|
||||
if (this.windowsSize == Vector2f.ZERO) {
|
||||
return;
|
||||
}
|
||||
this.application.onResize(this.windowsSize);
|
||||
}
|
||||
|
||||
@ -615,16 +618,20 @@ public abstract class Context {
|
||||
* Processing all the event arrived ... (commoly called in draw function)
|
||||
*/
|
||||
public void processEvents() {
|
||||
int nbEvent = 0;
|
||||
//Log.debug(" ******** Event " << this.msgSystem.count());
|
||||
while (this.msgSystem.size() > 0) {
|
||||
nbEvent++;
|
||||
//Log.verbose(" [" << nbEvent << "] event ...");
|
||||
final ActionToDoInAsyncLoop func = getAction();
|
||||
if (func == null) {
|
||||
continue;
|
||||
try {
|
||||
int nbEvent = 0;
|
||||
//Log.debug(" ******** Event " << this.msgSystem.count());
|
||||
while (this.msgSystem.size() > 0) {
|
||||
nbEvent++;
|
||||
//Log.verbose(" [" << nbEvent << "] event ...");
|
||||
final ActionToDoInAsyncLoop func = getAction();
|
||||
if (func == null) {
|
||||
continue;
|
||||
}
|
||||
func.run(this);
|
||||
}
|
||||
func.run(this);
|
||||
} catch (Exception e) {
|
||||
Log.critical("Catch exception in main event Loop ...", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,8 @@ import java.util.List;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import io.scenarium.logger.Logger;
|
||||
|
||||
import org.atriasoft.etk.Uri;
|
||||
import org.atriasoft.etk.math.Vector2f;
|
||||
import org.atriasoft.gale.Application;
|
||||
@ -173,6 +175,9 @@ public class ContextLWJGLAWT extends Context implements MouseListener, MouseMoti
|
||||
}
|
||||
operatingSystemDraw(true);
|
||||
swapBuffers();
|
||||
if (Logger.isCriticalOccured()) {
|
||||
ContextLWJGLAWT.this.frame.dispose();
|
||||
}
|
||||
}
|
||||
}, BorderLayout.CENTER);
|
||||
this.frame.pack();
|
||||
|
@ -14,47 +14,62 @@ public class Log {
|
||||
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 todo(String data) {
|
||||
if (PRINT_TODO)
|
||||
Logger.todo(LIB_NAME_DRAW, data);
|
||||
}
|
||||
|
||||
public static void critical(String data) {
|
||||
if (PRINT_CRITICAL)
|
||||
|
||||
public static void critical(final 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 critical(final String data, final Exception e) {
|
||||
e.printStackTrace();
|
||||
if (PRINT_CRITICAL) {
|
||||
Logger.critical(LIB_NAME_DRAW, data + " : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
public static void debug(final String data) {
|
||||
if (PRINT_DEBUG) {
|
||||
Logger.debug(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void verbose(String data) {
|
||||
if (PRINT_VERBOSE)
|
||||
|
||||
public static void error(final String data) {
|
||||
if (PRINT_ERROR) {
|
||||
Logger.error(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void info(final String data) {
|
||||
if (PRINT_INFO) {
|
||||
Logger.info(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void print(final String data) {
|
||||
if (PRINT_PRINT) {
|
||||
Logger.print(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void todo(final String data) {
|
||||
if (PRINT_TODO) {
|
||||
Logger.todo(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void verbose(final String data) {
|
||||
if (PRINT_VERBOSE) {
|
||||
Logger.verbose(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void warning(final String data) {
|
||||
if (PRINT_WARNING) {
|
||||
Logger.warning(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
private Log() {}
|
||||
|
||||
}
|
||||
|
@ -141,22 +141,24 @@ public class ResourceManager {
|
||||
* 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
|
||||
*/
|
||||
public synchronized void update(final Resource object) {
|
||||
// check if not added before
|
||||
for (final Resource it : this.resourceListToUpdate) {
|
||||
if (it == object) {
|
||||
// just prevent some double add ...
|
||||
return;
|
||||
public void update(final Resource object) {
|
||||
synchronized (this.resourceListToUpdate) {
|
||||
// check if not added before
|
||||
for (final Resource it : this.resourceListToUpdate) {
|
||||
if (it == object) {
|
||||
// just prevent some double add ...
|
||||
return;
|
||||
}
|
||||
}
|
||||
// add it ...
|
||||
this.resourceListToUpdate.add(object);
|
||||
}
|
||||
// add it ...
|
||||
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 synchronized void updateContext() {
|
||||
public void updateContext() {
|
||||
if (this.exiting) {
|
||||
Log.error("Request update after application EXIT ...");
|
||||
return;
|
||||
@ -165,7 +167,9 @@ public class ResourceManager {
|
||||
if (this.contextHasBeenRemoved) {
|
||||
// need to update all ...
|
||||
this.contextHasBeenRemoved = false;
|
||||
this.resourceListToUpdate.clear();
|
||||
synchronized (this.resourceListToUpdate) {
|
||||
this.resourceListToUpdate.clear();
|
||||
}
|
||||
synchronized (this.resourceList) {
|
||||
if (this.resourceList.size() != 0) {
|
||||
for (long jjj = 0; jjj < MAX_RESOURCE_LEVEL; jjj++) {
|
||||
@ -175,7 +179,9 @@ public class ResourceManager {
|
||||
//Log.debug("Update context named : " + lresourceList[iii].getName());
|
||||
if (!it.updateContext()) {
|
||||
// Lock error ==> postponned
|
||||
this.resourceListToUpdate.add(it);
|
||||
synchronized (this.resourceListToUpdate) {
|
||||
this.resourceListToUpdate.add(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class ProgAttributeElement {
|
||||
|
||||
public class ResourceProgram extends Resource {
|
||||
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();
|
||||
@ -44,14 +44,14 @@ public class ResourceProgram extends 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 FloatBuffer storeDataInFloatBufferColor(final List<Color> data) {
|
||||
final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.size() * 4);
|
||||
for (int iii = 0; iii < data.size(); iii++) {
|
||||
@ -63,7 +63,7 @@ public class ResourceProgram extends Resource {
|
||||
buffer.flip();
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
public static FloatBuffer storeDataInFloatBufferVector3f(final List<Vector3f> data) {
|
||||
final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.size() * 3);
|
||||
for (int iii = 0; iii < data.size(); iii++) {
|
||||
@ -74,12 +74,12 @@ public class ResourceProgram extends Resource {
|
||||
buffer.flip();
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
private boolean exist = false; // !< the file existed
|
||||
private int program = 0; // !< openGL id of the current program
|
||||
private ResourceShader shaderVertex = null;
|
||||
private ResourceShader shaderFragment = null;
|
||||
|
||||
|
||||
private final List<ProgAttributeElement> elementList = new ArrayList<>(); // !< List of all the attribute requested
|
||||
// by the user
|
||||
private final List<Integer> listOfVBOUsed = new ArrayList<>(); // !< retain the list of VBO used to disable it when
|
||||
@ -88,7 +88,7 @@ public class ResourceProgram extends Resource {
|
||||
// current shader
|
||||
private boolean hasTexture1 = false; // !< A texture has been set to the
|
||||
// current shader
|
||||
|
||||
|
||||
/**
|
||||
* Contructor of an opengl Program.
|
||||
* @param uriVertexShader Uri of the file
|
||||
@ -118,14 +118,14 @@ public class ResourceProgram extends Resource {
|
||||
getManager().update(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void bindAttribute(final int attribute, final String variableName) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
OpenGL.programBindAttribute(this.program, attribute, variableName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check If an Id is valid in the shader or not (sometime the shader have
|
||||
* not some attribute, then we need to display some error)
|
||||
@ -138,7 +138,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
return this.elementList.get(idElem).isLinked;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Destructor, remove the current Program.
|
||||
*/
|
||||
@ -157,7 +157,7 @@ public class ResourceProgram extends Resource {
|
||||
this.hasTexture = false;
|
||||
this.hasTexture1 = false;
|
||||
}
|
||||
|
||||
|
||||
private float[] convertInFloat(final List<Vector3f> data) {
|
||||
final float[] out = new float[data.size() * 3];
|
||||
for (int iii = 0; iii < data.size(); iii++) {
|
||||
@ -167,7 +167,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
// private void storeDataInAttributeList(int attributeNumber, int
|
||||
// coordinateSize, float[] data) {
|
||||
// int vboID = GL15.glGenBuffers();
|
||||
@ -179,7 +179,7 @@ public class ResourceProgram extends Resource {
|
||||
// false, 0, 0);
|
||||
// GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
* User request an attribute on this program.
|
||||
* @note The attribute is send to the fragment shaders
|
||||
@ -205,12 +205,10 @@ 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);
|
||||
Log.warning(" {" + 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);
|
||||
Log.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetAttribLocation(\"" + tmp.name + "\") = " + tmp.elementId);
|
||||
}
|
||||
} else {
|
||||
// program is not loaded ==> just local reister ...
|
||||
@ -220,7 +218,7 @@ public class ResourceProgram extends Resource {
|
||||
this.elementList.add(tmp);
|
||||
return this.elementList.size() - 1;
|
||||
}
|
||||
|
||||
|
||||
// public void sendAttribute(int idElem, etk::Vector<etk::Color<float>> data) {
|
||||
// sendAttribute(idElem, 4/*r,g,b,a*/, data[0]);
|
||||
// }
|
||||
@ -253,12 +251,10 @@ 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);
|
||||
Log.warning(" {" + 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);
|
||||
Log.debug(" {" + this.program + "}[" + this.elementList.size() + "] glGetUniformLocation(\"" + tmp.name + "\") = " + tmp.elementId);
|
||||
}
|
||||
} else {
|
||||
// program is not loaded ==> just local reister ...
|
||||
@ -268,7 +264,7 @@ public class ResourceProgram extends Resource {
|
||||
this.elementList.add(tmp);
|
||||
return this.elementList.size() - 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Relode the shader from the file. used when a request of resouces
|
||||
* reload is done.
|
||||
@ -295,7 +291,7 @@ public class ResourceProgram extends Resource {
|
||||
removeContext();
|
||||
updateContext();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* remove the data from the opengl context.
|
||||
*/
|
||||
@ -311,18 +307,18 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Special android spec! It inform us that all context is removed and
|
||||
* after notify us...
|
||||
*/
|
||||
@Override
|
||||
public void removeContextToLate() {
|
||||
|
||||
|
||||
this.exist = false;
|
||||
this.program = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send attribute table to the specified ID attribute (not send if does
|
||||
* not really exist in the openGL program).
|
||||
@ -367,8 +363,7 @@ public class ResourceProgram extends Resource {
|
||||
// public void sendAttribute(int idElem, List<Vector3f> 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;
|
||||
}
|
||||
@ -382,14 +377,13 @@ public class ResourceProgram extends Resource {
|
||||
// GL40.glBindVertexArray(this.elementList.get(idElem).elementId);
|
||||
// Log.error("[" + this.elementList.get(idElem).name + "] send " + 3 + "
|
||||
// element");
|
||||
GL40.glVertexAttribPointer(this.elementList.get(idElem).elementId, nbElement, GL40.GL_FLOAT, false,
|
||||
jumpBetweenSample * 4, /* 4 is the size of float in the generic system... */
|
||||
GL40.glVertexAttribPointer(this.elementList.get(idElem).elementId, nbElement, GL40.GL_FLOAT, false, jumpBetweenSample * 4, /* 4 is the size of float in the generic system... */
|
||||
data);
|
||||
// checkGlError("glVertexAttribPointer", LINE, idElem);
|
||||
GL40.glEnableVertexAttribArray(this.elementList.get(idElem).elementId);
|
||||
// checkGlError("glEnableVertexAttribArray", LINE, idElem);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send attribute table to the spefified ID attribure (not send if does
|
||||
* not really exist in the openGL program).
|
||||
@ -448,9 +442,8 @@ public class ResourceProgram extends Resource {
|
||||
if (!this.elementList.get(idElem).isLinked) {
|
||||
return;
|
||||
}
|
||||
|
||||
Log.verbose("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(index) + " VBOindex="
|
||||
+ index);
|
||||
|
||||
Log.verbose("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(index) + " VBOindex=" + index);
|
||||
GL20.glBindBuffer(GL20.GL_ARRAY_BUFFER, vbo.getOpenGlId(index));
|
||||
// checkGlError("glBindBuffer", __LINE__, _idElem);
|
||||
Log.verbose(" id=" + this.elementList.get(idElem).elementId);
|
||||
@ -467,7 +460,7 @@ public class ResourceProgram extends Resource {
|
||||
this.listOfVBOUsed.add(this.elementList.get(idElem).elementId);
|
||||
// checkGlError("glEnableVertexAttribArray", __LINE__, _idElem);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* set the testure Id on the specify uniform element.
|
||||
* @param idElem Id of the uniform that might be sended.
|
||||
@ -490,7 +483,7 @@ public class ResourceProgram extends Resource {
|
||||
uniformInt(this.elementList.get(idElem).elementId, /* GLTEXTURE */0);
|
||||
this.hasTexture = true;
|
||||
}
|
||||
|
||||
|
||||
public void setTexture1(final int idElem, final int textureOpenGlID) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -508,7 +501,7 @@ public class ResourceProgram extends Resource {
|
||||
uniformInt(this.elementList.get(idElem).elementId, /* GLTEXTURE */0);
|
||||
this.hasTexture1 = true;
|
||||
}
|
||||
|
||||
|
||||
public void uniformColor(final int idElem, final Color value) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -522,7 +515,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformColor(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)
|
||||
@ -542,7 +535,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformFloat(this.elementList.get(idElem).elementId, value1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 2 float uniform element to the spefified ID (not send if does not
|
||||
* really exist in the openGL program)
|
||||
@ -551,7 +544,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value2 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformFloat(final int idElem, final float value1, final float value2) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -564,7 +557,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformFloat(this.elementList.get(idElem).elementId, value1, value2);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 3 float uniform element to the spefified ID (not send if does not
|
||||
* really exist in the openGL program)
|
||||
@ -574,7 +567,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value3 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformFloat(final int idElem, final float value1, final float value2, final float value3) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -587,7 +580,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformFloat(this.elementList.get(idElem).elementId, value1, value2, value3);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 4 float uniform element to the spefified ID (not send if does not
|
||||
* really exist in the openGL program)
|
||||
@ -597,9 +590,8 @@ 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;
|
||||
}
|
||||
@ -612,7 +604,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformFloat(this.elementList.get(idElem).elementId, value1, value2, value3, value4);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 1 signed integer uniform element to the spefified ID (not send if
|
||||
* does not really exist in the openGL program)
|
||||
@ -620,7 +612,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value1 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformInt(final int idElem, final int value1) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -633,7 +625,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformInt(this.elementList.get(idElem).elementId, value1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 2 signed integer uniform element to the spefified ID (not send if
|
||||
* does not really exist in the openGL program)
|
||||
@ -642,7 +634,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value2 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformInt(final int idElem, final int value1, final int value2) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -655,7 +647,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformInt(this.elementList.get(idElem).elementId, value1, value2);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 3 signed integer uniform element to the spefified ID (not send if
|
||||
* does not really exist in the openGL program)
|
||||
@ -665,7 +657,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value3 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformInt(final int idElem, final int value1, final int value2, final int value3) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -678,7 +670,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformInt(this.elementList.get(idElem).elementId, value1, value2, value3);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send 4 signed integer uniform element to the spefified ID (not send if
|
||||
* does not really exist in the openGL program)
|
||||
@ -689,7 +681,7 @@ public class ResourceProgram extends Resource {
|
||||
* @param value4 Value to send at the Uniform
|
||||
*/
|
||||
public void uniformInt(final int idElem, final int value1, final int value2, final int value3, final int value4) {
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -702,7 +694,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformInt(this.elementList.get(idElem).elementId, value1, value2, value3, value4);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send a uniform element to the spefified ID (not send if does not
|
||||
* really exist in the openGL program)
|
||||
@ -715,7 +707,7 @@ public class ResourceProgram extends Resource {
|
||||
public void uniformMatrix(final int idElem, final Matrix4f matrix) {
|
||||
uniformMatrix(idElem, matrix, true);
|
||||
}
|
||||
|
||||
|
||||
public void uniformMatrix(final int idElem, final Matrix4f matrix, final boolean transpose/* =true */) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -738,7 +730,7 @@ 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;
|
||||
@ -752,7 +744,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformVector(this.elementList.get(idElem).elementId, value);
|
||||
}
|
||||
|
||||
|
||||
public void uniformVector(final int idElem, final Vector2i value) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -766,7 +758,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformVector(this.elementList.get(idElem).elementId, value);
|
||||
}
|
||||
|
||||
|
||||
public void uniformVector(final int idElem, final Vector3f value) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -780,7 +772,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformVector(this.elementList.get(idElem).elementId, value);
|
||||
}
|
||||
|
||||
|
||||
public void uniformVector(final int idElem, final Vector3i value) {
|
||||
if (!this.exist) {
|
||||
return;
|
||||
@ -794,13 +786,13 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
OpenGL.programLoadUniformVector(this.elementList.get(idElem).elementId, value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Stop the processing of this program
|
||||
*/
|
||||
public void unUse() {
|
||||
// Log.verbose("Will UN-use program : " + this.program);
|
||||
|
||||
|
||||
if (!this.exist) {
|
||||
return;
|
||||
}
|
||||
@ -811,7 +803,7 @@ public class ResourceProgram extends Resource {
|
||||
// no need to disable program == > this only generate perturbation on speed ...
|
||||
OpenGL.programUse(-1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This load/reload the data in the opengl context, needed when removed
|
||||
* previously.
|
||||
@ -834,13 +826,12 @@ public class ResourceProgram extends Resource {
|
||||
if (this.shaderFragment != null) {
|
||||
OpenGL.programAttach(this.program, this.shaderFragment.getGLID());
|
||||
}
|
||||
|
||||
|
||||
OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_POSITIONS, "in_position");
|
||||
OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES,
|
||||
"tin_extureCoords");
|
||||
OpenGL.programBindAttribute(this.program, ResourceVirtualArrayObject.INDICE_VBO_TEXTURE_COORDINATES, "tin_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 + "'");
|
||||
OpenGL.programRemove(this.program);
|
||||
@ -853,23 +844,19 @@ 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);
|
||||
Log.warning(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name + "\") = " + it.elementId);
|
||||
it.isLinked = false;
|
||||
} else {
|
||||
Log.debug(" {" + this.program + "}[" + iii + "] openGL::getAttributeLocation(\"" + it.name
|
||||
+ "\") = " + it.elementId);
|
||||
Log.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);
|
||||
Log.warning(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + "\") = " + it.elementId);
|
||||
it.isLinked = false;
|
||||
} else {
|
||||
Log.debug(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name
|
||||
+ "\") = " + it.elementId);
|
||||
Log.debug(" {" + this.program + "}[" + iii + "] openGL::getUniformLocation(\"" + it.name + "\") = " + it.elementId);
|
||||
}
|
||||
}
|
||||
iii++;
|
||||
@ -879,7 +866,7 @@ public class ResourceProgram extends Resource {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Request the processing of this program
|
||||
*/
|
||||
@ -889,5 +876,5 @@ public class ResourceProgram extends Resource {
|
||||
// display ...
|
||||
OpenGL.programUse(this.program);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ package org.atriasoft.gale.resource;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.atriasoft.egami.Image;
|
||||
import org.atriasoft.etk.Uri;
|
||||
import org.atriasoft.etk.math.Vector2f;
|
||||
import org.atriasoft.etk.math.Vector2i;
|
||||
import org.atriasoft.gale.backend3d.OpenGL;
|
||||
import org.atriasoft.gale.internal.Log;
|
||||
@ -48,8 +48,30 @@ public class ResourceTexture extends Resource {
|
||||
}
|
||||
resource = new ResourceTexture(uriTexture, textureUnit);
|
||||
final ImageRawData decodedData = ImageLoader.decodePngFile(uriTexture);
|
||||
resource.setTexture(decodedData.getBuffer(), new Vector2i(decodedData.getWidth(), decodedData.getHeight()), (decodedData.isHasAlpha() ? TextureColorMode.rgba : TextureColorMode.rgb),
|
||||
textureUnit);
|
||||
Image img = new Image(decodedData.getWidth(), decodedData.getHeight());
|
||||
ByteBuffer mlklmklm = decodedData.getBuffer();
|
||||
byte[] elemData = new byte[mlklmklm.remaining()];
|
||||
mlklmklm.get(elemData);
|
||||
if (decodedData.isHasAlpha()) {
|
||||
for (int yyy = 0; yyy < decodedData.getHeight(); yyy++) {
|
||||
for (int xxx = 0; xxx < decodedData.getWidth(); xxx++) {
|
||||
img.setR(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 4 + 0]);
|
||||
img.setG(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 4 + 1]);
|
||||
img.setB(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 4 + 2]);
|
||||
img.setA(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 4 + 3]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int yyy = 0; yyy < decodedData.getHeight(); yyy++) {
|
||||
for (int xxx = 0; xxx < decodedData.getWidth(); xxx++) {
|
||||
img.setA(xxx, yyy, 0xFF);
|
||||
img.setR(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 3 + 0]);
|
||||
img.setG(xxx, yyy, elemData[(yyy * decodedData.getWidth() + xxx) * 3 + 1]);
|
||||
img.setB(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.flush();
|
||||
return resource;
|
||||
}
|
||||
@ -73,34 +95,26 @@ public class ResourceTexture extends Resource {
|
||||
|
||||
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 Vector2f endPointSize = new Vector2f(-1, -1);
|
||||
protected Vector2i endPointSize = new Vector2i(-1, -1);
|
||||
// internal state of the openGl system.
|
||||
protected boolean loaded = false;
|
||||
// Image properties:
|
||||
// pointer on the image data.
|
||||
private ByteBuffer data = null;
|
||||
//private ByteBuffer data = null;
|
||||
protected Image data = new Image(32, 32);
|
||||
// size of the image data.
|
||||
private Vector2i size = new Vector2i(-1, -1);
|
||||
//!< Color space of the image.
|
||||
private TextureColorMode dataColorSpace = TextureColorMode.rgb;
|
||||
// number of lines and colomns in the texture (multiple texturing in a single texture)
|
||||
private int textureUnit = 0;
|
||||
private String filename = "";
|
||||
|
||||
protected ResourceTexture() {
|
||||
super();
|
||||
}
|
||||
|
||||
// Public API:
|
||||
protected ResourceTexture(final String filename, final int textureUnit) {
|
||||
super(filename + "__" + textureUnit);
|
||||
this.filename = filename;
|
||||
this.textureUnit = textureUnit;
|
||||
}
|
||||
|
||||
protected ResourceTexture(final Uri filename, final int textureUnit) {
|
||||
super(filename + "__" + textureUnit);
|
||||
this.filename = filename.get();
|
||||
super(filename.toString() + "__" + textureUnit);
|
||||
this.textureUnit = textureUnit;
|
||||
}
|
||||
|
||||
@ -136,7 +150,7 @@ public class ResourceTexture extends Resource {
|
||||
return this.texId;
|
||||
}
|
||||
|
||||
public Vector2f getUsableSize() {
|
||||
public Vector2i getUsableSize() {
|
||||
return this.endPointSize;
|
||||
}
|
||||
|
||||
@ -157,11 +171,11 @@ public class ResourceTexture extends Resource {
|
||||
this.texId = -1;
|
||||
}
|
||||
|
||||
public void setTexture(final ByteBuffer data, final Vector2i size, final TextureColorMode dataColorSpace, final int textureUnit) {
|
||||
public void setTexture(final Image data, final Vector2i size, final TextureColorMode dataColorSpace, final int textureUnit) {
|
||||
this.data = data;
|
||||
this.size = size;
|
||||
this.textureUnit = textureUnit;
|
||||
this.endPointSize = new Vector2f(size.x(), size.y());
|
||||
this.endPointSize = new Vector2i(size.x(), size.y());
|
||||
this.dataColorSpace = dataColorSpace;
|
||||
flush();
|
||||
}
|
||||
@ -191,9 +205,11 @@ public class ResourceTexture extends Resource {
|
||||
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
|
||||
Log.info("TEXTURE: add [" + getId() + "]=" + this.size + " OGlId=" + this.texId);
|
||||
if (this.dataColorSpace == TextureColorMode.rgb) {
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, this.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 {
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, this.size.x(), this.size.y(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, this.data);
|
||||
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);
|
||||
|
@ -172,7 +172,7 @@ public class ResourceVirtualBufferObject extends Resource {
|
||||
*/
|
||||
@Override
|
||||
public synchronized boolean updateContext() {
|
||||
Log.verbose(" Start: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")");
|
||||
Log.warning("updateContext (VBO Start: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.length + ")");
|
||||
/*
|
||||
if (lock.tryLock() == false) {
|
||||
//Lock error ==> try later ...
|
||||
@ -187,8 +187,8 @@ public class ResourceVirtualBufferObject extends Resource {
|
||||
}
|
||||
this.exist = true;
|
||||
for (int iii = 0; iii < this.vbo.length; iii++) {
|
||||
Log.verbose("VBO : add [" + getId() + "]=" + this.buffer[iii].getClass().getCanonicalName() + "*sizeof(float) OGl_Id=" + this.vbo[iii]);
|
||||
if (this.buffer[iii] != null) {
|
||||
Log.verbose("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[]) {
|
||||
|
@ -4,9 +4,12 @@ import org.atriasoft.etk.Uri;
|
||||
import org.atriasoft.gale.Gale;
|
||||
|
||||
public class Sample1 {
|
||||
private Sample1() {}
|
||||
public static void main(String[] args) {
|
||||
Uri.setGroup("DATA", "src/org/atriasoft/gale/test/sample1/");
|
||||
public static void main(final String[] args) {
|
||||
Gale.init();
|
||||
//Uri.setGroup("DATA", "src/org/atriasoft/gale/test/sample1/");
|
||||
Uri.setApplication(Sample1.class, "/org/atriasoft/gale/test/sample1/");
|
||||
Gale.run(new Sample1Application(), args);
|
||||
}
|
||||
|
||||
private Sample1() {}
|
||||
}
|
||||
|
@ -8,12 +8,12 @@ import org.atriasoft.etk.math.Vector3f;
|
||||
import org.atriasoft.gale.Application;
|
||||
import org.atriasoft.gale.backend3d.OpenGL;
|
||||
import org.atriasoft.gale.context.Context;
|
||||
import org.atriasoft.gale.resource.ResourceProgram;
|
||||
import org.atriasoft.gale.resource.ResourceVirtualArrayObject;
|
||||
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.ResourceProgram;
|
||||
import org.atriasoft.gale.resource.ResourceVirtualArrayObject;
|
||||
|
||||
public class Sample1Application extends Application {
|
||||
private ResourceProgram oGLprogram;
|
||||
@ -23,32 +23,21 @@ public class Sample1Application extends Application {
|
||||
private float angle;
|
||||
private ResourceVirtualArrayObject verticesVBO;
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate(Context context) {
|
||||
this.canDraw = true;
|
||||
setSize(new Vector2f(800, 600));
|
||||
public void onCreate(final Context context) {
|
||||
//setSize(new Vector2f(800, 600));
|
||||
this.angle = 0.0f;
|
||||
this.oGLprogram = ResourceProgram.create(new Uri("DATA", "basic.vert"), new Uri("DATA", "basic.frag"));
|
||||
if (this.oGLprogram != null) {
|
||||
this.oGLMatrixTransformation = this.oGLprogram.getUniform("matrixTransformation");
|
||||
this.oGLMatrixProjection = this.oGLprogram.getUniform("matrixProjection");
|
||||
this.oGLMatrixView = this.oGLprogram.getUniform("matrixView");
|
||||
this.oGLMatrixTransformation = this.oGLprogram.getUniform("in_matrixTransformation");
|
||||
this.oGLMatrixProjection = this.oGLprogram.getUniform("in_matrixProjection");
|
||||
this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView");
|
||||
}
|
||||
|
||||
float[] vertices = {
|
||||
-0.5f, -0.5f, -1.0f,
|
||||
0.0f, 0.5f, -1.0f,
|
||||
0.5f,-0.5f, -1.0f
|
||||
};
|
||||
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,
|
||||
};
|
||||
int[] indices = {
|
||||
0, 1, 2,
|
||||
};
|
||||
//float[] vertices = { 0.2f, 0.1f, 0.0f, 0.3f, 0.4f, 0.0f, 0.1f, 0.4f, 0.0f };
|
||||
float[] vertices = { -0.5f, -0.5f, -1.0f, 0.0f, 0.5f, -1.0f, 0.5f, -0.5f, -1.0f };
|
||||
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, };
|
||||
int[] indices = { 0, 1, 2 };
|
||||
// this is the properties of the buffer requested : "r"/"w" + "-" + buffer type "f"=float "i"=integer
|
||||
this.verticesVBO = ResourceVirtualArrayObject.create(vertices, colors, indices);
|
||||
// TO facilitate some debugs we add a name of the VBO:
|
||||
@ -57,24 +46,26 @@ public class Sample1Application extends Application {
|
||||
this.verticesVBO.flush();
|
||||
Log.info("==> Init APPL (END)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(Context context) {
|
||||
public void onDraw(final Context context) {
|
||||
this.angle += 0.01;
|
||||
//Log.info("==> appl Draw ...");
|
||||
Vector2f size = getSize();
|
||||
// set the basic openGL view port: (position drawed in the windows)
|
||||
OpenGL.setViewPort(new Vector2f(0,0), size);
|
||||
OpenGL.setViewPort(Vector2f.ZERO, size);
|
||||
// Clear all the stacked matrix ...
|
||||
OpenGL.setBasicMatrix(Matrix4f.IDENTITY);
|
||||
// clear background
|
||||
Color bgColor = new Color(0.0f, 1.0f, 1.0f, 0.75f);
|
||||
Color bgColor = Color.CYAN;
|
||||
OpenGL.clearColor(bgColor);
|
||||
// real clear request:
|
||||
OpenGL.clear(OpenGL.ClearFlag.clearFlag_colorBuffer);
|
||||
// create a local matrix environnement.
|
||||
// create a local matrix environment.
|
||||
OpenGL.push();
|
||||
|
||||
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) {
|
||||
@ -84,46 +75,41 @@ public class Sample1Application extends Application {
|
||||
//EWOL_DEBUG(" display " + this.coord.size() + " elements" );
|
||||
this.oGLprogram.use();
|
||||
|
||||
// set Matrix : translation/positionMatrix
|
||||
// set Matrix: translation/positionMatrix
|
||||
Matrix4f projectionMatrix = tmpProjection; //OpenGL.getMatrix();
|
||||
Matrix4f transforamtionMatrix = Matrix4f.createMatrixRotate(new Vector3f(0,0,1),this.angle);
|
||||
Matrix4f transforamtionMatrix = Matrix4f.createMatrixRotate(new Vector3f(0, 0, 1), this.angle);
|
||||
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 od the elements:
|
||||
// Request the draw of the elements:
|
||||
this.verticesVBO.render(OpenGL.RenderMode.triangle);
|
||||
|
||||
this.verticesVBO.unBindForRendering();
|
||||
this.oGLprogram.unUse();
|
||||
// Restore context of matrix
|
||||
OpenGL.pop();
|
||||
this.markDrawingIsNeeded();
|
||||
markDrawingIsNeeded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointer(KeySpecial special,
|
||||
KeyType type,
|
||||
int pointerID,
|
||||
Vector2f pos,
|
||||
KeyStatus state) {
|
||||
// Log.info("input event: type=" + type);
|
||||
// Log.info(" id=" + pointerID);
|
||||
// Log.info(" pos=" + pos);
|
||||
// Log.info(" state=" + state);
|
||||
}
|
||||
@Override
|
||||
public void onKeyboard( KeySpecial special,
|
||||
KeyKeyboard type,
|
||||
Character value,
|
||||
KeyStatus state) {
|
||||
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);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ uniform mat4 in_matrixView;
|
||||
out vec4 io_color;
|
||||
|
||||
void main(void) {
|
||||
//gl_Position = in_matrixProjection * vec4(in_position, 1.0);
|
||||
gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * vec4(in_position, 1.0);
|
||||
f_color = in_colors;
|
||||
//gl_Position = vec4(in_position, 1.0);
|
||||
io_color = in_colors;
|
||||
}
|
@ -2,11 +2,14 @@ package org.atriasoft.gale.test.sample2;
|
||||
|
||||
import org.atriasoft.etk.Uri;
|
||||
import org.atriasoft.gale.Gale;
|
||||
import org.atriasoft.gale.test.sample1.Sample1;
|
||||
|
||||
public class Main {
|
||||
private Main() {}
|
||||
public static void main(String[] args) {
|
||||
Uri.setGroup("DATA", "src/org/atriasoft/gale/test/sample2/");
|
||||
public static void main(final String[] args) {
|
||||
Gale.init();
|
||||
Uri.setApplication(Sample1.class, "/org/atriasoft/gale/test/sample2/");
|
||||
Gale.run(new Sample2Application(), args);
|
||||
}
|
||||
|
||||
private Main() {}
|
||||
}
|
||||
|
@ -8,13 +8,13 @@ import org.atriasoft.etk.math.Vector3f;
|
||||
import org.atriasoft.gale.Application;
|
||||
import org.atriasoft.gale.backend3d.OpenGL;
|
||||
import org.atriasoft.gale.context.Context;
|
||||
import org.atriasoft.gale.resource.ResourceProgram;
|
||||
import org.atriasoft.gale.resource.ResourceTexture;
|
||||
import org.atriasoft.gale.resource.ResourceVirtualArrayObject;
|
||||
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.ResourceProgram;
|
||||
import org.atriasoft.gale.resource.ResourceTexture;
|
||||
import org.atriasoft.gale.resource.ResourceVirtualArrayObject;
|
||||
|
||||
public class Sample2Application extends Application {
|
||||
private ResourceProgram oGLprogram;
|
||||
@ -27,18 +27,16 @@ public class Sample2Application extends Application {
|
||||
private ResourceVirtualArrayObject verticesVBO;
|
||||
private ResourceTexture texture;
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate(Context context) {
|
||||
this.canDraw = true;
|
||||
public void onCreate(final Context context) {
|
||||
setSize(new Vector2f(800, 600));
|
||||
this.oGLprogram = ResourceProgram.create(new Uri("DATA", "basic.vert"), new Uri("DATA", "basic.frag"));
|
||||
if (this.oGLprogram != null) {
|
||||
this.oGLMatrixTransformation = this.oGLprogram.getUniform("matrixTransformation");
|
||||
this.oGLMatrixProjection = this.oGLprogram.getUniform("matrixProjection");
|
||||
this.oGLMatrixView = this.oGLprogram.getUniform("matrixView");
|
||||
this.oGLMatrixTransformation = this.oGLprogram.getUniform("in_matrixTransformation");
|
||||
this.oGLMatrixProjection = this.oGLprogram.getUniform("in_matrixProjection");
|
||||
this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView");
|
||||
}
|
||||
|
||||
//@formatter:off
|
||||
float[] vertices = {
|
||||
-0.5f,0.5f,-0.5f,
|
||||
-0.5f,-0.5f,-0.5f,
|
||||
@ -82,14 +80,16 @@ public class Sample2Application extends Application {
|
||||
};
|
||||
|
||||
int[] indices = {
|
||||
0,1,3, 3,1,2,
|
||||
4,5,7, 7,5,6,
|
||||
8,9,11, 11,9,10,
|
||||
1,0,3, 1,3,2,
|
||||
4,5,7, 7,5,6,
|
||||
9,8,11, 9,11,10,
|
||||
12,13,15, 15,13,14,
|
||||
16,17,19, 19,17,18,
|
||||
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:
|
||||
@ -104,8 +104,9 @@ public class Sample2Application extends Application {
|
||||
}
|
||||
Log.info("==> Init APPL (END)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(Context context) {
|
||||
public void onDraw(final Context context) {
|
||||
this.angleX += 0.001;
|
||||
this.angleY += 0.005;
|
||||
this.angleZ += 0.01;
|
||||
@ -113,7 +114,7 @@ public class Sample2Application extends Application {
|
||||
Vector2f size = getSize();
|
||||
//Log.info("==> Windows size = " + size);
|
||||
// set the basic openGL view port: (position drawed in the windows)
|
||||
OpenGL.setViewPort(new Vector2f(0,0), size);
|
||||
OpenGL.setViewPort(new Vector2f(0, 0), size);
|
||||
// Clear all the stacked matrix ...
|
||||
OpenGL.setBasicMatrix(Matrix4f.IDENTITY);
|
||||
// clear background
|
||||
@ -140,11 +141,11 @@ public class Sample2Application extends Application {
|
||||
// set Matrix : translation/positionMatrix
|
||||
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.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)));
|
||||
//Matrix4f tmpMatrix = projMatrix * camMatrix;
|
||||
this.verticesVBO.bindForRendering();
|
||||
this.oGLprogram.uniformMatrix(this.oGLMatrixView, viewMatrix);
|
||||
@ -162,27 +163,22 @@ public class Sample2Application extends Application {
|
||||
this.oGLprogram.unUse();
|
||||
// Restore context of matrix
|
||||
OpenGL.pop();
|
||||
this.markDrawingIsNeeded();
|
||||
markDrawingIsNeeded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointer(KeySpecial special,
|
||||
KeyType type,
|
||||
int pointerID,
|
||||
Vector2f pos,
|
||||
KeyStatus state) {
|
||||
// Log.info("input event: type=" + type);
|
||||
// Log.info(" id=" + pointerID);
|
||||
// Log.info(" pos=" + pos);
|
||||
// Log.info(" state=" + state);
|
||||
}
|
||||
@Override
|
||||
public void onKeyboard( KeySpecial special,
|
||||
KeyKeyboard type,
|
||||
Character value,
|
||||
KeyStatus state) {
|
||||
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);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
Loading…
x
Reference in New Issue
Block a user