Skip to content

Commit

Permalink
Add createBuffer() and createTexture().
Browse files Browse the repository at this point in the history
Also, I had mistakenly(?) thought when `gen___` returned a 0 it should be
treated as a `null`, but I can't find any reference to that in OpenGL docs,
so removed some checks.
  • Loading branch information
xian committed Sep 27, 2019
1 parent cfac67e commit 28b388e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 10 deletions.
17 changes: 15 additions & 2 deletions kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ class KglAndroid : Kgl {

override fun getAttribLocation(programId: Program, name: String) = GL.glGetAttribLocation(programId, name)
override fun bindAttribLocation(programId: Program, index: Int, name: String) = GL.glBindAttribLocation(programId, index, name)

override fun createBuffer(): GlBuffer {
val buffers = IntArray(1)
GL.glGenBuffers(1, buffers, 0)
return buffers[0]
}

override fun createBuffers(count: Int): Array<GlBuffer> {
val buffers = IntArray(count)
GL.glGenBuffers(count, buffers, 0)
Expand Down Expand Up @@ -99,6 +106,12 @@ class KglAndroid : Kgl {

override fun clearColor(r: Float, g: Float, b: Float, a: Float) = GL.glClearColor(r, g, b, a)

override fun createTexture(): Texture {
val ints = IntArray(1)
GL.glGenTextures(1, ints, 0)
return ints[0]
}

override fun createTextures(n: Int) : Array<Texture> {
val ints = IntArray(n)
GL.glGenTextures(n, ints, 0)
Expand Down Expand Up @@ -139,7 +152,7 @@ class KglAndroid : Kgl {
override fun finish() = GL.glFinish()

override fun bindFramebuffer(target: Int, framebuffer: Framebuffer?) = GL.glBindFramebuffer(target, framebuffer ?: 0)
override fun createFramebuffer(): Framebuffer? {
override fun createFramebuffer(): Framebuffer {
val ints = IntArray(1)
GL.glGenFramebuffers(1, ints, 0)
return ints[0]
Expand All @@ -150,7 +163,7 @@ class KglAndroid : Kgl {
override fun isFramebuffer(framebuffer: Framebuffer): Boolean = GL.glIsFramebuffer(framebuffer)

override fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?) = GL.glBindRenderbuffer(target, renderbuffer ?: 0)
override fun createRenderbuffer(): Renderbuffer? {
override fun createRenderbuffer(): Renderbuffer {
val ints = IntArray(1)
GL.glGenRenderbuffers(1, ints, 0)
return ints[0]
Expand Down
16 changes: 14 additions & 2 deletions kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ class KglJogl(@JvmField private val gl: GL) : Kgl {
override fun enableVertexAttribArray(location: Int) = gl.glEnableVertexAttribArray(location)
override fun disableVertexAttribArray(location: Int) = gl.glDisableVertexAttribArray(location)

override fun createBuffer(): GlBuffer {
val buffers = IntArray(1)
gl.glGenBuffers(1, buffers, 0)
return buffers[0]
}

override fun createBuffers(count: Int): Array<GlBuffer> {
val buffers = IntArray(count)
gl.glGenBuffers(count, buffers, 0)
Expand Down Expand Up @@ -162,6 +168,12 @@ class KglJogl(@JvmField private val gl: GL) : Kgl {

override fun clear(mask: Int) = gl.glClear(mask)

override fun createTexture(): Texture {
val buffer = IntBuffer.allocate(1)
gl.glGenTextures(1, buffer)
return buffer[0]
}

override fun createTextures(n: Int): Array<Texture> {
val buffer = IntBuffer.allocate(n)
gl.glGenTextures(n, buffer)
Expand Down Expand Up @@ -205,7 +217,7 @@ class KglJogl(@JvmField private val gl: GL) : Kgl {
override fun finish() = gl.glFinish()

override fun bindFramebuffer(target: Int, framebuffer: Framebuffer?) = gl.glBindFramebuffer(target, framebuffer ?: 0)
override fun createFramebuffer(): Framebuffer? {
override fun createFramebuffer(): Framebuffer {
val ints = IntArray(1)
gl.glGenFramebuffers(1, ints, 0)
return ints[0]
Expand All @@ -216,7 +228,7 @@ class KglJogl(@JvmField private val gl: GL) : Kgl {
override fun isFramebuffer(framebuffer: Framebuffer): Boolean = gl.glIsFramebuffer(framebuffer)

override fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?) = gl.glBindRenderbuffer(target, renderbuffer ?: 0)
override fun createRenderbuffer(): Renderbuffer? {
override fun createRenderbuffer(): Renderbuffer {
val ints = IntArray(1)
gl.glGenRenderbuffers(1, ints, 0)
return ints[0]
Expand Down
16 changes: 14 additions & 2 deletions kgl-lwjgl/src/main/kotlin/com/danielgergely/kgl/KglLwjgl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ class KglLwjgl : Kgl {
GL.glCompileShader(shaderId)
}

override fun createBuffer(): GlBuffer {
val array = IntArray(1)
GL.glGenBuffers(array)
return array[0]
}

override fun createBuffers(count: Int): Array<GlBuffer> {
val array = IntArray(count)
GL.glGenBuffers(array)
Expand All @@ -86,6 +92,12 @@ class KglLwjgl : Kgl {
}
}

override fun createTexture(): Texture {
val array = IntArray(1)
GL.glGenTextures(array)
return array[0]
}

override fun createTextures(n: Int): Array<Texture> {
val array = IntArray(n)
GL.glGenTextures(array)
Expand Down Expand Up @@ -253,14 +265,14 @@ class KglLwjgl : Kgl {
override fun deleteVertexArray(vertexArrayObject: VertexArrayObject) = GL.glDeleteVertexArrays(vertexArrayObject)

override fun bindFramebuffer(target: Int, framebuffer: Framebuffer?) = GL.glBindFramebuffer(target, framebuffer ?: 0)
override fun createFramebuffer(): Framebuffer? = GL.glGenFramebuffers()
override fun createFramebuffer(): Framebuffer = GL.glGenFramebuffers()
override fun deleteFramebuffer(framebuffer: Framebuffer) = GL.glDeleteFramebuffers(framebuffer)
override fun checkFramebufferStatus(target: Int): Int = GL.glCheckFramebufferStatus(target)
override fun framebufferTexture2D(target: Int, attachment: Int, textarget: Int, texture: Texture, level: Int) = GL.glFramebufferTexture2D(target, attachment, textarget, texture, level)
override fun isFramebuffer(framebuffer: Framebuffer): Boolean = GL.glIsFramebuffer(framebuffer)

override fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?) = GL.glBindRenderbuffer(target, renderbuffer ?: 0)
override fun createRenderbuffer(): Renderbuffer? = GL.glGenRenderbuffers()
override fun createRenderbuffer(): Renderbuffer = GL.glGenRenderbuffers()
override fun deleteRenderbuffer(renderbuffer: Renderbuffer) = GL.glDeleteRenderbuffers(renderbuffer)
override fun framebufferRenderbuffer(target: Int, attachment: Int, renderbuffertarget: Int, renderbuffer: Renderbuffer) = GL.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer)
override fun isRenderbuffer(renderbuffer: Renderbuffer): Boolean = GL.glIsRenderbuffer(renderbuffer)
Expand Down
6 changes: 4 additions & 2 deletions kgl/src/commonMain/kotlin/com/danielgergely/kgl/Kgl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ interface Kgl {
fun enableVertexAttribArray(location: Int)
fun disableVertexAttribArray(location: Int)

fun createBuffer(): GlBuffer
fun createBuffers(count: Int): Array<GlBuffer>
fun bindBuffer(target: Int, bufferId: GlBuffer?)
fun bufferData(target: Int, sourceData: Buffer, size: Int, usage: Int)
Expand Down Expand Up @@ -59,6 +60,7 @@ interface Kgl {
fun clearColor(r: Float, g: Float, b: Float, a: Float)
fun clear(mask: Int)

fun createTexture(): Texture
fun createTextures(n: Int) : Array<Texture>
fun deleteTexture(texture: Texture)
fun texImage2D(target: Int, level: Int, internalFormat: Int, border: Int, resource: TextureResource)
Expand All @@ -78,14 +80,14 @@ interface Kgl {
fun finish()

fun bindFramebuffer(target: Int, framebuffer: Framebuffer?)
fun createFramebuffer(): Framebuffer?
fun createFramebuffer(): Framebuffer
fun deleteFramebuffer(framebuffer: Framebuffer)
fun checkFramebufferStatus(target: Int): Int
fun framebufferTexture2D(target: Int, attachment: Int, textarget: Int, texture: Texture, level: Int)
fun isFramebuffer(framebuffer: Framebuffer): Boolean

fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?)
fun createRenderbuffer(): Renderbuffer?
fun createRenderbuffer(): Renderbuffer
fun deleteRenderbuffer(renderbuffer: Renderbuffer)
fun framebufferRenderbuffer(target: Int, attachment: Int, renderbuffertarget: Int, renderbuffer: Renderbuffer)
fun isRenderbuffer(renderbuffer: Renderbuffer): Boolean
Expand Down
6 changes: 4 additions & 2 deletions kgl/src/jsMain/kotlin/com/danielgergely/kgl/Kgl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class KglJs(private val gl: WebGLRenderingContext) : Kgl {
override fun enable(cap : Int) = gl.enable(cap)
override fun disable(cap : Int) = gl.disable(cap)

override fun createBuffer(): GlBuffer = gl.createBuffer() ?: throw Exception()
override fun createBuffers(count: Int): Array<GlBuffer> = Array(count) { gl.createBuffer() ?: throw Exception() }

override fun bindBuffer(target: Int, bufferId: GlBuffer?) = gl.bindBuffer(target, bufferId.unsafeCast<WebGLBuffer>())
Expand Down Expand Up @@ -87,6 +88,7 @@ class KglJs(private val gl: WebGLRenderingContext) : Kgl {
override fun blendFunc(sFactor: Int, dFactor: Int) = gl.blendFunc(sFactor, dFactor)
override fun cullFace(mode: Int) = gl.cullFace(mode)

override fun createTexture(): Texture = gl.createTexture() ?: throw Exception()
override fun createTextures(n: Int): Array<Texture> = Array(n) { gl.createTexture() ?: throw Exception() }
override fun deleteTexture(texture: Texture) = gl.deleteTexture(texture.unsafeCast<WebGLTexture>())
override fun texImage2D(target: Int, level: Int, internalFormat: Int, border: Int, resource: TextureResource)
Expand All @@ -113,14 +115,14 @@ class KglJs(private val gl: WebGLRenderingContext) : Kgl {
override fun finish() = gl.finish()

override fun bindFramebuffer(target: Int, framebuffer: Framebuffer?) = gl.bindFramebuffer(target, framebuffer.unsafeCast<WebGLFramebuffer>())
override fun createFramebuffer(): Framebuffer? = gl.createFramebuffer()
override fun createFramebuffer(): Framebuffer = gl.createFramebuffer() ?: throw Exception()
override fun deleteFramebuffer(framebuffer: Framebuffer) = gl.deleteFramebuffer(framebuffer.unsafeCast<WebGLFramebuffer>())
override fun checkFramebufferStatus(target: Int): Int = gl.checkFramebufferStatus(target)
override fun framebufferTexture2D(target: Int, attachment: Int, textarget: Int, texture: Texture, level: Int) = gl.framebufferTexture2D(target, attachment, textarget, texture.unsafeCast<WebGLTexture>(), level)
override fun isFramebuffer(framebuffer: Framebuffer): Boolean = gl.isFramebuffer(framebuffer.unsafeCast<WebGLFramebuffer>())

override fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?) = gl.bindRenderbuffer(target, renderbuffer.unsafeCast<WebGLRenderbuffer>())
override fun createRenderbuffer(): Renderbuffer? = gl.createRenderbuffer()
override fun createRenderbuffer(): Renderbuffer = gl.createRenderbuffer() ?: throw Exception()
override fun deleteRenderbuffer(renderbuffer: Renderbuffer) = gl.deleteRenderbuffer(renderbuffer.unsafeCast<WebGLRenderbuffer>())
override fun framebufferRenderbuffer(target: Int, attachment: Int, renderbuffertarget: Int, renderbuffer: Renderbuffer) = gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer.unsafeCast<WebGLRenderbuffer>())
override fun isRenderbuffer(renderbuffer: Renderbuffer): Boolean = gl.isRenderbuffer(renderbuffer.unsafeCast<WebGLRenderbuffer>())
Expand Down

0 comments on commit 28b388e

Please sign in to comment.