diff --git a/kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt b/kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt index 0a45439..2f32146 100644 --- a/kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt +++ b/kgl-android/src/main/kotlin/com/danielgergely/kgl/KglAndroid.kt @@ -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 { val buffers = IntArray(count) GL.glGenBuffers(count, buffers, 0) @@ -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 if (ints[0] == 0) throw Exception() else ints[0] + } + override fun createTextures(n: Int) : Array { val ints = IntArray(n) GL.glGenTextures(n, ints, 0) @@ -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] @@ -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] diff --git a/kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt b/kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt index 63f32ae..d837b79 100644 --- a/kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt +++ b/kgl-jogl/src/main/kotlin/com/danielgergely/kgl/KglJogl.kt @@ -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 if (buffers[0] == 0) throw Exception() else buffers[0] + } + override fun createBuffers(count: Int): Array { val buffers = IntArray(count) gl.glGenBuffers(count, buffers, 0) @@ -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 if (buffer[0] == 0) throw Exception() else buffer[0] + } + override fun createTextures(n: Int): Array { val buffer = IntBuffer.allocate(n) gl.glGenTextures(n, buffer) @@ -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] @@ -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] diff --git a/kgl-lwjgl/src/main/kotlin/com/danielgergely/kgl/KglLwjgl.kt b/kgl-lwjgl/src/main/kotlin/com/danielgergely/kgl/KglLwjgl.kt index a9ab26a..81fc5d6 100644 --- a/kgl-lwjgl/src/main/kotlin/com/danielgergely/kgl/KglLwjgl.kt +++ b/kgl-lwjgl/src/main/kotlin/com/danielgergely/kgl/KglLwjgl.kt @@ -67,6 +67,12 @@ class KglLwjgl : Kgl { GL.glCompileShader(shaderId) } + override fun createBuffer(): GlBuffer { + val array = IntArray(1) + GL.glGenBuffers(array) + return if (array[0] == 0) throw Exception() else array[0] + } + override fun createBuffers(count: Int): Array { val array = IntArray(count) GL.glGenBuffers(array) @@ -86,6 +92,12 @@ class KglLwjgl : Kgl { } } + override fun createTexture(): Texture { + val array = IntArray(1) + GL.glGenTextures(array) + return if (array[0] == 0) throw Exception() else array[0] + } + override fun createTextures(n: Int): Array { val array = IntArray(n) GL.glGenTextures(array) @@ -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) diff --git a/kgl/src/commonMain/kotlin/com/danielgergely/kgl/Kgl.kt b/kgl/src/commonMain/kotlin/com/danielgergely/kgl/Kgl.kt index ee3fce0..e6b9b2c 100644 --- a/kgl/src/commonMain/kotlin/com/danielgergely/kgl/Kgl.kt +++ b/kgl/src/commonMain/kotlin/com/danielgergely/kgl/Kgl.kt @@ -28,6 +28,7 @@ interface Kgl { fun enableVertexAttribArray(location: Int) fun disableVertexAttribArray(location: Int) + fun createBuffer(): GlBuffer fun createBuffers(count: Int): Array fun bindBuffer(target: Int, bufferId: GlBuffer?) fun bufferData(target: Int, sourceData: Buffer, size: Int, usage: Int) @@ -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 fun deleteTexture(texture: Texture) fun texImage2D(target: Int, level: Int, internalFormat: Int, border: Int, resource: TextureResource) @@ -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 diff --git a/kgl/src/jsMain/kotlin/com/danielgergely/kgl/Kgl.kt b/kgl/src/jsMain/kotlin/com/danielgergely/kgl/Kgl.kt index b09542d..dd74354 100644 --- a/kgl/src/jsMain/kotlin/com/danielgergely/kgl/Kgl.kt +++ b/kgl/src/jsMain/kotlin/com/danielgergely/kgl/Kgl.kt @@ -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 = Array(count) { gl.createBuffer() ?: throw Exception() } override fun bindBuffer(target: Int, bufferId: GlBuffer?) = gl.bindBuffer(target, bufferId.unsafeCast()) @@ -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 = Array(n) { gl.createTexture() ?: throw Exception() } override fun deleteTexture(texture: Texture) = gl.deleteTexture(texture.unsafeCast()) override fun texImage2D(target: Int, level: Int, internalFormat: Int, border: Int, resource: TextureResource) @@ -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()) - override fun createFramebuffer(): Framebuffer? = gl.createFramebuffer() + override fun createFramebuffer(): Framebuffer = gl.createFramebuffer() ?: throw Exception() override fun deleteFramebuffer(framebuffer: Framebuffer) = gl.deleteFramebuffer(framebuffer.unsafeCast()) 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(), level) override fun isFramebuffer(framebuffer: Framebuffer): Boolean = gl.isFramebuffer(framebuffer.unsafeCast()) override fun bindRenderbuffer(target: Int, renderbuffer: Renderbuffer?) = gl.bindRenderbuffer(target, renderbuffer.unsafeCast()) - override fun createRenderbuffer(): Renderbuffer? = gl.createRenderbuffer() + override fun createRenderbuffer(): Renderbuffer = gl.createRenderbuffer() ?: throw Exception() override fun deleteRenderbuffer(renderbuffer: Renderbuffer) = gl.deleteRenderbuffer(renderbuffer.unsafeCast()) override fun framebufferRenderbuffer(target: Int, attachment: Int, renderbuffertarget: Int, renderbuffer: Renderbuffer) = gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer.unsafeCast()) override fun isRenderbuffer(renderbuffer: Renderbuffer): Boolean = gl.isRenderbuffer(renderbuffer.unsafeCast())