Project

General

Profile

« Previous | Next » 

Revision 227b9bca

Added by Leszek Koltunski over 5 years ago

Minor simplifications in Mesh.

View differences:

src/main/java/org/distorted/library/mesh/MeshBase.java
31 31

  
32 32
///////////////////////////////////////////////////////////////////////////////////////////////////
33 33
/**
34
 * Abstract class which represents a Mesh, ie 3 arrays of Vertex attributes: 1) positions
35
 * 2) normals 3) texture coordinates.
34
 * Abstract class which represents a Mesh, i.e. an array of vertices (rendered as a TRIANGLE_STRIP)
36 35
 * <p>
37 36
 * If you want to render to a particular shape, extend from here, construct a float array
38 37
 * containing per-vertex attributes, and call back setData().
39 38
 */
40 39
public abstract class MeshBase
41 40
   {
42
   private static final int POS_DATA_SIZE= 3;
43
   private static final int NOR_DATA_SIZE= 3;
44
   private static final int INF_DATA_SIZE= 3;
45
   private static final int TEX_DATA_SIZE= 2;
41
   // sizes of attributes of an individual vertex.
42
   private static final int POS_DATA_SIZE= 3; // vertex coordinates: x,y,z
43
   private static final int NOR_DATA_SIZE= 3; // normal vector: x,y,z
44
   private static final int INF_DATA_SIZE= 3; // 'inflate' vector: x,y,z
45
   private static final int TEX_DATA_SIZE= 2; // texture coordinates
46 46

  
47 47
   static final int POS_ATTRIB   = 0;
48 48
   static final int NOR_ATTRIB   = POS_DATA_SIZE;
49 49
   static final int INF_ATTRIB   = POS_DATA_SIZE + NOR_DATA_SIZE;
50 50
   static final int TEX_ATTRIB   = POS_DATA_SIZE + NOR_DATA_SIZE + INF_DATA_SIZE;
51
   static final int VERT_ATTRIBS = POS_DATA_SIZE + NOR_DATA_SIZE + INF_DATA_SIZE + TEX_DATA_SIZE;
51
   static final int VERT_ATTRIBS = POS_DATA_SIZE + NOR_DATA_SIZE + INF_DATA_SIZE + TEX_DATA_SIZE;  // number of attributes of a 'normal' vertex
52
   static final int TRAN_ATTRIBS = POS_DATA_SIZE + POS_DATA_SIZE;                                  // number of attributes of a transform feedback vertex
52 53

  
53 54
   private static final int BYTES_PER_FLOAT = 4;
54 55

  
......
56 57
   private static final int OFFSET_NOR = NOR_ATTRIB*BYTES_PER_FLOAT;
57 58
   private static final int OFFSET_INF = INF_ATTRIB*BYTES_PER_FLOAT;
58 59
   private static final int OFFSET_TEX = TEX_ATTRIB*BYTES_PER_FLOAT;
59

  
60
   private static final int TFSIZE  = (POS_DATA_SIZE+POS_DATA_SIZE                            )*BYTES_PER_FLOAT;
61
   private static final int VERTSIZE= (POS_DATA_SIZE+NOR_DATA_SIZE+INF_DATA_SIZE+TEX_DATA_SIZE)*BYTES_PER_FLOAT;
60
   private static final int TRAN_SIZE  = TRAN_ATTRIBS*BYTES_PER_FLOAT;
61
   private static final int VERT_SIZE  = VERT_ATTRIBS*BYTES_PER_FLOAT;
62 62

  
63 63
   private boolean mShowNormals;       // when rendering this mesh, draw normal vectors?
64 64
   private DistortedBuffer mVBO, mTFO; // main vertex buffer and transform feedback buffer
65 65
   private final float zFactor;        // strange workaround for the fact that we need to somehow store the 'depth'
66 66
                                       // of the Mesh. Used in DistortedEffects. See DistortedTexture.getDepth().
67 67
   private int mNumVertices;
68
   private FloatBuffer mVertAttribs;   // packed: PosX,PosY,PosZ, NorX,NorY,NorZ, TexS,TexT
68
   private FloatBuffer mVertAttribs;   // packed: PosX,PosY,PosZ, NorX,NorY,NorZ, InfX,InfY,InfZ, TexS,TexT
69 69

  
70 70
///////////////////////////////////////////////////////////////////////////////////////////////////
71 71

  
......
81 81
///////////////////////////////////////////////////////////////////////////////////////////////////
82 82
// when a derived class is done computing its mesh, it has to call this method.
83 83

  
84
   void setData(int numVertices, float[] vertexAttribs)
84
   void setAttribs(float[] vertexAttribs)
85 85
     {
86
     mNumVertices = numVertices;
86
     mNumVertices = vertexAttribs.length/VERT_ATTRIBS;
87 87

  
88
     mVertAttribs = ByteBuffer.allocateDirect(mNumVertices*VERTSIZE).order(ByteOrder.nativeOrder()).asFloatBuffer();
88
     mVertAttribs = ByteBuffer.allocateDirect(mNumVertices*VERT_SIZE).order(ByteOrder.nativeOrder()).asFloatBuffer();
89 89
     mVertAttribs.put(vertexAttribs).position(0);
90 90

  
91
     mVBO.setData(numVertices*VERTSIZE, mVertAttribs);
92
     mTFO.setData(numVertices*TFSIZE  , null        );
91
     mVBO.setData(mNumVertices*VERT_SIZE, mVertAttribs);
92
     mTFO.setData(mNumVertices*TRAN_SIZE, null        );
93 93
     }
94 94

  
95 95
///////////////////////////////////////////////////////////////////////////////////////////////////
......
134 134
   public void bindVertexAttribs(DistortedProgram program)
135 135
     {
136 136
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mVBO.mIndex[0] );
137
     GLES31.glVertexAttribPointer(program.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_POS);
138
     GLES31.glVertexAttribPointer(program.mAttribute[1], MeshBase.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_NOR);
139
     GLES31.glVertexAttribPointer(program.mAttribute[2], MeshBase.INF_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_INF);
140
     GLES31.glVertexAttribPointer(program.mAttribute[3], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_TEX);
137
     GLES31.glVertexAttribPointer(program.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_POS);
138
     GLES31.glVertexAttribPointer(program.mAttribute[1], NOR_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_NOR);
139
     GLES31.glVertexAttribPointer(program.mAttribute[2], INF_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_INF);
140
     GLES31.glVertexAttribPointer(program.mAttribute[3], TEX_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_TEX);
141 141
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
142 142
     }
143 143

  
......
150 150
   public void bindTransformAttribs(DistortedProgram program)
151 151
     {
152 152
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mTFO.mIndex[0] );
153
     GLES31.glVertexAttribPointer(program.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
153
     GLES31.glVertexAttribPointer(program.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
154 154
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
155 155
     }
156 156

  

Also available in: Unified diff