[DEBUG] correct VAO

This commit is contained in:
Edouard DUPIN 2021-04-13 01:37:35 +02:00
parent 3664c311ef
commit d263376329
6 changed files with 252 additions and 63 deletions

View File

@ -307,20 +307,20 @@ public class OpenGL {
} }
public static void checkGlError(final String op) { public static void checkGlError(final String op) {
// int localLine = Thread.currentThread().getStackTrace()[2].getLineNumber(); //int localLine = Thread.currentThread().getStackTrace()[2].getLineNumber();
// if (CHECKERROROPENGL == true) { // if (CHECKERROROPENGL) {
// boolean hasError = false; // boolean hasError = false;
// for (int error = GL11.glGetError(); error!=null; error = GL11.glGetError()) { // for (int error = GL11.glGetError(); error != null; error = GL11.glGetError()) {
// Log.error("after " + op + "():" + localLine + " glError(" + error + ")"); // Log.error("after " + op + "():" + localLine + " glError(" + error + ")");
// hasError = true; // hasError = true;
// } // }
// if (hasError == true) { // if (hasError) {
// Log.critical("plop"); // Log.critical("plop");
// } // }
// for (GLint error = glGetError(); error; error = glGetError()) { // for (GLint error = glGetError(); error; error = glGetError()) {
// Log.error("after " + op + "() glError (" + error + ")"); // Log.error("after " + op + "() glError (" + error + ")");
// } // }
// } // }
} }
/** /**
@ -1042,6 +1042,16 @@ public class OpenGL {
} }
public static FloatBuffer storeDataInFloatBuffer(final Color[] data) { public static FloatBuffer storeDataInFloatBuffer(final Color[] data) {
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();
tmpData[iii * 4 + 2] = data[iii].b();
tmpData[iii * 4 + 3] = data[iii].a();
}
return storeDataInFloatBuffer(tmpData);
// does not work...
/*
final FloatBuffer buffer = FloatBuffer.allocate(data.length * 4); final FloatBuffer buffer = FloatBuffer.allocate(data.length * 4);
for (int iii = 0; iii < data.length; iii++) { for (int iii = 0; iii < data.length; iii++) {
buffer.put(iii * 4, data[iii].r()); buffer.put(iii * 4, data[iii].r());
@ -1051,6 +1061,7 @@ public class OpenGL {
} }
buffer.flip(); buffer.flip();
return buffer; return buffer;
*/
} }
private static FloatBuffer storeDataInFloatBuffer(final float[] data) { private static FloatBuffer storeDataInFloatBuffer(final float[] data) {
@ -1068,6 +1079,14 @@ public class OpenGL {
} }
public static FloatBuffer storeDataInFloatBuffer(final Vector2f[] data) { public static FloatBuffer storeDataInFloatBuffer(final Vector2f[] data) {
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();
}
return storeDataInFloatBuffer(tmpData);
// does not work...
/*
final FloatBuffer buffer = FloatBuffer.allocate(data.length * 2); final FloatBuffer buffer = FloatBuffer.allocate(data.length * 2);
for (int iii = 0; iii < data.length; iii++) { for (int iii = 0; iii < data.length; iii++) {
buffer.put(iii * 2, data[iii].x()); buffer.put(iii * 2, data[iii].x());
@ -1075,17 +1094,30 @@ public class OpenGL {
} }
buffer.flip(); buffer.flip();
return buffer; return buffer;
*/
} }
public static FloatBuffer storeDataInFloatBuffer(final Vector3f[] data) { public static FloatBuffer storeDataInFloatBuffer(final Vector3f[] data) {
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();
tmpData[iii * 3 + 2] = data[iii].z();
}
return storeDataInFloatBuffer(tmpData);
// does not work...
/*
final FloatBuffer buffer = FloatBuffer.allocate(data.length * 3); final FloatBuffer buffer = FloatBuffer.allocate(data.length * 3);
for (int iii = 0; iii < data.length; iii++) { for (int iii = 0; iii < data.length; iii++) {
buffer.put(iii * 3, data[iii].x()); buffer.put(data[iii].x());
buffer.put(iii * 3 + 1, data[iii].y()); buffer.put(data[iii].y());
buffer.put(iii * 3 + 2, data[iii].z()); buffer.put(data[iii].z());
} }
buffer.flip(); //buffer.flip();
//buffer.limit(data.length * 3);
//return buffer.asReadOnlyBuffer();
return buffer; return buffer;
*/
} }
/** /**

View File

@ -126,6 +126,24 @@ public class ResourceProgram extends Resource {
OpenGL.programBindAttribute(this.program, attribute, variableName); OpenGL.programBindAttribute(this.program, attribute, variableName);
} }
public void bindVBO(final int idElem, final ResourceVirtualBufferObject vbo, final int vboId) {
if (!this.exist) {
return;
}
if (idElem < 0 || idElem > this.elementList.size()) {
Log.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);
GL20.glBindBuffer(GL20.GL_ARRAY_BUFFER, vbo.getOpenGlId(vboId));
GL20.glEnableVertexAttribArray(this.elementList.get(idElem).elementId);
this.listOfVBOUsed.add(this.elementList.get(idElem).elementId);
}
/** /**
* Check If an Id is valid in the shader or not (sometime the shader have * 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) * not some attribute, then we need to display some error)
@ -158,16 +176,6 @@ public class ResourceProgram extends Resource {
this.hasTexture1 = 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++) {
out[iii * 3] = data.get(iii).x();
out[iii * 3 + 1] = data.get(iii).y();
out[iii * 3 + 2] = data.get(iii).z();
}
return out;
}
// private void storeDataInAttributeList(int attributeNumber, int // private void storeDataInAttributeList(int attributeNumber, int
// coordinateSize, float[] data) { // coordinateSize, float[] data) {
// int vboID = GL15.glGenBuffers(); // int vboID = GL15.glGenBuffers();
@ -180,6 +188,16 @@ public class ResourceProgram extends Resource {
// GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
// } // }
private float[] convertInFloat(final List<Vector3f> data) {
final float[] out = new float[data.size() * 3];
for (int iii = 0; iii < data.size(); iii++) {
out[iii * 3] = data.get(iii).x();
out[iii * 3 + 1] = data.get(iii).y();
out[iii * 3 + 2] = data.get(iii).z();
}
return out;
}
/** /**
* User request an attribute on this program. * User request an attribute on this program.
* @note The attribute is send to the fragment shaders * @note The attribute is send to the fragment shaders

View File

@ -3,10 +3,15 @@ package org.atriasoft.gale.resource;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;
import java.nio.IntBuffer; import java.nio.IntBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import org.atriasoft.etk.Color;
import org.atriasoft.etk.math.Vector2f;
import org.atriasoft.etk.math.Vector3f;
import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.backend3d.OpenGL;
import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.gale.backend3d.OpenGL.RenderMode;
import org.atriasoft.gale.backend3d.OpenGL.Usage;
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;
@ -22,6 +27,15 @@ public class ResourceVirtualArrayObject extends Resource {
public static final int INDICE_VBO_NORMALS = 2; public static final int INDICE_VBO_NORMALS = 2;
public static final int INDICE_VBO_COLORS = 3; public static final int INDICE_VBO_COLORS = 3;
public static int[] convertIntegers(final List<Integer> integers) {
int[] ret = new int[integers.size()];
Iterator<Integer> 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) { 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); final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject(positions, colors, textureCoordinates, normals, indices, indices.length);
getManager().localAdd(resource); getManager().localAdd(resource);
@ -46,6 +60,12 @@ public class ResourceVirtualArrayObject extends Resource {
return resource; return resource;
} }
public static ResourceVirtualArrayObject createDynamic() {
final ResourceVirtualArrayObject resource = new ResourceVirtualArrayObject();
getManager().localAdd(resource);
return resource;
}
public static FloatBuffer storeDataInFloatBuffer(final float[] data) { public static FloatBuffer storeDataInFloatBuffer(final float[] data) {
final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length); final FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
buffer.put(data); buffer.put(data);
@ -60,22 +80,30 @@ public class ResourceVirtualArrayObject extends Resource {
return buffer; return buffer;
} }
private final boolean dynamic = false;
private int vaoID = -1; private int vaoID = -1;
private boolean exist = false; //!< This data is availlable in the Graphic card private boolean exist = false; //!< This data is availlable in the Graphic card
private final List<Integer> vbo = new ArrayList<>(); private final List<Integer> vbo = new ArrayList<>();
float[] positions = null; Object positions = null;
float[] colors = null; Object colors = null;
float[] textureCoordinates = null; Object textureCoordinates = null;
float[] normals = null; Object normals = null;
int[] indices = null; int[] indices = null;
int vertexCount = -1; int vertexCount = -1;
protected ResourceVirtualArrayObject() {
super();
this.resourceLevel = 3;
Log.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) {
super(); super();
this.resourceLevel = 3; this.resourceLevel = 3;
@ -113,7 +141,11 @@ public class ResourceVirtualArrayObject extends Resource {
this.vbo.add(vboId); this.vbo.add(vboId);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboId); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboId);
final IntBuffer buffer = storeDataInIntBuffer(indices); final IntBuffer buffer = storeDataInIntBuffer(indices);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW); if (this.dynamic) {
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_DYNAMIC_DRAW);
} else {
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
}
} }
/** /**
@ -128,12 +160,17 @@ public class ResourceVirtualArrayObject extends Resource {
* clear buffers * clear buffers
*/ */
public void clear() { public void clear() {
//Log.verbose(" Clear: [" + getId() + "] '" + getName() + "' (size=" + this.buffer.get(0).length + ")"); //Log.verbose(" Clear: [" + getId() + "] '" + getName() + "' (size=" + buffer.get(0).length + ")");
// DO not clear the this.vbo indexed in the graphic cards ... this.positions = null;
this.colors = null;
this.textureCoordinates = null;
this.normals = null;
this.indices = null;
this.vertexCount = -1;
} }
private void createVAO() { private void createVAO() {
Log.error("create VAO...");
this.vaoID = GL30.glGenVertexArrays(); this.vaoID = GL30.glGenVertexArrays();
GL30.glBindVertexArray(this.vaoID); GL30.glBindVertexArray(this.vaoID);
} }
@ -153,28 +190,53 @@ public class ResourceVirtualArrayObject extends Resource {
*/ */
public int getGLID() { public int getGLID() {
return this.vaoID; return this.vaoID;
}; }
public void loadToVAO() { public void loadAgainToVAO() {
createVAO(); createVAO();
if (this.indices != null) { if (this.indices != null) {
Log.info("Set indices"); Log.error("Set indices");
bindIndicesBuffer(this.indices); bindIndicesBuffer(this.indices);
} }
if (this.positions != null) { if (this.positions != null) {
Log.info("Set positions"); Log.error("Set positions");
storeDataInAttributeList(0, 3, this.positions); storeDataInAttributeList(0, 3, this.positions);
} }
if (this.textureCoordinates != null) { if (this.textureCoordinates != null) {
Log.info("Set textureCoordinates"); Log.error("Set textureCoordinates");
storeDataInAttributeList(1, 2, this.textureCoordinates); storeDataInAttributeList(1, 2, this.textureCoordinates);
} }
if (this.normals != null) { if (this.normals != null) {
Log.info("Set normals"); Log.error("Set normals");
storeDataInAttributeList(2, 3, this.normals); storeDataInAttributeList(2, 3, this.normals);
} }
if (this.colors != null) { if (this.colors != null) {
Log.info("Set colors"); Log.error("Set colors");
storeDataInAttributeList(3, 4, this.colors);
}
unbindVAO();
}
public void loadToVAO() {
GL30.glBindVertexArray(this.vaoID);
if (this.indices != null) {
Log.error("Set indices");
bindIndicesBuffer(this.indices);
}
if (this.positions != null) {
Log.error("Set positions");
storeDataInAttributeList(0, 3, this.positions);
}
if (this.textureCoordinates != null) {
Log.error("Set textureCoordinates");
storeDataInAttributeList(1, 2, this.textureCoordinates);
}
if (this.normals != null) {
Log.error("Set normals");
storeDataInAttributeList(2, 3, this.normals);
}
if (this.colors != null) {
Log.error("Set colors");
storeDataInAttributeList(3, 4, this.colors); storeDataInAttributeList(3, 4, this.colors);
} }
unbindVAO(); unbindVAO();
@ -213,15 +275,66 @@ public class ResourceVirtualArrayObject extends Resource {
} }
public void render(final RenderMode mode) { public void render(final RenderMode mode) {
Log.warning("request rendering indices : " + this.vertexCount);
OpenGL.drawElements(mode, this.vertexCount); OpenGL.drawElements(mode, this.vertexCount);
} }
private void storeDataInAttributeList(final int attributeNumber, final int coordinateSize, final float[] data) { public void renderArrays(final RenderMode mode) {
Log.warning("request rendering direct : " + this.vertexCount);
OpenGL.drawArrays(mode, 0, this.vertexCount);
}
public void setColors(final Object colors) {
this.colors = colors;
}
public void setIndices(final int[] indices) {
this.indices = indices;
}
public void setIndices(final List<Integer> indices) {
this.indices = convertIntegers(indices);
this.vertexCount = this.indices.length;
}
public void setNormals(final Object normals) {
this.normals = normals;
}
public void setPosition(final Object positions) {
this.positions = positions;
}
public void setTextureCoordinate(final float[] 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(); final int vboID = GL15.glGenBuffers();
this.vbo.add(vboID); this.vbo.add(vboID);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
final FloatBuffer buffer = storeDataInFloatBuffer(data); Usage usage = Usage.staticDraw;
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW); if (this.dynamic) {
usage = Usage.streamDraw;
}
// select the buffer to set data inside it ...
if (data instanceof float[]buffer) {
OpenGL.bufferData(buffer, usage);
} else if (data instanceof int[]buffer) {
OpenGL.bufferData(buffer, usage);
} else if (data instanceof Vector2f[]buffer) {
OpenGL.bufferData(buffer, usage);
} else if (data instanceof Vector3f[]buffer) {
OpenGL.bufferData(buffer, usage);
} else if (data instanceof Color[]buffer) {
OpenGL.bufferData(buffer, usage);
} else {
Log.error("Not managed VBO model : " + data.getClass().getCanonicalName());
}
GL20.glVertexAttribPointer(attributeNumber, coordinateSize, GL11.GL_FLOAT, false, 0, 0); GL20.glVertexAttribPointer(attributeNumber, coordinateSize, GL11.GL_FLOAT, false, 0, 0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
} }
@ -246,6 +359,7 @@ public class ResourceVirtualArrayObject extends Resource {
} }
private void unbindVAO() { private void unbindVAO() {
Log.error("Unbind VAO ...");
GL30.glBindVertexArray(0); GL30.glBindVertexArray(0);
} }
@ -254,14 +368,21 @@ public class ResourceVirtualArrayObject extends Resource {
*/ */
@Override @Override
public boolean updateContext() { public boolean updateContext() {
//Log.verbose(" Start: [" + getId() + "] '" + getName() + "' (size=" + this.indices.length + ") ********************************"); Log.error(" Start: [" + getId() + "] '" + getName() + "' (size=" + this.vertexCount + ") ********************************");
if (!this.exist) { if (!this.exist) {
Log.debug(" ==> ALLOCATE new handle"); Log.error(" ==> ALLOCATE new handle");
// Allocate and assign a Vertex Array Object to our handle // Allocate and assign a Vertex Array Object to our handle
loadToVAO(); loadToVAO();
} else {
// Update VAO (only for dynamic:
if (!this.dynamic) {
Log.error(" Request update a VAO with a static buffer !!!");
}
loadAgainToVAO();
} }
this.exist = true; this.exist = true;
Log.verbose(" Stop: [" + getId() + "] '" + getName() + "'"); Log.error(" Stop: [" + getId() + "] '" + getName() + "'");
return true; return true;
} }

View File

@ -23,13 +23,13 @@ public class ResourceVirtualBufferObject extends Resource {
return new ResourceVirtualBufferObject(count); return new ResourceVirtualBufferObject(count);
} }
private boolean exist = false; //!< This data is availlable in the Graphic card private boolean exist = false; //!< This data is available in the Graphic card
private final int[] vbo; //!< openGl ID of this VBO private final int[] vbo; //!< openGl ID of this VBO
private final Object[] buffer; //!< data that is availlable in the VBO system ... private final Object[] buffer; //!< data that is available in the VBO system ...
/** /**
* Constructor of this VBO. * Constructor of this VBO.
* @param accesMode Acces mode : ??? * @param accesMode Access mode : ???
*/ */
protected ResourceVirtualBufferObject(final int number) { protected ResourceVirtualBufferObject(final int number) {
super(); super();

View File

@ -16,10 +16,18 @@ import org.atriasoft.gale.resource.ResourceProgram;
import org.atriasoft.gale.resource.ResourceVirtualArrayObject; import org.atriasoft.gale.resource.ResourceVirtualArrayObject;
public class Sample1Application extends Application { public class Sample1Application extends Application {
//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 ResourceProgram oGLprogram;
private int oGLMatrixTransformation; private int oGLMatrixTransformation;
private int oGLMatrixProjection; private int oGLMatrixProjection;
private int oGLMatrixView; private int oGLMatrixView;
private float angle; private float angle;
private ResourceVirtualArrayObject verticesVBO; private ResourceVirtualArrayObject verticesVBO;
@ -34,12 +42,12 @@ public class Sample1Application extends Application {
this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView"); this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView");
} }
//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 is the properties of the buffer requested : "r"/"w" + "-" + buffer type "f"=float "i"=integer
this.verticesVBO = ResourceVirtualArrayObject.create(vertices, colors, indices); if (TEST_STATIC_MODE) {
this.verticesVBO = ResourceVirtualArrayObject.create(VERTICES, COLORS, INDICES);
} else {
this.verticesVBO = ResourceVirtualArrayObject.createDynamic();
}
// TO facilitate some debugs we add a name of the VBO: // TO facilitate some debugs we add a name of the VBO:
this.verticesVBO.setName("[VBO] of basic SAMPLE"); this.verticesVBO.setName("[VBO] of basic SAMPLE");
// update all the VBO elements ... // update all the VBO elements ...
@ -88,13 +96,25 @@ public class Sample1Application extends Application {
this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, transforamtionMatrix); this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, transforamtionMatrix);
// Request the draw of the elements: // Request the draw of the elements:
this.verticesVBO.render(OpenGL.RenderMode.triangle); if (TEST_STATIC_MODE) {
this.verticesVBO.render(OpenGL.RenderMode.triangle);
} else {
this.verticesVBO.renderArrays(OpenGL.RenderMode.triangle);
}
this.verticesVBO.unBindForRendering(); this.verticesVBO.unBindForRendering();
this.oGLprogram.unUse(); this.oGLprogram.unUse();
// Restore context of matrix // Restore context of matrix
OpenGL.pop(); OpenGL.pop();
// mark to redraw the screen ==> demo only....
markDrawingIsNeeded(); markDrawingIsNeeded();
if (!TEST_STATIC_MODE) {
this.verticesVBO.clear();
this.verticesVBO.setPosition(VERTICES);
this.verticesVBO.setColors(COLORS);
this.verticesVBO.setVertexCount(3);
this.verticesVBO.flush();
}
} }
@Override @Override

View File

@ -6,8 +6,8 @@ precision mediump int;
#endif #endif
// Input: // Input:
in vec3 in_position; layout (location = 0) in vec3 in_position;
in vec4 in_colors; layout (location = 3) in vec4 in_colors;
uniform mat4 in_matrixTransformation; uniform mat4 in_matrixTransformation;
uniform mat4 in_matrixProjection; uniform mat4 in_matrixProjection;
uniform mat4 in_matrixView; uniform mat4 in_matrixView;
@ -16,8 +16,6 @@ uniform mat4 in_matrixView;
out vec4 io_color; out vec4 io_color;
void main(void) { 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); gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * vec4(in_position, 1.0);
//gl_Position = vec4(in_position, 1.0);
io_color = in_colors; io_color = in_colors;
} }