public BufferObject getPointBuffer(RenderContext rc) { if (this.points == null) { return null; } BufferObject bufferObject = rc.getBufferObject(this.pointBufferKey); if (bufferObject != null) { return bufferObject; } // TODO consider a pool of terrain tiles // TODO consider a pool of terrain tile vertex buffers int size = this.points.length * 4; FloatBuffer buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()).asFloatBuffer(); buffer.put(this.points).rewind(); return rc.putBufferObject(this.pointBufferKey, new BufferObject(GLES20.GL_ARRAY_BUFFER, size, buffer)); } }
FloatBuffer buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()).asFloatBuffer(); buffer.put(this.levelSetVertexTexCoords).rewind(); this.levelSetVertexTexCoordBuffer = rc.putBufferObject(this.levelSetVertexTexCoordKey, new BufferObject(GLES20.GL_ARRAY_BUFFER, size, buffer)); this.levelSetTriStripElementRange.upper = buffer.position(); buffer.rewind(); this.levelSetElementBuffer = rc.putBufferObject(this.levelSetElementKey, new BufferObject(GLES20.GL_ELEMENT_ARRAY_BUFFER, size, buffer));
protected void renderSky(RenderContext rc) { Pool<DrawableSkyAtmosphere> pool = rc.getDrawablePool(DrawableSkyAtmosphere.class); DrawableSkyAtmosphere drawable = DrawableSkyAtmosphere.obtain(pool); int size = 128; drawable.program = (SkyProgram) rc.getShaderProgram(SkyProgram.KEY); if (drawable.program == null) { drawable.program = (SkyProgram) rc.putShaderProgram(SkyProgram.KEY, new SkyProgram(rc.resources)); } drawable.vertexPoints = rc.getBufferObject(VERTEX_POINTS_KEY); if (drawable.vertexPoints == null) { drawable.vertexPoints = rc.putBufferObject(VERTEX_POINTS_KEY, this.assembleVertexPoints(rc, size, size, (float) drawable.program.getAltitude())); } drawable.triStripElements = rc.getBufferObject(TRI_STRIP_ELEMENTS_KEY); if (drawable.triStripElements == null) { drawable.triStripElements = rc.putBufferObject(TRI_STRIP_ELEMENTS_KEY, this.assembleTriStripElements(size, size)); } drawable.lightDirection.set(this.activeLightDirection); drawable.globeRadius = rc.globe.getEquatorialRadius(); rc.offerSurfaceDrawable(drawable, Double.POSITIVE_INFINITY /*z-order after all other surface drawables*/); }
buffer.put(this.vertexArray, 0, this.vertexArray.length); drawState.vertexBuffer = new BufferObject(GLES20.GL_ARRAY_BUFFER, size, buffer.rewind()); rc.putBufferObject(this.vertexBufferKey, drawState.vertexBuffer); if (drawState.elementBuffer == null) { drawState.elementBuffer = assembleElements(this.activeIntervals); rc.putBufferObject(elementBufferKey, drawState.elementBuffer);
buffer.put(this.vertexArray.array(), 0, this.vertexArray.size()); drawState.vertexBuffer = new BufferObject(GLES20.GL_ARRAY_BUFFER, size, buffer.rewind()); rc.putBufferObject(this.vertexBufferKey, drawState.vertexBuffer); buffer.put(this.verticalElements.array(), 0, this.verticalElements.size()); drawState.elementBuffer = new BufferObject(GLES20.GL_ELEMENT_ARRAY_BUFFER, size, buffer.rewind()); rc.putBufferObject(this.elementBufferKey, drawState.elementBuffer);
buffer.put(this.vertexArray.array(), 0, this.vertexArray.size()); drawState.vertexBuffer = new BufferObject(GLES20.GL_ARRAY_BUFFER, size, buffer.rewind()); rc.putBufferObject(this.vertexBufferKey, drawState.vertexBuffer); buffer.put(this.verticalElements.array(), 0, this.verticalElements.size()); drawState.elementBuffer = new BufferObject(GLES20.GL_ELEMENT_ARRAY_BUFFER, size, buffer.rewind()); rc.putBufferObject(this.elementBufferKey, drawState.elementBuffer);