Revision 715e7726
Added by Leszek Koltunski about 6 years ago
src/main/java/org/distorted/library/main/DistortedEffects.java | ||
---|---|---|
29 | 29 |
import org.distorted.library.effect.EffectType; |
30 | 30 |
import org.distorted.library.effect.FragmentEffect; |
31 | 31 |
import org.distorted.library.effect.VertexEffect; |
32 |
import org.distorted.library.mesh.MeshObject;
|
|
32 |
import org.distorted.library.mesh.MeshBase;
|
|
33 | 33 |
import org.distorted.library.message.EffectListener; |
34 | 34 |
import org.distorted.library.program.DistortedProgram; |
35 | 35 |
|
... | ... | |
43 | 43 |
/** |
44 | 44 |
* Class containing Matrix, Vertex, Fragment and Postprocessing effect queues. |
45 | 45 |
* <p> |
46 |
* The queues hold actual effects to be applied to a given (InputSurface,MeshObject) combo.
|
|
46 |
* The queues hold actual effects to be applied to a given (InputSurface,MeshBase) combo.
|
|
47 | 47 |
*/ |
48 | 48 |
public class DistortedEffects |
49 | 49 |
{ |
... | ... | |
423 | 423 |
|
424 | 424 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
425 | 425 |
|
426 |
private void displayNormals(MeshObject mesh)
|
|
426 |
private void displayNormals(MeshBase mesh)
|
|
427 | 427 |
{ |
428 | 428 |
int num = mesh.getNumVertices(); |
429 | 429 |
|
... | ... | |
438 | 438 |
mNormalProgram.useProgram(); |
439 | 439 |
GLES31.glUniformMatrix4fv(mNormalMVPMatrixH, 1, false, mM.getMVP() , 0); |
440 | 440 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.getTFO() ); |
441 |
GLES31.glVertexAttribPointer(mNormalProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
|
|
441 |
GLES31.glVertexAttribPointer(mNormalProgram.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
|
|
442 | 442 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0); |
443 | 443 |
GLES31.glLineWidth(8.0f); |
444 | 444 |
GLES31.glDrawArrays(GLES31.GL_LINES, 0, 2*num); |
... | ... | |
454 | 454 |
|
455 | 455 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
456 | 456 |
|
457 |
void drawPrivOIT(float halfW, float halfH, MeshObject mesh, DistortedOutputSurface surface, long currTime)
|
|
457 |
void drawPrivOIT(float halfW, float halfH, MeshBase mesh, DistortedOutputSurface surface, long currTime)
|
|
458 | 458 |
{ |
459 | 459 |
float halfZ = halfW*mesh.getZFactor(); |
460 | 460 |
|
... | ... | |
471 | 471 |
GLES31.glUniform1ui(mMainOITNumRecordsH, (int)(mBufferSize*surface.mWidth*surface.mHeight) ); |
472 | 472 |
|
473 | 473 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.getVBO() ); |
474 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET0);
|
|
475 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET1);
|
|
476 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET2);
|
|
474 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET0);
|
|
475 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[1], MeshBase.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET1);
|
|
476 |
GLES31.glVertexAttribPointer(mMainOITProgram.mAttribute[2], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET2);
|
|
477 | 477 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0); |
478 | 478 |
|
479 | 479 |
mM.send(surface,halfW,halfH,halfZ,0,1); |
... | ... | |
494 | 494 |
|
495 | 495 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
496 | 496 |
|
497 |
void drawPriv(float halfW, float halfH, MeshObject mesh, DistortedOutputSurface surface, long currTime)
|
|
497 |
void drawPriv(float halfW, float halfH, MeshBase mesh, DistortedOutputSurface surface, long currTime)
|
|
498 | 498 |
{ |
499 | 499 |
float halfZ = halfW*mesh.getZFactor(); |
500 | 500 |
|
... | ... | |
509 | 509 |
GLES31.glUniform1i(mMainTextureH, 0); |
510 | 510 |
|
511 | 511 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.getVBO() ); |
512 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET0);
|
|
513 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET1);
|
|
514 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET2);
|
|
512 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET0);
|
|
513 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshBase.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET1);
|
|
514 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET2);
|
|
515 | 515 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0); |
516 | 516 |
|
517 | 517 |
mM.send(surface,halfW,halfH,halfZ,0,0); |
... | ... | |
931 | 931 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
932 | 932 |
/** |
933 | 933 |
* Returns the maximum number of effects of a given type that can be simultaneously applied to a |
934 |
* single (InputSurface,MeshObject) combo.
|
|
934 |
* single (InputSurface,MeshBase) combo.
|
|
935 | 935 |
* |
936 | 936 |
* @param type {@link EffectType} |
937 | 937 |
* @return The maximum number of effects of a given type. |
src/main/java/org/distorted/library/main/DistortedNode.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.opengl.GLES31; |
23 | 23 |
|
24 |
import org.distorted.library.mesh.MeshObject;
|
|
24 |
import org.distorted.library.mesh.MeshBase;
|
|
25 | 25 |
|
26 | 26 |
import java.util.ArrayList; |
27 | 27 |
import java.util.Collections; |
... | ... | |
68 | 68 |
private boolean mRenderWayOIT; |
69 | 69 |
private DistortedNode mParent; |
70 | 70 |
private DistortedOutputSurface mSurfaceParent; |
71 |
private MeshObject mMesh;
|
|
71 |
private MeshBase mMesh;
|
|
72 | 72 |
private DistortedEffects mEffects; |
73 | 73 |
private DistortedSurface mSurface; |
74 | 74 |
private DistortedRenderState mState; |
... | ... | |
375 | 375 |
* |
376 | 376 |
* @param surface InputSurface to put into the new Node. |
377 | 377 |
* @param effects DistortedEffects to put into the new Node. |
378 |
* @param mesh MeshObject to put into the new Node.
|
|
378 |
* @param mesh MeshBase to put into the new Node.
|
|
379 | 379 |
*/ |
380 |
public DistortedNode(DistortedSurface surface, DistortedEffects effects, MeshObject mesh)
|
|
380 |
public DistortedNode(DistortedSurface surface, DistortedEffects effects, MeshBase mesh)
|
|
381 | 381 |
{ |
382 | 382 |
mSurface = surface; |
383 | 383 |
mEffects = effects; |
... | ... | |
559 | 559 |
* |
560 | 560 |
* @param surface InputSurface to initialize our child Node with. |
561 | 561 |
* @param effects DistortedEffects to initialize our child Node with. |
562 |
* @param mesh MeshObject to initialize our child Node with.
|
|
562 |
* @param mesh MeshBase to initialize our child Node with.
|
|
563 | 563 |
* @return the newly constructed child Node, or null if we couldn't allocate resources. |
564 | 564 |
*/ |
565 |
public DistortedNode attach(DistortedSurface surface, DistortedEffects effects, MeshObject mesh)
|
|
565 |
public DistortedNode attach(DistortedSurface surface, DistortedEffects effects, MeshBase mesh)
|
|
566 | 566 |
{ |
567 | 567 |
DistortedNode node = new DistortedNode(surface,effects,mesh); |
568 | 568 |
mJobs.add(new Job(ATTACH,node)); |
... | ... | |
748 | 748 |
* |
749 | 749 |
* @return Mesh contained in the Node. |
750 | 750 |
*/ |
751 |
public MeshObject getMesh()
|
|
751 |
public MeshBase getMesh()
|
|
752 | 752 |
{ |
753 | 753 |
return mMesh; |
754 | 754 |
} |
src/main/java/org/distorted/library/main/DistortedOutputSurface.java | ||
---|---|---|
23 | 23 |
import android.opengl.Matrix; |
24 | 24 |
|
25 | 25 |
import org.distorted.library.effect.EffectQuality; |
26 |
import org.distorted.library.mesh.MeshObject;
|
|
26 |
import org.distorted.library.mesh.MeshBase;
|
|
27 | 27 |
|
28 | 28 |
import java.util.ArrayList; |
29 | 29 |
|
... | ... | |
921 | 921 |
* |
922 | 922 |
* @param surface InputSurface to initialize our child Node with. |
923 | 923 |
* @param effects DistortedEffects to initialize our child Node with. |
924 |
* @param mesh MeshObject to initialize our child Node with.
|
|
924 |
* @param mesh MeshBase to initialize our child Node with.
|
|
925 | 925 |
* @return the newly constructed child Node, or null if we couldn't allocate resources. |
926 | 926 |
*/ |
927 |
public DistortedNode attach(DistortedSurface surface, DistortedEffects effects, MeshObject mesh)
|
|
927 |
public DistortedNode attach(DistortedSurface surface, DistortedEffects effects, MeshBase mesh)
|
|
928 | 928 |
{ |
929 | 929 |
DistortedNode node = new DistortedNode(surface,effects,mesh); |
930 | 930 |
mJobs.add(new Job(ATTACH,node)); |
src/main/java/org/distorted/library/main/DistortedScreen.java | ||
---|---|---|
27 | 27 |
import android.opengl.GLES31; |
28 | 28 |
|
29 | 29 |
import org.distorted.library.effect.MatrixEffectMove; |
30 |
import org.distorted.library.mesh.MeshBase; |
|
30 | 31 |
import org.distorted.library.mesh.MeshFlat; |
31 |
import org.distorted.library.mesh.MeshObject; |
|
32 | 32 |
import org.distorted.library.type.Static3D; |
33 | 33 |
|
34 | 34 |
/** |
... | ... | |
43 | 43 |
|
44 | 44 |
private static final int NUM_FRAMES = 100; |
45 | 45 |
|
46 |
private MeshObject fpsMesh;
|
|
46 |
private MeshBase fpsMesh;
|
|
47 | 47 |
private DistortedTexture fpsTexture; |
48 | 48 |
private DistortedEffects fpsEffects; |
49 | 49 |
private Canvas fpsCanvas; |
src/main/java/org/distorted/library/main/DistortedSurface.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.opengl.GLES31; |
23 | 23 |
|
24 |
import org.distorted.library.mesh.MeshObject;
|
|
24 |
import org.distorted.library.mesh.MeshBase;
|
|
25 | 25 |
|
26 | 26 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
27 | 27 |
/** |
... | ... | |
100 | 100 |
* |
101 | 101 |
* @return depth of the Object, in pixels. |
102 | 102 |
*/ |
103 |
public int getDepth(MeshObject mesh)
|
|
103 |
public int getDepth(MeshBase mesh)
|
|
104 | 104 |
{ |
105 | 105 |
return mesh==null ? 0 : (int)(mWidth*mesh.getZFactor() ); |
106 | 106 |
} |
src/main/java/org/distorted/library/main/EffectQueuePostprocess.java | ||
---|---|---|
27 | 27 |
import org.distorted.library.effect.EffectType; |
28 | 28 |
import org.distorted.library.effect.PostprocessEffect; |
29 | 29 |
import org.distorted.library.effect.VertexEffect; |
30 |
import org.distorted.library.mesh.MeshObject;
|
|
30 |
import org.distorted.library.mesh.MeshBase;
|
|
31 | 31 |
import org.distorted.library.message.EffectMessage; |
32 | 32 |
import org.distorted.library.program.DistortedProgram; |
33 | 33 |
|
... | ... | |
157 | 157 |
|
158 | 158 |
if( input.setAsInput() ) |
159 | 159 |
{ |
160 |
MeshObject mesh = node.getMesh();
|
|
160 |
MeshBase mesh = node.getMesh();
|
|
161 | 161 |
float margin = mHalo*buffer.mMipmap; |
162 | 162 |
|
163 | 163 |
float halfW = input.getWidth() / 2.0f; |
... | ... | |
171 | 171 |
mPreProgram.useProgram(); |
172 | 172 |
|
173 | 173 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.getVBO() ); |
174 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET0);
|
|
175 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET1);
|
|
176 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET2);
|
|
174 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET0);
|
|
175 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[1], MeshBase.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET1);
|
|
176 |
GLES31.glVertexAttribPointer(mPreProgram.mAttribute[2], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET2);
|
|
177 | 177 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0); |
178 | 178 |
|
179 | 179 |
node.getEffects().send(halfW, halfH, halfZ, margin, buffer, 2); |
src/main/java/org/distorted/library/mesh/MeshBase.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2016 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Distorted. // |
|
5 |
// // |
|
6 |
// Distorted is free software: you can redistribute it and/or modify // |
|
7 |
// it under the terms of the GNU General Public License as published by // |
|
8 |
// the Free Software Foundation, either version 2 of the License, or // |
|
9 |
// (at your option) any later version. // |
|
10 |
// // |
|
11 |
// Distorted is distributed in the hope that it will be useful, // |
|
12 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of // |
|
13 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
|
14 |
// GNU General Public License for more details. // |
|
15 |
// // |
|
16 |
// You should have received a copy of the GNU General Public License // |
|
17 |
// along with Distorted. If not, see <http://www.gnu.org/licenses/>. // |
|
18 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
19 |
|
|
20 |
package org.distorted.library.mesh; |
|
21 |
|
|
22 |
import android.opengl.GLES31; |
|
23 |
|
|
24 |
import org.distorted.library.main.Distorted; |
|
25 |
import org.distorted.library.main.DistortedBuffer; |
|
26 |
|
|
27 |
import java.nio.FloatBuffer; |
|
28 |
|
|
29 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
30 |
/** |
|
31 |
* Abstract class which represents a Mesh, ie 3 arrays of Vertex attributes: 1) positions |
|
32 |
* 2) normals 3) texture coordinates. |
|
33 |
* <p> |
|
34 |
* If you want to render to a particular shape, extend from here, construct the attrib FloatBuffer |
|
35 |
* and provide correct numVertices. |
|
36 |
*/ |
|
37 |
public abstract class MeshBase |
|
38 |
{ |
|
39 |
private static final int BYTES_PER_FLOAT = 4; |
|
40 |
|
|
41 |
public static final int POS_DATA_SIZE= 3; |
|
42 |
public static final int NOR_DATA_SIZE= 3; |
|
43 |
public static final int TEX_DATA_SIZE= 2; |
|
44 |
|
|
45 |
public static final int OFFSET0 = 0; |
|
46 |
public static final int OFFSET1 = (POS_DATA_SIZE )*BYTES_PER_FLOAT; |
|
47 |
public static final int OFFSET2 = (POS_DATA_SIZE+NOR_DATA_SIZE )*BYTES_PER_FLOAT; |
|
48 |
|
|
49 |
public static final int TFSIZE = (POS_DATA_SIZE+POS_DATA_SIZE )*BYTES_PER_FLOAT; |
|
50 |
public static final int VERTSIZE= (POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*BYTES_PER_FLOAT; |
|
51 |
|
|
52 |
private boolean mShowNormals; // when rendering this mesh, draw normal vectors? |
|
53 |
private DistortedBuffer mVBO, mTFO; // main vertex buffer and transform feedback buffer |
|
54 |
private final float zFactor; // strange workaround for the fact that we need to somehow store the 'depth' |
|
55 |
// of the Mesh. Used in DistortedEffects. See DistortedTexture.getDepth(). |
|
56 |
|
|
57 |
//////////////////////////////////////////////////////////////////////////////// |
|
58 |
// derived classes need to compute and fill up those 2 variables with data |
|
59 |
// describing a particular shape. Having done so, call setData() |
|
60 |
int numVertices; |
|
61 |
FloatBuffer mVertAttribs; // packed: PosX,PosY,PosZ, NorX,NorY,NorZ, TexS,TexT |
|
62 |
//////////////////////////////////////////////////////////////////////////////// |
|
63 |
|
|
64 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
65 |
|
|
66 |
MeshBase(float factor) |
|
67 |
{ |
|
68 |
zFactor = factor; |
|
69 |
mShowNormals = false; |
|
70 |
|
|
71 |
mVBO = new DistortedBuffer(GLES31.GL_ARRAY_BUFFER , GLES31.GL_STATIC_READ); |
|
72 |
mTFO = new DistortedBuffer(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, GLES31.GL_STATIC_READ); |
|
73 |
} |
|
74 |
|
|
75 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
76 |
// when a derived class is done computing its mesh, it has to call this method. |
|
77 |
|
|
78 |
void setData(int size, FloatBuffer buffer) |
|
79 |
{ |
|
80 |
mVBO.setData(size*VERTSIZE, buffer); |
|
81 |
mTFO.setData(size*TFSIZE , null ); |
|
82 |
} |
|
83 |
|
|
84 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
85 |
/** |
|
86 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
87 |
* |
|
88 |
* @y.exclude |
|
89 |
*/ |
|
90 |
public int getVBO() |
|
91 |
{ |
|
92 |
return mVBO.mIndex[0]; |
|
93 |
} |
|
94 |
|
|
95 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
96 |
/** |
|
97 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
98 |
* |
|
99 |
* @y.exclude |
|
100 |
*/ |
|
101 |
public int getTFO() |
|
102 |
{ |
|
103 |
return mTFO.mIndex[0]; |
|
104 |
} |
|
105 |
|
|
106 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
107 |
/** |
|
108 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
109 |
* |
|
110 |
* @y.exclude |
|
111 |
*/ |
|
112 |
public int getNumVertices() |
|
113 |
{ |
|
114 |
return numVertices; |
|
115 |
} |
|
116 |
|
|
117 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
118 |
/** |
|
119 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
120 |
* |
|
121 |
* @y.exclude |
|
122 |
*/ |
|
123 |
public float getZFactor() |
|
124 |
{ |
|
125 |
return zFactor; |
|
126 |
} |
|
127 |
|
|
128 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
129 |
// PUBLIC API |
|
130 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
131 |
/** |
|
132 |
* When rendering this Mesh, do we want to render the Normal vectors as well? |
|
133 |
* <p> |
|
134 |
* Will work only on OpenGL ES >= 3.0 devices. |
|
135 |
* |
|
136 |
* @param show Controls if we render the Normal vectors or not. |
|
137 |
*/ |
|
138 |
public void setShowNormals(boolean show) |
|
139 |
{ |
|
140 |
mShowNormals = (Distorted.GLSL >= 300 && show); |
|
141 |
} |
|
142 |
|
|
143 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
144 |
/** |
|
145 |
* When rendering this mesh, should we also draw the normal vectors? |
|
146 |
* |
|
147 |
* @return <i>true</i> if we do render normal vectors |
|
148 |
*/ |
|
149 |
public boolean getShowNormals() |
|
150 |
{ |
|
151 |
return mShowNormals; |
|
152 |
} |
|
153 |
|
|
154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
155 |
/** |
|
156 |
* Release all internal resources. |
|
157 |
*/ |
|
158 |
public void markForDeletion() |
|
159 |
{ |
|
160 |
mVertAttribs.clear(); |
|
161 |
|
|
162 |
mVBO.markForDeletion(); |
|
163 |
mTFO.markForDeletion(); |
|
164 |
} |
|
165 |
} |
|
166 |
|
|
167 |
|
|
168 |
|
src/main/java/org/distorted/library/mesh/MeshCubes.java | ||
---|---|---|
29 | 29 |
* <p> |
30 | 30 |
* Any subset of a MxNx1 cuboid is possible. |
31 | 31 |
*/ |
32 |
public class MeshCubes extends MeshObject
|
|
32 |
public class MeshCubes extends MeshBase
|
|
33 | 33 |
{ |
34 | 34 |
private static final float R = 0.0f;//0.2f; |
35 | 35 |
|
src/main/java/org/distorted/library/mesh/MeshFlat.java | ||
---|---|---|
29 | 29 |
* Perfect if you just want to display a flat Texture. If you are not planning to apply any VERTEX |
30 | 30 |
* effects to it, use MeshFlat(1,1), i.e. a Quad. Otherwise, create more vertices for more realistic effects! |
31 | 31 |
*/ |
32 |
public class MeshFlat extends MeshObject
|
|
32 |
public class MeshFlat extends MeshBase
|
|
33 | 33 |
{ |
34 | 34 |
private int mCols, mRows; |
35 | 35 |
private int remainingVert; |
src/main/java/org/distorted/library/mesh/MeshObject.java | ||
---|---|---|
1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
2 |
// Copyright 2016 Leszek Koltunski // |
|
3 |
// // |
|
4 |
// This file is part of Distorted. // |
|
5 |
// // |
|
6 |
// Distorted is free software: you can redistribute it and/or modify // |
|
7 |
// it under the terms of the GNU General Public License as published by // |
|
8 |
// the Free Software Foundation, either version 2 of the License, or // |
|
9 |
// (at your option) any later version. // |
|
10 |
// // |
|
11 |
// Distorted is distributed in the hope that it will be useful, // |
|
12 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of // |
|
13 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
|
14 |
// GNU General Public License for more details. // |
|
15 |
// // |
|
16 |
// You should have received a copy of the GNU General Public License // |
|
17 |
// along with Distorted. If not, see <http://www.gnu.org/licenses/>. // |
|
18 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
19 |
|
|
20 |
package org.distorted.library.mesh; |
|
21 |
|
|
22 |
import android.opengl.GLES31; |
|
23 |
|
|
24 |
import org.distorted.library.main.Distorted; |
|
25 |
import org.distorted.library.main.DistortedBuffer; |
|
26 |
|
|
27 |
import java.nio.FloatBuffer; |
|
28 |
|
|
29 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
30 |
/** |
|
31 |
* Abstract class which represents a Mesh, ie 3 arrays of Vertex attributes: 1) positions |
|
32 |
* 2) normals 3) texture coordinates. |
|
33 |
* <p> |
|
34 |
* If you want to render to a particular shape, extend from here, construct the attrib FloatBuffer |
|
35 |
* and provide correct numVertices. |
|
36 |
*/ |
|
37 |
public abstract class MeshObject |
|
38 |
{ |
|
39 |
private static final int BYTES_PER_FLOAT = 4; |
|
40 |
|
|
41 |
public static final int POS_DATA_SIZE= 3; |
|
42 |
public static final int NOR_DATA_SIZE= 3; |
|
43 |
public static final int TEX_DATA_SIZE= 2; |
|
44 |
|
|
45 |
public static final int OFFSET0 = 0; |
|
46 |
public static final int OFFSET1 = (POS_DATA_SIZE )*BYTES_PER_FLOAT; |
|
47 |
public static final int OFFSET2 = (POS_DATA_SIZE+NOR_DATA_SIZE )*BYTES_PER_FLOAT; |
|
48 |
|
|
49 |
public static final int TFSIZE = (POS_DATA_SIZE+POS_DATA_SIZE )*BYTES_PER_FLOAT; |
|
50 |
public static final int VERTSIZE= (POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*BYTES_PER_FLOAT; |
|
51 |
|
|
52 |
private boolean mShowNormals; // when rendering this mesh, draw normal vectors? |
|
53 |
private DistortedBuffer mVBO, mTFO; // main vertex buffer and transform feedback buffer |
|
54 |
private final float zFactor; // strange workaround for the fact that we need to somehow store the 'depth' |
|
55 |
// of the Mesh. Used in DistortedEffects. See DistortedTexture.getDepth(). |
|
56 |
|
|
57 |
//////////////////////////////////////////////////////////////////////////////// |
|
58 |
// derived classes need to compute and fill up those 2 variables with data |
|
59 |
// describing a particular shape. Having done so, call setData() |
|
60 |
int numVertices; |
|
61 |
FloatBuffer mVertAttribs; // packed: PosX,PosY,PosZ, NorX,NorY,NorZ, TexS,TexT |
|
62 |
//////////////////////////////////////////////////////////////////////////////// |
|
63 |
|
|
64 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
65 |
|
|
66 |
MeshObject(float factor) |
|
67 |
{ |
|
68 |
zFactor = factor; |
|
69 |
mShowNormals = false; |
|
70 |
|
|
71 |
mVBO = new DistortedBuffer(GLES31.GL_ARRAY_BUFFER , GLES31.GL_STATIC_READ); |
|
72 |
mTFO = new DistortedBuffer(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, GLES31.GL_STATIC_READ); |
|
73 |
} |
|
74 |
|
|
75 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
76 |
// when a derived class is done computing its mesh, it has to call this method. |
|
77 |
|
|
78 |
void setData(int size, FloatBuffer buffer) |
|
79 |
{ |
|
80 |
mVBO.setData(size*VERTSIZE, buffer); |
|
81 |
mTFO.setData(size*TFSIZE , null ); |
|
82 |
} |
|
83 |
|
|
84 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
85 |
/** |
|
86 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
87 |
* |
|
88 |
* @y.exclude |
|
89 |
*/ |
|
90 |
public int getVBO() |
|
91 |
{ |
|
92 |
return mVBO.mIndex[0]; |
|
93 |
} |
|
94 |
|
|
95 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
96 |
/** |
|
97 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
98 |
* |
|
99 |
* @y.exclude |
|
100 |
*/ |
|
101 |
public int getTFO() |
|
102 |
{ |
|
103 |
return mTFO.mIndex[0]; |
|
104 |
} |
|
105 |
|
|
106 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
107 |
/** |
|
108 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
109 |
* |
|
110 |
* @y.exclude |
|
111 |
*/ |
|
112 |
public int getNumVertices() |
|
113 |
{ |
|
114 |
return numVertices; |
|
115 |
} |
|
116 |
|
|
117 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
118 |
/** |
|
119 |
* Not part of public API, do not document (public only because has to be used from the main package) |
|
120 |
* |
|
121 |
* @y.exclude |
|
122 |
*/ |
|
123 |
public float getZFactor() |
|
124 |
{ |
|
125 |
return zFactor; |
|
126 |
} |
|
127 |
|
|
128 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
129 |
// PUBLIC API |
|
130 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
131 |
/** |
|
132 |
* When rendering this Mesh, do we want to render the Normal vectors as well? |
|
133 |
* <p> |
|
134 |
* Will work only on OpenGL ES >= 3.0 devices. |
|
135 |
* |
|
136 |
* @param show Controls if we render the Normal vectors or not. |
|
137 |
*/ |
|
138 |
public void setShowNormals(boolean show) |
|
139 |
{ |
|
140 |
mShowNormals = (Distorted.GLSL >= 300 && show); |
|
141 |
} |
|
142 |
|
|
143 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
144 |
/** |
|
145 |
* When rendering this mesh, should we also draw the normal vectors? |
|
146 |
* |
|
147 |
* @return <i>true</i> if we do render normal vectors |
|
148 |
*/ |
|
149 |
public boolean getShowNormals() |
|
150 |
{ |
|
151 |
return mShowNormals; |
|
152 |
} |
|
153 |
|
|
154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
155 |
/** |
|
156 |
* Release all internal resources. |
|
157 |
*/ |
|
158 |
public void markForDeletion() |
|
159 |
{ |
|
160 |
mVertAttribs.clear(); |
|
161 |
|
|
162 |
mVBO.markForDeletion(); |
|
163 |
mTFO.markForDeletion(); |
|
164 |
} |
|
165 |
} |
|
166 |
|
|
167 |
|
|
168 |
|
Also available in: Unified diff
Rename MeshObject to MeshBase.