首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GL_INVALID_OPERATION on glBufferData()在kotlin

GL_INVALID_OPERATION on glBufferData()在kotlin
EN

Stack Overflow用户
提问于 2017-09-22 09:14:39
回答 1查看 532关注 0票数 1

我目前正在通过LWJGL与OpenGL一起在Kotlin创建一个游戏(用于学习Kotlin)。我创建了一个代表VBO的类,如下所示:

代码语言:javascript
复制
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的概念还是很陌生的。现在,当我运行以下代码段时:

代码语言:javascript
复制
  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

我在googled中搜索了错误,根据OpenGL规范,GL_INVALID_OPERATION只在以下两种情况下由glBufferData()引发:

如果零被绑定到目标,则由INVALID_OPERATION生成BufferData错误。 如果缓冲区对象的INVALID_OPERATION标志为真,则生成BUFFER_IMMUTABLE_STORAGE错误。

后一个不可能是,因为我的缓冲区不是不可变的,并且我验证了缓冲区生成的ID不是零(它似乎总是一个)。

请注意,取消对vbo.bind()行的注释并不能解决这个问题。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 09:24:45

GL15.glBufferData的第一个参数必须是目标(在您的例子中是GL15.GL_ARRAY_BUFFER),而不是缓冲区的句柄。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46361056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档