Advertisement
Guest User

Untitled

a guest
May 24th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. public void map(GL4 gl)
  2. {
  3. //Zero out the vertex count from last cycle.
  4. m_vert_count = 0;
  5.  
  6. int[] index_array = new int[INDICES_SIZE];
  7. float[] vertex_array = new float[BUFFER_SIZE / 4];
  8. float[] model_array = new float[16 * MAX_OBJECTS];
  9. float[] joint_array = new float[16 * MAX_OBJECTS * IRenderable.MAX_JOINTS];
  10. float[] inv_bind_array = new float[16 * MAX_OBJECTS * IRenderable.MAX_JOINTS];
  11.  
  12. //For each renderable put it in the buffer.
  13. for(int i = 0; i < m_renderable_meshes.size(); i++)
  14. {
  15. IMesh mesh = m_renderable_meshes.get(i);
  16.  
  17. int texture_index = mesh.getRenderable().getTextureID(TextureTGA.DIFFUSE_MAP);
  18. for(int t = 0; t < m_textures.size(); t++)
  19. {
  20. if(m_textures.get(t).m_id == texture_index)
  21. {
  22. texture_index = t;
  23. break;
  24. }
  25. }
  26.  
  27. mesh.getRenderable().setMatrixIndex(i);
  28. Matrix4f inverse_camera = m_camera.getModelMatrix().invert(new Matrix4f());
  29. Matrix4f model_mat = inverse_camera.mul(mesh.getTransform(), new Matrix4f());
  30. float[] model = model_mat.get(new float[16], 0);
  31. System.arraycopy(model, 0, model_array, i * 16, model.length);
  32.  
  33. Joint[] joints = ((SkinnedMesh) mesh).getAnimatedFrame();
  34. Joint[] inv_binds = ((SkinnedMesh) mesh).getInvBindPose();
  35. for(int j = 0; j < IRenderable.MAX_JOINTS; j++)
  36. {
  37. float[] joint = joints[j].m_matrix.get(new float[16], 0);
  38. float[] inv_bind = inv_binds[j].m_matrix.get(new float[16], 0);
  39. System.arraycopy(joint, 0, joint_array, i * 512 + j * 16, joint.length);
  40. System.arraycopy(inv_bind, 0, inv_bind_array, i * 512 + j * 16, inv_bind.length);
  41. }
  42.  
  43. Vertex[] vertices = mesh.getRenderable().getVertices();
  44. for(int j = 0; j < vertices.length; j++)
  45. {
  46. vertices[j].setTextureIndex(texture_index);
  47. float[] temp = vertices[j].toArray();
  48. System.arraycopy(temp, 0, vertex_array, i * vertices.length * Vertex.SIZE_COUNT + j * temp.length, temp.length);
  49. }
  50.  
  51. //Add the indices to the buffer
  52. int[] indices = mesh.getRenderable().getIndices();
  53. for(int j = 0; j < indices.length; j++)
  54. {
  55. //don't forget the offset...(m_vert_count) or
  56. //we'll only render the first mesh.
  57. index_array[i * indices.length + j] = indices[j] + m_vert_count;
  58. }
  59. m_vert_count += indices.length;
  60. }
  61.  
  62. map(gl, index_array, vertex_array, model_array, joint_array, inv_bind_array);
  63.  
  64. // gl.glBindBuffer(GL4.GL_UNIFORM_BUFFER, 0);
  65. // gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, 0);
  66. // gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, 0);
  67. m_renderable_meshes.clear();
  68. m_textures.clear();
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement