- 1,111
- 47
- 420
Итак вот мой код:
Тут я пытаюсь нарисовать модель через vbo и клиент стэйт, используя индексы. Вершин 8. Каждая соответствует вершине куба. Индексы проверил сто раз там все верно. Их ровно 36 и все бы должно быть ок. На закоменченные строки просба не ругаться, ибо это результат моих дум. Собственно проблема в том что крашиться где то в нативке. Помогите, будте так добры.
Краш-лог
Scala:
package ru.justagod.objblock.client.render.model
import org.lwjgl.BufferUtils
import org.lwjgl.opengl.GL15.{GL_ELEMENT_ARRAY_BUFFER, glDeleteBuffers, glGenBuffers}
import org.lwjgl.opengl.GL20.{glEnableVertexAttribArray, glVertexAttribPointer}
import org.lwjgl.opengl.{GL11, GL15, GL20}
import ru.justagod.objblock.client.helper.OGLHelper
import ru.justagod.objblock.client.helper.OGLHelper._
import ru.justagod.objblock.client.render.shader.{DefaultShader, SkeletonShader}
/**
* Created by JustAGod on 01.02.2018.
*/
class FastModel(private val vertices: Array[Vertex], private val faces: Array[Face]) {
@inline private val stride = 12
// Indices
private val ibo = glGenBuffers()
// Attributes
private val vao = glGenBuffers()
private var _dead = false
updateBuffers()
private def updateBuffers(): Unit = {
makeIndices()
makeVao()
}
private def makeVao(): Unit = {
val buffer = BufferUtils.createFloatBuffer(vertices.length * stride / 4)
vertices.foreach({
vertex =>
buffer
.put(vertex.x.toFloat)
.put(vertex.y.toFloat)
.put(vertex.z.toFloat)
})
addBufferData(vao, buffer)
}
private def makeIndices(): Unit = {
val index = BufferUtils.createIntBuffer(faces.length * 3)
for (elem <- faces) {
index.put(elem.v1).put(elem.v2).put(elem.v3)
}
addBufferData(ibo, index, GL_ELEMENT_ARRAY_BUFFER, GL15.GL_STATIC_DRAW)
}
def render(): Unit = {
if (dead) throw new RuntimeException("I'm dead")
GL11.glDisable(GL11.GL_CULL_FACE)
GL11.glColor4d(1, 1, 1, 1)
GL11.glDisable(GL11.GL_TEXTURE_2D)
bindBuffer(vao)
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY)
GL11.glVertexPointer(3, GL11.GL_FLOAT, stride, 0)
//GL11.glEnableClientState(GL11.GL_COLOR_ARRAY)
//GL11.glColorPointer(4, GL11.GL_FLOAT, stride, 12)
bindBuffer(ibo, GL_ELEMENT_ARRAY_BUFFER)
GL11.glDrawElements(GL11.GL_TRIANGLES, faces.length * 3, GL11.GL_UNSIGNED_INT, 0)
GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY)
//GL11.glDisableClientState(GL11.GL_COLOR_ARRAY)
unbindBuffer()
unbindBuffer(GL_ELEMENT_ARRAY_BUFFER)
GL11.glEnable(GL11.GL_CULL_FACE)
}
def destroy(): Unit = {
if (dead) throw new RuntimeException("I'm already dead")
glDeleteBuffers(ibo)
glDeleteBuffers(vao)
_dead = true
}
def dead: Boolean = _dead
}
Тут я пытаюсь нарисовать модель через vbo и клиент стэйт, используя индексы. Вершин 8. Каждая соответствует вершине куба. Индексы проверил сто раз там все верно. Их ровно 36 и все бы должно быть ок. На закоменченные строки просба не ругаться, ибо это результат моих дум. Собственно проблема в том что крашиться где то в нативке. Помогите, будте так добры.
Краш-лог
Последнее редактирование: