Skip to content

Commit

Permalink
Use GLBufferObject for TerrainTiles
Browse files Browse the repository at this point in the history
  • Loading branch information
Your Name committed Jan 14, 2025
1 parent 2c4bac4 commit da19355
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import earth.worldwind.geom.Range
import earth.worldwind.geom.Sector
import earth.worldwind.geom.Vec3
import earth.worldwind.globe.Globe
import earth.worldwind.render.buffer.FloatBufferObject
import earth.worldwind.render.buffer.ShortBufferObject
import earth.worldwind.render.buffer.GLBufferObject
import earth.worldwind.util.Pool
import earth.worldwind.util.kgl.GL_FLOAT
import earth.worldwind.util.kgl.GL_LINES
Expand All @@ -19,10 +18,10 @@ open class BasicDrawableTerrain protected constructor(): DrawableTerrain {
override val vertexOrigin = Vec3()
val lineElementRange = Range()
val triStripElementRange = Range()
var vertexPoints: FloatBufferObject? = null
var vertexHeights: FloatBufferObject? = null
var vertexTexCoords: FloatBufferObject? = null
var elements: ShortBufferObject? = null
var vertexPoints: GLBufferObject? = null
var vertexHeights: GLBufferObject? = null
var vertexTexCoords: GLBufferObject? = null
var elements: GLBufferObject? = null
private var pool: Pool<BasicDrawableTerrain>? = null

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import earth.worldwind.geom.Range
import earth.worldwind.geom.Sector
import earth.worldwind.globe.Globe
import earth.worldwind.render.RenderContext
import earth.worldwind.render.buffer.FloatBufferObject
import earth.worldwind.render.buffer.ShortBufferObject
import earth.worldwind.render.buffer.GLBufferObject
import earth.worldwind.render.buffer.NumericArray
import earth.worldwind.util.*
import earth.worldwind.util.kgl.GL_ARRAY_BUFFER
import earth.worldwind.util.kgl.GL_ELEMENT_ARRAY_BUFFER
Expand Down Expand Up @@ -42,8 +42,8 @@ open class BasicTessellator: Tessellator, TileFactory {
protected var levelSetTriStripElements: ShortArray? = null
protected val levelSetLineElementRange = Range()
protected val levelSetTriStripElementRange = Range()
protected var levelSetVertexTexCoordBuffer: FloatBufferObject? = null
protected var levelSetElementBuffer: ShortBufferObject? = null
protected var levelSetVertexTexCoordBuffer: GLBufferObject? = null
protected var levelSetElementBuffer: GLBufferObject? = null
protected var lastGlobeState: Globe.State? = null
/**
* Cache size should be adjusted in case of levelSet or detailControl changed.
Expand Down Expand Up @@ -165,13 +165,17 @@ open class BasicTessellator: Tessellator, TileFactory {
val triStripElements = levelSetTriStripElements ?: assembleTriStripElements(numLat, numLon).also { levelSetTriStripElements = it }

// Retrieve or create the level set's OpenGL vertex tex coord buffer object.
levelSetVertexTexCoordBuffer = rc.getBufferObject(LEVEL_SET_VERTEX_TEX_COORD_KEY) {
FloatBufferObject(GL_ARRAY_BUFFER, vertexTexCoords)
levelSetVertexTexCoordBuffer = rc.getGLBufferObject(LEVEL_SET_VERTEX_TEX_COORD_KEY) {
GLBufferObject(GL_ARRAY_BUFFER, 0)
}
rc.offerGLBufferUpload(LEVEL_SET_VERTEX_TEX_COORD_KEY, 1) { NumericArray.Floats(vertexTexCoords) }

// Retrieve or create the level set's OpenGL element buffer object.
levelSetElementBuffer = rc.getBufferObject(LEVEL_SET_ELEMENT_KEY) {
ShortBufferObject(GL_ELEMENT_ARRAY_BUFFER, lineElements + triStripElements).also {
levelSetElementBuffer = rc.getGLBufferObject(LEVEL_SET_ELEMENT_KEY) {
GLBufferObject(GL_ELEMENT_ARRAY_BUFFER, 0)
}
rc.offerGLBufferUpload(LEVEL_SET_ELEMENT_KEY, 1) {
NumericArray.Shorts(lineElements + triStripElements).also {
levelSetLineElementRange.upper = lineElements.size
levelSetTriStripElementRange.lower = lineElements.size
levelSetTriStripElementRange.upper = lineElements.size + triStripElements.size
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import earth.worldwind.geom.Sector
import earth.worldwind.geom.Vec3
import earth.worldwind.globe.Globe
import earth.worldwind.render.RenderContext
import earth.worldwind.render.buffer.FloatBufferObject
import earth.worldwind.render.buffer.GLBufferObject
import earth.worldwind.render.buffer.NumericArray
import earth.worldwind.util.Level
import earth.worldwind.util.Tile
import earth.worldwind.util.kgl.GL_ARRAY_BUFFER
Expand Down Expand Up @@ -73,12 +74,16 @@ open class TerrainTile(sector: Sector, level: Level, row: Int, column: Int): Til
sortOrder = drawSortOrder(rc)
}

fun getHeightBuffer(rc: RenderContext) = rc.getBufferObject(heightBufferKey) {
FloatBufferObject(GL_ARRAY_BUFFER, heights)
fun getHeightBuffer(rc: RenderContext) : GLBufferObject {
val buffer = rc.getGLBufferObject(heightBufferKey) { GLBufferObject(GL_ARRAY_BUFFER, 0) }
rc.offerGLBufferUpload(heightBufferKey, 1) { NumericArray.Floats(heights) }
return buffer
}

fun getPointBuffer(rc: RenderContext) = rc.getBufferObject(pointBufferKey) {
FloatBufferObject(GL_ARRAY_BUFFER, points)
fun getPointBuffer(rc: RenderContext) : GLBufferObject {
val buffer = rc.getGLBufferObject(pointBufferKey) { GLBufferObject(GL_ARRAY_BUFFER, 0) }
rc.offerGLBufferUpload(pointBufferKey, 1) { NumericArray.Floats(points) }
return buffer
}

protected fun updateHeightBufferKey() {
Expand Down

0 comments on commit da19355

Please sign in to comment.