Advertisement
Guest User

Untitled

a guest
Jul 12th, 2015
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 7.09 KB | None | 0 0
  1. class VAO_PTNT_Lighting_General_Static
  2. {
  3.  
  4.  
  5.   private def renderObjsOffsets = SpecialRenderRegistry.getMashOffsets()
  6.   private def renderObjs = SpecialRenderRegistry.getMashData()
  7.   private def renderTypes = SpecialRenderRegistry.getMashRenderTypes()
  8.   private def getIndexCount() = SpecialRenderRegistry.getMashTotalIndexCount
  9.  
  10.   protected var ID = 0
  11.  
  12.   protected var PBO = 0
  13.   protected var TexBO = 0
  14.   protected var NBO = 0
  15.   protected var TBO = 0
  16.   protected var IBO = 0
  17.  
  18.   protected var obj_data_BO:Array[Array[Int]] = null
  19.  
  20.  
  21.   def constructVAO():Unit ={
  22.     val posList = new RArray[Float]()
  23.     val texList = new RArray[Float]()
  24.     val normalList = new RArray[Float]()
  25.     val tangentList = new RArray[Float]()
  26.     val indexList = new RArray[Int]()
  27.  
  28.     var indexOffset = 0
  29.  
  30.     obj_data_BO = Array.ofDim[Int](renderObjs.size(), 5)
  31.  
  32.     for(i <- 0 until renderObjs.size()){
  33.       val data = renderObjs.getValueAtIndex(i)
  34.       for(vertex <- data._1.array)
  35.       {
  36.         posList  << vertex.pos.toSeq3()
  37.         texList << vertex.texCoord.toSeq2()
  38.         normalList << vertex.normal.toSeq3()
  39.         tangentList << vertex.tangent.toSeq3()
  40.       }
  41.       for(index <- data._2.array){
  42.         indexList << (index + indexOffset)
  43.       }
  44.       indexOffset += data._1.size()
  45.  
  46.  
  47.       val objs = SpecialObjectRegistry.objects.getData(i)
  48.       if(objs != null){
  49.  
  50.  
  51.         for(j <- 0 until 5) {
  52.           obj_data_BO(i)(j) = glGenBuffers()
  53.         }
  54.         val modelMatrices = new RArray[Float](16*objs.size())
  55.         val lightInteractions = new RArray[Int](objs.size())
  56.         val smoothnesses = new RArray[Float](objs.size())
  57.         val matDs = new RArray[Float](3 * objs.size())
  58.         val matSs = new RArray[Float](3 * objs.size())
  59.  
  60.         for(obj <- objs.array){
  61.           modelMatrices << (obj.getTransformationMatrix() * mat4.matrixTRANSLATION(obj.getPosition())).toSeq()
  62.           lightInteractions << (if (obj.lightInteraction) 1 else 0)
  63.           smoothnesses << obj.smoothness
  64.           matDs << obj.matDiffuse.toSeq3()
  65.           matSs << obj.matSpecular.toSeq3()
  66.         }
  67.  
  68.         glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(0))
  69.         glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(modelMatrices.array), GL_STATIC_DRAW)
  70.         glVertexAttribPointer(5, 16, GL11.GL_FLOAT, false, 0, 0)
  71.         glEnableVertexAttribArray(5)
  72.         GL33.glVertexAttribDivisor(5,1)
  73.  
  74.         glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(1))
  75.         glBufferData(GL_ARRAY_BUFFER, Utilities.createIntBuffer(lightInteractions.array), GL_STATIC_DRAW)
  76.         glVertexAttribPointer(6, 1, GL11.GL_UNSIGNED_INT, false, 0, 0) //TODO check sign
  77.         glEnableVertexAttribArray(6)
  78.         GL33.glVertexAttribDivisor(6,1)
  79.  
  80.         glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(2))
  81.         glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(smoothnesses.array), GL_STATIC_DRAW)
  82.         glVertexAttribPointer(7, 1, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
  83.         glEnableVertexAttribArray(7)
  84.         GL33.glVertexAttribDivisor(7,1)
  85.  
  86.         glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(3))
  87.         glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(matDs.array), GL_STATIC_DRAW)
  88.         glVertexAttribPointer(8, 3, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
  89.         glEnableVertexAttribArray(8)
  90.         GL33.glVertexAttribDivisor(8,1)
  91.  
  92.         glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(4))
  93.         glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(matSs.array), GL_STATIC_DRAW)
  94.         glVertexAttribPointer(9, 3, GL11.GL_FLOAT, false, 0, 0) //TODO check sign
  95.         glEnableVertexAttribArray(9)
  96.         GL33.glVertexAttribDivisor(9,1)
  97.       }
  98.     }
  99.  
  100.     ID = glGenVertexArrays()
  101.     glBindVertexArray(ID)
  102.  
  103.     PBO = glGenBuffers()
  104.     glBindBuffer(GL_ARRAY_BUFFER, PBO)
  105.     glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(posList.array), GL_STATIC_DRAW)
  106.     glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0)
  107.     glEnableVertexAttribArray(0)
  108.  
  109.  
  110.     TexBO = glGenBuffers()
  111.     glBindBuffer(GL_ARRAY_BUFFER, TexBO)
  112.     glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(texList.array), GL_STATIC_DRAW)
  113.     glVertexAttribPointer(1, 2, GL11.GL_FLOAT, false, 0, 0)
  114.     glEnableVertexAttribArray(1)
  115.  
  116.     NBO = glGenBuffers()
  117.     glBindBuffer(GL_ARRAY_BUFFER, NBO)
  118.     glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(normalList.array), GL_STATIC_DRAW)
  119.     glVertexAttribPointer(2, 3, GL11.GL_FLOAT, false, 0, 0)
  120.     glEnableVertexAttribArray(2)
  121.  
  122.     TBO = glGenBuffers()
  123.     glBindBuffer(GL_ARRAY_BUFFER, TBO)
  124.     glBufferData(GL_ARRAY_BUFFER, Utilities.createFloatBuffer(tangentList.array), GL_STATIC_DRAW)
  125.     glVertexAttribPointer(3, 3, GL11.GL_FLOAT, false, 0, 0)
  126.     glEnableVertexAttribArray(3)
  127.  
  128.     IBO = glGenBuffers()
  129.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO)
  130.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, Utilities.createIntBuffer(indexList.array), GL_STATIC_DRAW)
  131.  
  132.  
  133.  
  134.  
  135.  
  136.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
  137.     glBindBuffer(GL_ARRAY_BUFFER, 0)
  138.     glBindVertexArray(0)
  139.  
  140.  
  141.   }
  142.  
  143.   override def toString():String =
  144.   {
  145.     var re = ""
  146.     for(data <- renderObjs.getValues().array){
  147.       val vertices = data._1
  148.       val indices = data._2
  149.       var string:String = "Positions "+vertices.size()+":\n"
  150.       var posString:String = ""
  151.       var colorString:String = ""
  152.       for(i <- 0 until vertices.size()){
  153.         val vertex = vertices(i)
  154.         posString += ("\t" + vertex.pos.x + " " + vertex.pos.y + " "+ vertex.pos.z + "\n")
  155.         colorString += ("\t" + vertex.texCoord.x + " " + vertex.texCoord.y)
  156.       }
  157.  
  158.       string += posString + "\nColors:\n" + colorString
  159.  
  160.  
  161.       for(i <- 0 until indices.size()){
  162.         string += indices(i) + " "
  163.       }
  164.       string += " of size "+indices.size()
  165.  
  166.       re += string+"\n"
  167.     }
  168.     re
  169.   }
  170.  
  171.   def bind(){
  172.     glBindVertexArray(ID)
  173.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO)
  174.   }
  175.  
  176.   def unbind(){
  177.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
  178.     glBindVertexArray(0)
  179.   }
  180.  
  181.  
  182.   def render(){
  183.     for(i <- renderObjs.getKeys().array){
  184.  
  185.       bind()
  186.       glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(0))
  187.       glVertexAttribPointer(5, 16, GL11.GL_FLOAT, false, 0, 0)
  188.  
  189.       glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(1))
  190.       glVertexAttribPointer(6, 1, GL11.GL_UNSIGNED_INT, false, 0, 0)
  191.  
  192.       glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(2))
  193.       glVertexAttribPointer(7, 1, GL11.GL_FLOAT, false, 0, 0)
  194.  
  195.       glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(3))
  196.       glVertexAttribPointer(8, 3, GL11.GL_FLOAT, false, 0, 0)
  197.  
  198.       glBindBuffer(GL_ARRAY_BUFFER, obj_data_BO(i)(4))
  199.       glVertexAttribPointer(9, 3, GL11.GL_FLOAT, false, 0, 0)
  200.  
  201.       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
  202.         GL31.glDrawElementsInstanced(renderTypes(i), renderObjs(i)._2.size(), GL_UNSIGNED_INT, renderObjsOffsets(i), SpecialObjectRegistry.objects.getData(i).size())
  203.       }
  204.     }
  205.   }
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement