2017-09-22 5 views
1

私は現在、KotlinでLWJGL経由でOpenGLでゲームを作成しています(Kotlinの学習用)。はい、私はこのコードはその美しいではないことを知っているが、私はまだKotlinの概念に非常に新しいですGLT_INVALID_OPERATION on 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) 
    } 

} 

:私はこのようになりますVBOを表すクラスを作成しました。私は、次のスニペットを実行するとき 今:

var vbo = VBO() 
    var vertexBuffer = BufferUtils.createFloatBuffer(6) 
    vertexBuffer.put(vertices) 
    vertexBuffer.flip() 

    //vbo.bind() 
    vbo.bufferData(vertexBuffer, GL15.GL_STATIC_DRAW) 

を私は右glBufferData()を呼び出した後GL_INVALID_OPERATIONであるOpenGLのエラー1282を取得します。

私はエラーのためにGoogleで検索し、OpenGLの仕様ごとに、GL_INVALID_OPERATIONのみ、以下の2つの場合にglBufferData()によってスローされます。

ゼロがターゲットにバインドされている場合INVALID_OPERATIONエラーがBufferDataによって生成されます。

バッファオブジェクトのBUFFER_IMMUTABLE_STORAGEフラグがTRUEの場合、INVALID_OPERATIONエラーが生成されます。

私のバッファが不変ではないように後者は、ケースすることができず、私は(必ずしも一つであると思われる)、バッファの生成されたIDがゼロでないことを確認しました。

vbo.bind()行のコメントを外してもこれが解決されないことに注意してください。

ありがとうございました!

答えて

2

GL15.glBufferDataの最初のパラメータは、バッファのハンドルではなく、ターゲット(ご使用の場合はGL15.GL_ARRAY_BUFFER)でなければなりません。

+0

ありがとう、私は今、愚かな感じ:D –