GL_INVALID_OPERATION 关于 kotlin 中的 glBufferData()
GL_INVALID_OPERATION on glBufferData() in kotlin
我目前正在通过 LWJGL 使用 OpenGL 在 Kotlin 中创建游戏(用于学习 Kotlin)。我创建了一个代表 VBO 的 class,它看起来像这样:
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)
}
}
是的,我知道这段代码不是那么漂亮,但我对 Kotlin 的概念还是很陌生。
现在,当我 运行 以下片段时:
var vbo = VBO()
var vertexBuffer = BufferUtils.createFloatBuffer(6)
vertexBuffer.put(vertices)
vertexBuffer.flip()
//vbo.bind()
vbo.bufferData(vertexBuffer, GL15.GL_STATIC_DRAW)
我将在调用 glBufferData()
之后收到 OpenGL 错误 1282,即 GL_INVALID_OPERATION
。
我用谷歌搜索了错误,根据 OpenGL 规范,GL_INVALID_OPERATION
仅在以下两种情况下由 glBufferData()
抛出:
An INVALID_OPERATION error is generated by BufferData if zero is bound to target.
An INVALID_OPERATION error is generated if the BUFFER_IMMUTABLE_STORAGE flag of the buffer object is TRUE.
后一种不可能是这样,因为我的缓冲区不是不可变的,我验证了缓冲区生成的ID不为零(它似乎总是一个).
请注意,取消注释 vbo.bind()
行并不能解决这个问题。
感谢您的帮助!
GL15.glBufferData
的第一个参数必须是一个目标(在你的例子中 GL15.GL_ARRAY_BUFFER
),而不是缓冲区的句柄。
我目前正在通过 LWJGL 使用 OpenGL 在 Kotlin 中创建游戏(用于学习 Kotlin)。我创建了一个代表 VBO 的 class,它看起来像这样:
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)
}
}
是的,我知道这段代码不是那么漂亮,但我对 Kotlin 的概念还是很陌生。 现在,当我 运行 以下片段时:
var vbo = VBO()
var vertexBuffer = BufferUtils.createFloatBuffer(6)
vertexBuffer.put(vertices)
vertexBuffer.flip()
//vbo.bind()
vbo.bufferData(vertexBuffer, GL15.GL_STATIC_DRAW)
我将在调用 glBufferData()
之后收到 OpenGL 错误 1282,即 GL_INVALID_OPERATION
。
我用谷歌搜索了错误,根据 OpenGL 规范,GL_INVALID_OPERATION
仅在以下两种情况下由 glBufferData()
抛出:
An INVALID_OPERATION error is generated by BufferData if zero is bound to target.
An INVALID_OPERATION error is generated if the BUFFER_IMMUTABLE_STORAGE flag of the buffer object is TRUE.
后一种不可能是这样,因为我的缓冲区不是不可变的,我验证了缓冲区生成的ID不为零(它似乎总是一个).
请注意,取消注释 vbo.bind()
行并不能解决这个问题。
感谢您的帮助!
GL15.glBufferData
的第一个参数必须是一个目标(在你的例子中 GL15.GL_ARRAY_BUFFER
),而不是缓冲区的句柄。