[DEV] add udpate of Color RGB(no A)

This commit is contained in:
Edouard DUPIN 2021-05-29 00:48:19 +02:00
parent 31dae9d4e3
commit c6c92f86f6

View File

@ -14,17 +14,18 @@ import org.atriasoft.etk.math.Vector3i;
import org.atriasoft.etk.math.Vector4f; import org.atriasoft.etk.math.Vector4f;
import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL;
import org.atriasoft.gale.internal.Log; import org.atriasoft.gale.internal.Log;
import org.lwjgl.BufferUtils; import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL15;
import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL20;
import org.lwjgl.opengl.GL40;
class ProgAttributeElement { class ProgAttributeElement {
public String name; // !< Name of the element public String name; // !< Name of the element
public int elementId; // !< openGl Id if this element == > can not exist ==> @ref m_isLinked public int elementId; // !< openGl Id if this element == > can not exist ==> @ref m_isLinked
public boolean isAttribute; // !< true if it was an attribute element, otherwite it was an uniform public boolean isAttribute; // !< true if it was an attribute element, otherwite it was an uniform
public boolean isLinked; // !< if this element does not exist this is false public boolean isLinked; // !< if this element does not exist this is false
}; }
public class ResourceProgram extends Resource { public class ResourceProgram extends Resource {
static final boolean DEBUG = false; // TODO externalize this ... static final boolean DEBUG = false; // TODO externalize this ...
@ -32,7 +33,7 @@ public class ResourceProgram extends Resource {
public static ResourceProgram create(final Uri uriVertexShader, final Uri uriFragmentShader) { public static ResourceProgram create(final Uri uriVertexShader, final Uri uriFragmentShader) {
ResourceProgram resource; ResourceProgram resource;
final String name = uriVertexShader.getValue() + "<-->" + uriFragmentShader.getValue(); final String name = uriVertexShader.getValue() + "<-->" + uriFragmentShader.getValue();
Resource resource2 = getManager().localKeep(name); Resource resource2 = Resource.getManager().localKeep(name);
if (resource2 != null) { if (resource2 != null) {
if (resource2 instanceof ResourceProgram) { if (resource2 instanceof ResourceProgram) {
resource2.keep(); resource2.keep();
@ -42,7 +43,7 @@ public class ResourceProgram extends Resource {
return null; return null;
} }
resource = new ResourceProgram(uriVertexShader, uriFragmentShader); resource = new ResourceProgram(uriVertexShader, uriFragmentShader);
getManager().localAdd(resource); Resource.getManager().localAdd(resource);
return resource; return resource;
} }
@ -103,20 +104,18 @@ public class ResourceProgram extends Resource {
if (this.shaderVertex == null) { if (this.shaderVertex == null) {
Log.error("Error while getting a specific shader filename: " + uriVertexShader); Log.error("Error while getting a specific shader filename: " + uriVertexShader);
return; return;
} else {
Log.debug("Add shader on program: '" + uriFragmentShader + "'");
} }
Log.debug("Add shader on program: '" + uriFragmentShader + "'");
this.shaderFragment = ResourceShader.create(uriFragmentShader); this.shaderFragment = ResourceShader.create(uriFragmentShader);
if (this.shaderFragment == null) { if (this.shaderFragment == null) {
Log.error("Error while getting a specific shader filename: " + uriFragmentShader); Log.error("Error while getting a specific shader filename: " + uriFragmentShader);
return; return;
} else {
Log.debug("Add shader on program : " + uriFragmentShader + "frag");
} }
Log.debug("Add shader on program : " + uriFragmentShader + "frag");
if (OpenGL.hasContext()) { if (OpenGL.hasContext()) {
updateContext(); updateContext();
} else { } else {
getManager().update(this); Resource.getManager().update(this);
} }
} }
@ -140,7 +139,7 @@ public class ResourceProgram extends Resource {
} }
Log.error("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(vboId) + " VBOindex=" + vboId); Log.error("[" + this.elementList.get(idElem).name + "] send on oglID=" + vbo.getOpenGlId(vboId) + " VBOindex=" + vboId);
GL20.glBindBuffer(GL20.GL_ARRAY_BUFFER, vbo.getOpenGlId(vboId)); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo.getOpenGlId(vboId));
GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId); GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId);
this.listOfVBOUsed.add(this.elementList.get(idElem).elementId); this.listOfVBOUsed.add(this.elementList.get(idElem).elementId);
} }
@ -217,7 +216,7 @@ public class ResourceProgram extends Resource {
tmp.name = elementName; tmp.name = elementName;
tmp.isAttribute = true; tmp.isAttribute = true;
if (!OpenGL.hasContext()) { if (!OpenGL.hasContext()) {
getManager().update(this); Resource.getManager().update(this);
tmp.elementId = -1; tmp.elementId = -1;
tmp.isLinked = false; tmp.isLinked = false;
} else if (this.exist) { } else if (this.exist) {
@ -263,7 +262,7 @@ public class ResourceProgram extends Resource {
tmp.name = elementName; tmp.name = elementName;
tmp.isAttribute = false; tmp.isAttribute = false;
if (!OpenGL.hasContext()) { if (!OpenGL.hasContext()) {
getManager().update(this); Resource.getManager().update(this);
tmp.elementId = -1; tmp.elementId = -1;
tmp.isLinked = false; tmp.isLinked = false;
} else if (this.exist) { } else if (this.exist) {
@ -396,10 +395,10 @@ public class ResourceProgram extends Resource {
// GL40.glBindVertexArray(this.elementList.get(idElem).elementId); // GL40.glBindVertexArray(this.elementList.get(idElem).elementId);
// Log.error("[" + this.elementList.get(idElem).name + "] send " + 3 + " // Log.error("[" + this.elementList.get(idElem).name + "] send " + 3 + "
// element"); // 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... */ 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); data);
// checkGlError("glVertexAttribPointer", LINE, idElem); // checkGlError("glVertexAttribPointer", LINE, idElem);
GL40.glEnableVertexAttribArray(this.elementList.get(idElem).elementId); GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId);
// checkGlError("glEnableVertexAttribArray", LINE, idElem); // checkGlError("glEnableVertexAttribArray", LINE, idElem);
} }
@ -463,7 +462,7 @@ public class ResourceProgram extends Resource {
} }
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)); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo.getOpenGlId(index));
// checkGlError("glBindBuffer", __LINE__, _idElem); // checkGlError("glBindBuffer", __LINE__, _idElem);
Log.verbose(" id=" + this.elementList.get(idElem).elementId); Log.verbose(" id=" + this.elementList.get(idElem).elementId);
Log.verbose(" jump sample=" + jumpBetweenSample); Log.verbose(" jump sample=" + jumpBetweenSample);
@ -535,6 +534,19 @@ public class ResourceProgram extends Resource {
OpenGL.programLoadUniformColor(this.elementList.get(idElem).elementId, value); OpenGL.programLoadUniformColor(this.elementList.get(idElem).elementId, value);
} }
public void uniformColorRGB(final int idElem, final Color value) {
if (!this.exist) {
return;
}
if (idElem < 0 || (long) idElem > this.elementList.size()) {
Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size() - 1) + "]");
return;
}
if (!this.elementList.get(idElem).isLinked) {
return;
}
OpenGL.programLoadUniformColorRGB(this.elementList.get(idElem).elementId, value);
}
/** /**
* Send 1 float uniform element to the spefified ID (not send if does not * Send 1 float uniform element to the spefified ID (not send if does not
* really exist in the openGL program) * really exist in the openGL program)
@ -750,6 +762,7 @@ public class ResourceProgram extends Resource {
OpenGL.programLoadUniformMatrix(this.elementList.get(idElem).elementId, matrix, transpose); OpenGL.programLoadUniformMatrix(this.elementList.get(idElem).elementId, matrix, transpose);
} }
public void uniformVector(final int idElem, final Vector2f value) { public void uniformVector(final int idElem, final Vector2f value) {
if (!this.exist) { if (!this.exist) {
return; return;