Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class VAO_PTNT_Lighting_General_Static
- {
- private def renderObjsOffsets = SpecialRenderRegistry.getMashOffsets()
- private def renderObjs = SpecialRenderRegistry.getMashData()
- private def renderTypes = SpecialRenderRegistry.getMashRenderTypes()
- private def getIndexCount() = SpecialRenderRegistry.getMashTotalIndexCount
- protected var ID = 0
- protected var PBO = 0
- protected var TexBO = 0
- protected var NBO = 0
- protected var TBO = 0
- protected var IBO = 0
- protected var obj_data_BO:Array[Array[Int]] = null
- def constructVAO():Unit ={
- val posList = new RArray[Float]()
- val texList = new RArray[Float]()
- val normalList = new RArray[Float]()
- val tangentList = new RArray[Float]()
- val indexList = new RArray[Int]()
- var indexOffset = 0
- obj_data_BO = Array.ofDim[Int](renderObjs.size(), 5)
- for(i <- 0 until renderObjs.size()){
- val data = renderObjs.getValueAtIndex(i)
- for(vertex <- data._1.array)
- {
- posList << vertex.pos.toSeq3()
- texList << vertex.texCoord.toSeq2()
- normalList << vertex.normal.toSeq3()
- tangentList << vertex.tangent.toSeq3()
- }
- for(index <- data._2.array){
- indexList << (index + indexOffset)
- }
- indexOffset += data._1.size()
- val objs = SpecialObjectRegistry.objects.getData(i)
- if(objs != null){
- for(j <- 0 until 5) {
- obj_data_BO(i)(j) = glGenBuffers()
- }
- val modelMatrices = new RArray[Float](16*objs.size())
- val lightInteractions = new RArray[Int](objs.size())
- val smoothnesses = new RArray[Float](objs.size())
- val matDs = new RArray[Float](3 * objs.size())
- val matSs = new RArray[Float](3 * objs.size())
- for(obj <- objs.array){
- modelMatrices << (obj.getTransformationMatrix() * mat4.matrixTRANSLATION(obj.getPosition())).toSeq()
- lightInteractions << (if (obj.lightInteraction) 1 else 0)
- smoothnesses << obj.smoothness
- matDs << obj.matDiffuse.toSeq3()
- matSs << obj.matSpecular.toSeq3()
- }
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(0))
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(modelMatrices.array), GL_STATIC_DRAW)
- glVertexAttribPointer(5, 16, GL11.GL_FLOAT, false, 0, 0)
- glEnableVertexAttribArray(5)
- GL33.glVertexAttribDivisor(5,1)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(1))
- glBufferData(GL_ARRAY_BUFFER, Utilities.createIntBuffer(lightInteractions.array), GL_STATIC_DRAW)
- glVertexAttribPointer(6, 1, GL11.GL_UNSIGNED_INT, false, 0, 0) //TODO check sign
- glEnableVertexAttribArray(6)
- GL33.glVertexAttribDivisor(6,1)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(2))
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(smoothnesses.array), GL_STATIC_DRAW)
- glVertexAttribPointer(7, 1, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
- glEnableVertexAttribArray(7)
- GL33.glVertexAttribDivisor(7,1)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(3))
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(matDs.array), GL_STATIC_DRAW)
- glVertexAttribPointer(8, 3, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
- glEnableVertexAttribArray(8)
- GL33.glVertexAttribDivisor(8,1)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(4))
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(matSs.array), GL_STATIC_DRAW)
- glVertexAttribPointer(9, 3, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
- glEnableVertexAttribArray(9)
- GL33.glVertexAttribDivisor(9,1)
- }
- }
- ID = glGenVertexArrays()
- glBindVertexArray(ID)
- PBO = glGenBuffers()
- glBindBuffer(GL_ARRAY_BUFFER, PBO)
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(posList.array), GL_STATIC_DRAW)
- glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0)
- glEnableVertexAttribArray(0)
- TexBO = glGenBuffers()
- glBindBuffer(GL_ARRAY_BUFFER, TexBO)
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(texList.array), GL_STATIC_DRAW)
- glVertexAttribPointer(1, 2, GL11.GL_FLOAT, false, 0, 0)
- glEnableVertexAttribArray(1)
- NBO = glGenBuffers()
- glBindBuffer(GL_ARRAY_BUFFER, NBO)
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(normalList.array), GL_STATIC_DRAW)
- glVertexAttribPointer(2, 3, GL11.GL_FLOAT, false, 0, 0)
- glEnableVertexAttribArray(2)
- TBO = glGenBuffers()
- glBindBuffer(GL_ARRAY_BUFFER, TBO)
- glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(tangentList.array), GL_STATIC_DRAW)
- glVertexAttribPointer(3, 3, GL11.GL_FLOAT, false, 0, 0)
- glEnableVertexAttribArray(3)
- IBO = glGenBuffers()
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO)
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, Utilities.createIntBuffer(indexList.array), GL_STATIC_DRAW)
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
- glBindBuffer(GL_ARRAY_BUFFER, 0)
- glBindVertexArray(0)
- }
- override def toString():String =
- {
- var re = ""
- for(data <- renderObjs.getValues().array){
- val vertices = data._1
- val indices = data._2
- var string:String = "Positions "+vertices.size()+":\n"
- var posString:String = ""
- var colorString:String = ""
- for(i <- 0 until vertices.size()){
- val vertex = vertices(i)
- posString += ("\t" + vertex.pos.x + " " + vertex.pos.y + " "+ vertex.pos.z + "\n")
- colorString += ("\t" + vertex.texCoord.x + " " + vertex.texCoord.y)
- }
- string += posString + "\nColors:\n" + colorString
- for(i <- 0 until indices.size()){
- string += indices(i) + " "
- }
- string += " of size "+indices.size()
- re += string+"\n"
- }
- re
- }
- def bind(){
- glBindVertexArray(ID)
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO)
- }
- def unbind(){
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
- glBindVertexArray(0)
- }
- def render(){
- for(i <- renderObjs.getKeys().array){
- bind()
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(0))
- glVertexAttribPointer(5, 16, GL11.GL_FLOAT, false, 0, 0)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(1))
- glVertexAttribPointer(6, 1, GL11.GL_UNSIGNED_INT, false, 0, 0)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(2))
- glVertexAttribPointer(7, 1, GL11.GL_FLOAT, false, 0, 0)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(3))
- glVertexAttribPointer(8, 3, GL11.GL_FLOAT, false, 0, 0)
- glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(4))
- glVertexAttribPointer(9, 3, GL11.GL_FLOAT, false, 0, 0)
- if(SpecialObjectRegistry.objects.getData(i) != null){//TODO doesnt work, change tactics, try each obj - own mash, render all VBO; single mash - multiple obj, instanced, one vbo for each mash
- GL31.glDrawElementsInstanced(renderTypes(i), renderObjs(i)._2.size(), GL_UNSIGNED_INT, renderObjsOffsets(i), SpecialObjectRegistry.objects.getData(i).size())
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement