我目前正在通過LWJGL(用於學習Kotlin)在OpenGL中通過Kotlin創建一個遊戲。我創建了代表VBO,它看起來像這樣一類:GL_INVALID_OPERATION在glBufferData()kotlin
package de.pascal_riesinger.Testing.gfx
import de.pascal_riesinger.Testing.Log
import de.pascal_riesinger.Testing.LogLevel
import de.pascal_riesinger.Testing.logGLError
import org.lwjgl.opengl.GL15
import java.nio.FloatBuffer
class VBO() {
private var id: Int = 0
init {
Log(LogLevel.DEBUG, "VBO", "Allocating new VBO")
id = GL15.glGenBuffers()
Log(LogLevel.DEBUG, "VBO", "Allocated VBO with id $id")
}
fun bufferData(data: FloatBuffer, usage: Int) {
bind()
GL15.glBufferData(id, data, usage)
unbind()
}
fun bind() {
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, id)
}
fun unbind() {
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0)
}
}
是的,我知道這個代碼是不是漂亮,但我仍然很新的科特林的概念。 現在,當我運行下面的代碼片段:
var vbo = VBO()
var vertexBuffer = BufferUtils.createFloatBuffer(6)
vertexBuffer.put(vertices)
vertexBuffer.flip()
//vbo.bind()
vbo.bufferData(vertexBuffer, GL15.GL_STATIC_DRAW)
我會得到一個OpenGL錯誤1282,它調用glBufferData()
之後是GL_INVALID_OPERATION
。
我GOOGLE的誤差和每OpenGL規範,GL_INVALID_OPERATION
通過glBufferData()
僅在以下兩種情況下拋出:由BufferData產生
一個INVALID_OPERATION錯誤,如果零被綁定到目標。
如果緩衝區對象的BUFFER_IMMUTABLE_STORAGE標誌爲TRUE,則會產生INVALID_OPERATION錯誤。
後者一個不能是的情況下,作爲我的緩衝並不是一成不變的,我驗證該緩衝器的生成的ID不爲零(它似乎永遠是一個)。
請注意,取消註釋vbo.bind()
行不能解決此問題。
感謝您的幫助!
謝謝,我現在覺得很蠢:D –