@Override public void dispose() { GL30 gl = Gdx.gl30; gl.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); gl.glDeleteBuffer(bufferHandle); bufferHandle = 0; BufferUtils.disposeUnsafeByteBuffer(byteBuffer); if (gl.glIsVertexArray(vaoHandle)) { tmpHandle.clear(); tmpHandle.put(vaoHandle); tmpHandle.flip(); gl.glDeleteVertexArrays(1, tmpHandle); } } }
@Override public void unbind (final ShaderProgram shader, final int[] locations) { GL30 gl = Gdx.gl30; gl.glBindVertexArray(0); isBound = false; }
@Override public void bind(ShaderProgram shader, int[] locations) { GL30 gl = Gdx.gl30; if (vaoDirty || !gl.glIsVertexArray(vaoHandle)) { //initialize the VAO with our vertex attributes and buffer: tmpHandle.clear(); gl.glGenVertexArrays(1, tmpHandle); vaoHandle = tmpHandle.get(0); gl.glBindVertexArray(vaoHandle); vaoDirty = false; } else { //else simply bind the VAO. gl.glBindVertexArray(vaoHandle); } bindAttributes(shader, locations); //if our data has changed upload it: bindData(gl); isBound = true; }
/** * Disposes of all resources this VertexBufferObject uses. */ @Override public void dispose () { GL30 gl = Gdx.gl30; gl.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); gl.glDeleteBuffer(bufferHandle); bufferHandle = 0; deleteVAO(); }
private void drawBoundingBox(float w, float h) { Gdx.gl30.glLineWidth(1); Gdx.gl30.glEnable(Gdx.gl30.GL_BLEND); Gdx.gl30.glBlendFunc(Gdx.gl30.GL_SRC_ALPHA, Gdx.gl30.GL_ONE_MINUS_SRC_ALPHA); drawer.begin(ShapeRenderer.ShapeType.Line); drawer.setColor(AXIS_COLOR); drawer.rect(0, 0, w, h); drawer.end(); }
@Override public void glDeleteVertexArrays (int n, int[] arrays, int offset) { calls++; gl30.glDeleteVertexArrays(n, arrays, offset); check(); }
@Override public void glGenVertexArrays (int n, IntBuffer arrays) { calls++; gl30.glGenVertexArrays(n, arrays); check(); }
@Override public void glDeleteBuffer (int buffer) { calls++; gl30.glDeleteBuffer(buffer); check(); }
@Override public void glBindBuffer (int target, int buffer) { calls++; gl30.glBindBuffer(target, buffer); check(); }
@Override public String glGetStringi (int name, int index) { calls++; final String result = gl30.glGetStringi(name, index); check(); return result; }
@Override public void render() { float w = Gdx.graphics.getWidth(); float h = Gdx.graphics.getHeight(); Gdx.gl30.glClearColor(1, 1, 1, 1); Gdx.gl30.glClear(Gdx.gl30.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(screenCamera.combined); batch.begin(); batch.disableBlending(); float tw = backgroundTexture.getWidth(); float th = backgroundTexture.getHeight(); batch.draw(backgroundTexture, 0f, 0f, w, h, 0f, 0f, w / tw, h / th); batch.enableBlending(); batch.end(); rigidBodiesScreen.render(); dynamicObjectsScreen.render(); batch.setProjectionMatrix(screenCamera.combined); batch.begin(); infoLabel.draw(batch); font.setColor(Color.WHITE); font.draw(batch, String.format(Locale.US, "Zoom: %.0f %%", 100f / worldCamera.zoom), 10, 45); font.draw(batch, "Fps: " + Gdx.graphics.getFramesPerSecond(), 10, 25); batch.end(); }
@Override public void glEnable (int cap) { calls++; gl30.glEnable(cap); check(); }
@Override public void glClear (int mask) { calls++; gl30.glClear(mask); check(); }
@Override public void glBlendFunc (int sfactor, int dfactor) { calls++; gl30.glBlendFunc(sfactor, dfactor); check(); }
@Override public void glClearColor (float red, float green, float blue, float alpha) { calls++; gl30.glClearColor(red, green, blue, alpha); check(); }
private void drawPolygons(List<PolygonModel> polygons) { Gdx.gl30.glLineWidth(2); Gdx.gl30.glEnable(Gdx.gl30.GL_BLEND); Gdx.gl30.glBlendFunc(Gdx.gl30.GL_SRC_ALPHA, Gdx.gl30.GL_ONE_MINUS_SRC_ALPHA); drawer.begin(ShapeRenderer.ShapeType.Line); drawer.setColor(POLYGON_COLOR); for (PolygonModel polygon : polygons) { List<Vector2> vs = polygon.vertices; for (int i = 1, n = vs.size(); i < n; i++) drawer.line(vs.get(i).x, vs.get(i).y, vs.get(i - 1).x, vs.get(i - 1).y); if (vs.size() > 1) drawer.line(vs.get(0).x, vs.get(0).y, vs.get(vs.size() - 1).x, vs.get(vs.size() - 1).y); } drawer.end(); }
/** * Disposes of all resources this VertexBufferObject uses. */ @Override public void dispose () { GL30 gl = Gdx.gl30; gl.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); gl.glDeleteBuffer(bufferHandle); bufferHandle = 0; deleteVAO(); }
@Override public void glDeleteVertexArrays (int n, int[] arrays, int offset) { calls++; gl30.glDeleteVertexArrays(n, arrays, offset); check(); }
@Override public void glGenVertexArrays (int n, int[] arrays, int offset) { calls++; gl30.glGenVertexArrays(n, arrays, offset); check(); }
@Override public void glDeleteBuffer (int buffer) { calls++; gl30.glDeleteBuffer(buffer); check(); }