diff --git a/build.gradle b/build.gradle index 50f87b8..95db7f1 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ apply plugin: 'com.github.johnrengelman.shadow' buildscript { - ext.kotlinVersion = '1.2.51' + ext.kotlinVersion = '1.2.60' repositories { jcenter() // shadow @@ -34,7 +34,7 @@ dependencies { implementation "$kotlin-stdlib:$kotlinVersion" implementation "$kotlin-reflect:$kotlinVersion" - implementation 'com.github.kotlin-graphics:gli:62e94a11cc' + implementation 'com.github.kotlin-graphics:gli:7f4fbde' //testCompile 'io.kotlintest:kotlintest-runner-junit5:3.0.6' diff --git a/src/main/kotlin/gln/draw/draw.kt b/src/main/kotlin/gln/draw/draw.kt index dd044bc..14bce11 100644 --- a/src/main/kotlin/gln/draw/draw.kt +++ b/src/main/kotlin/gln/draw/draw.kt @@ -4,6 +4,7 @@ package gln.draw import glm_.BYTES import glm_.buffer.cap +import glm_.buffer.rem import glm_.size import org.lwjgl.opengl.* import java.nio.ByteBuffer @@ -28,13 +29,14 @@ inline fun glDrawArraysInstancedBaseInstance(count: Int, primCount: Int, baseIns inline fun glDrawArraysInstancedBaseInstance(mode: Int, count: Int, primCount: Int, baseInstance: Int) = GL42.glDrawArraysInstancedBaseInstance(mode, 0, count, primCount, baseInstance) // TODO check primcount, also stride: Int = 0 inline fun glMultiDrawArraysIndirect(indirect: ByteBuffer) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.size / (4 * Int.BYTES), 0) + inline fun glMultiDrawArraysIndirect(mode: Int, indirect: ByteBuffer) = GL43.glMultiDrawArraysIndirect(mode, indirect, indirect.size / (4 * Int.BYTES), 0) inline fun glMultiDrawArraysIndirect(mode: Int, indirect: ByteBuffer, primCount: Int) = GL43.glMultiDrawArraysIndirect(mode, indirect, primCount, 0) -inline fun glMultiDrawArraysIndirect(indirect: IntBuffer) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.cap / 4, 0) -inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntBuffer) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.cap / 4, 0) // TODO should TRIANGLES not be mode instead? what does that mean for primcount calculation? +inline fun glMultiDrawArraysIndirect(indirect: IntBuffer) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.rem / DrawArraysIndirectCommand_LENGTH, 0) +inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntBuffer) = GL43.glMultiDrawArraysIndirect(mode, indirect, indirect.rem / DrawArraysIndirectCommand_LENGTH, 0) inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntBuffer, primCount: Int) = GL43.glMultiDrawArraysIndirect(mode, indirect, primCount, 0) -inline fun glMultiDrawArraysIndirect(indirect: IntArray) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.size / 4, 0) -inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntArray) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.size / 4, 0) // TODO should TRIANGLES not be mode instead? what does that mean for primcount calculation? +inline fun glMultiDrawArraysIndirect(indirect: IntArray) = GL43.glMultiDrawArraysIndirect(GL11.GL_TRIANGLES, indirect, indirect.size / DrawArraysIndirectCommand_LENGTH, 0) +inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntArray) = GL43.glMultiDrawArraysIndirect(mode, indirect, indirect.size / DrawArraysIndirectCommand_LENGTH, 0) inline fun glMultiDrawArraysIndirect(mode: Int, indirect: IntArray, primCount: Int) = GL43.glMultiDrawArraysIndirect(mode, indirect, primCount, 0) inline fun glMultiDrawArraysIndirectBindlessNV(indirect: ByteBuffer, drawCount: Int, vertexBufferCount: Int) = glMultiDrawArraysIndirectBindlessNV(GL11.GL_TRIANGLES, indirect, drawCount, vertexBufferCount) @@ -49,4 +51,15 @@ inline fun glDrawElements(mode: Int, count: Int, type: Int) = GL11.glDrawElement inline fun glDrawElementsBaseVertex(count: Int, type: Int, indices_buffer_offset: Long, basevertex: Int) = GL32.glDrawElementsBaseVertex(GL11.GL_TRIANGLES, count, type, indices_buffer_offset, basevertex) // TODO finish -inline fun glDrawElementsInstancedBaseVertex(count: Int, type: Int, primcount: Int, basevertex: Int) = GL32.glDrawElementsInstancedBaseVertex(GL11.GL_TRIANGLES, count, type, 0, primcount, basevertex) \ No newline at end of file +inline fun glDrawElementsInstancedBaseVertex(count: Int, type: Int, primcount: Int, basevertex: Int) = GL32.glDrawElementsInstancedBaseVertex(GL11.GL_TRIANGLES, count, type, 0, primcount, basevertex) + + +/** + * typedef struct { + * uint count; + * uint instanceCount; + * uint first; + * uint baseInstance; + * } DrawArraysIndirectCommand; + */ +val DrawArraysIndirectCommand_LENGTH = 4 // TODO property of inline classe \ No newline at end of file