Revision 7958d843
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java | ||
---|---|---|
35 | 35 |
{ |
36 | 36 |
private static final int MAX_RADIUS = 50; |
37 | 37 |
|
38 |
private Data2D mGlowHaloAndRadius; |
|
39 |
private Data4D mColor; |
|
38 |
private final Data2D mGlowHaloAndRadius;
|
|
39 |
private final Data4D mColor;
|
|
40 | 40 |
|
41 | 41 |
private static final float[] GAUSSIAN = // G(0.00), G(0.03), G(0.06), ..., G(3.00), 0 |
42 | 42 |
{ // where G(x)= (1/(sqrt(2*PI))) * e^(-(x^2)/2). The last 0 terminates. |
... | ... | |
58 | 58 |
// i.e. k(i)=floor((i+3)/2). (the 'i' in k(i) means 'blur taking into account the present pixel and 'i' pixels |
59 | 59 |
// in all 4 directions) |
60 | 60 |
// We need room for MAX_BLUR of them, and sum(i=0...N, floor((i+3)/2)) = N + floor(N*N/4) |
61 |
private static float[] weightsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4]; |
|
62 |
private static float[] offsetsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4]; |
|
63 |
private static float[] mWeights = new float[MAX_RADIUS]; |
|
64 |
private static float[] mOffsets = new float[MAX_RADIUS]; |
|
61 |
private static final float[] weightsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
|
|
62 |
private static final float[] offsetsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
|
|
63 |
private static final float[] mWeights = new float[MAX_RADIUS];
|
|
64 |
private static final float[] mOffsets = new float[MAX_RADIUS];
|
|
65 | 65 |
|
66 | 66 |
private static DistortedProgram mProgram1, mProgram2; |
67 | 67 |
private static int mIndex1, mIndex2; |
src/main/java/org/distorted/library/mesh/MeshBase.java | ||
---|---|---|
52 | 52 |
private static final int ASSOC_UBO_BINDING = 3; |
53 | 53 |
private static final int CENTER_UBO_BINDING = 4; |
54 | 54 |
|
55 |
public static int MAX_EFFECT_COMPONENTS= 100; |
|
56 |
|
|
57 | 55 |
// sizes of attributes of an individual vertex. |
58 | 56 |
private static final int POS_DATA_SIZE= 3; // vertex coordinates: x,y,z |
59 | 57 |
private static final int NOR_DATA_SIZE= 3; // normal vector: x,y,z |
... | ... | |
86 | 84 |
private static final int TEX_COMP_SIZE = 5; // 5 four-byte entities inside the component |
87 | 85 |
|
88 | 86 |
private static boolean mUseCenters; |
87 |
private static int mStride; |
|
88 |
private static int mMaxComponents = 100; |
|
89 | 89 |
|
90 | 90 |
private boolean mShowNormals; // when rendering this mesh, draw normal vectors? |
91 | 91 |
private InternalBuffer mVBO1, mVBO2, mTFO; // main vertex buffer and transform feedback buffer |
... | ... | |
96 | 96 |
private final UniformBlockAssociation mUBA; |
97 | 97 |
private UniformBlockCenter mUBC; |
98 | 98 |
private boolean mStrideCorrected; |
99 |
private static int mStride; |
|
100 | 99 |
|
101 | 100 |
DeferredJobs.JobNode[] mJobNode; |
102 | 101 |
|
... | ... | |
399 | 398 |
if( j==numEffComponents-1 ) index += extraVerticesAfter; |
400 | 399 |
mEffComponent.add(index); |
401 | 400 |
|
402 |
if( origEffComponents<MAX_EFFECT_COMPONENTS )
|
|
401 |
if( origEffComponents<mMaxComponents )
|
|
403 | 402 |
{ |
404 | 403 |
mUBA.copy(origEffComponents, mesh.mUBA, j); |
405 | 404 |
if( mUseCenters ) mUBC.copy(origEffComponents, mesh.mUBC, j); |
... | ... | |
570 | 569 |
|
571 | 570 |
public static int getMaxEffComponents() |
572 | 571 |
{ |
573 |
return MAX_EFFECT_COMPONENTS;
|
|
572 |
return mMaxComponents;
|
|
574 | 573 |
} |
575 | 574 |
|
576 | 575 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
579 | 578 |
*/ |
580 | 579 |
public static void setMaxEffComponents(int max) |
581 | 580 |
{ |
582 |
MAX_EFFECT_COMPONENTS = max;
|
|
581 |
mMaxComponents = max;
|
|
583 | 582 |
} |
584 | 583 |
|
585 | 584 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
1246 | 1245 |
*/ |
1247 | 1246 |
public void setEffectAssociation(int component, int andAssociation, int equAssociation) |
1248 | 1247 |
{ |
1249 |
if( component>=0 && component<MAX_EFFECT_COMPONENTS )
|
|
1248 |
if( component>=0 && component<mMaxComponents )
|
|
1250 | 1249 |
{ |
1251 | 1250 |
if( mJobNode[0]==null ) |
1252 | 1251 |
{ |
... | ... | |
1274 | 1273 |
*/ |
1275 | 1274 |
public void setComponentCenter(int component, float centerX, float centerY, float centerZ) |
1276 | 1275 |
{ |
1277 |
if( component>=0 && component<MAX_EFFECT_COMPONENTS )
|
|
1276 |
if( component>=0 && component<mMaxComponents )
|
|
1278 | 1277 |
{ |
1279 | 1278 |
if( mJobNode[0]==null ) |
1280 | 1279 |
{ |
src/main/java/org/distorted/library/uniformblock/UniformBlockAssociation.java | ||
---|---|---|
22 | 22 |
import android.opengl.GLES30; |
23 | 23 |
|
24 | 24 |
import org.distorted.library.main.InternalBuffer; |
25 |
|
|
26 |
import static org.distorted.library.mesh.MeshBase.MAX_EFFECT_COMPONENTS; |
|
25 |
import org.distorted.library.mesh.MeshBase; |
|
27 | 26 |
|
28 | 27 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
29 | 28 |
/** |
... | ... | |
39 | 38 |
private static final int LOC_EQU = 1; |
40 | 39 |
|
41 | 40 |
private final InternalBuffer mUBO; |
41 |
private final int mMax; |
|
42 | 42 |
private int[] mAssociations; |
43 | 43 |
private int mStride; |
44 | 44 |
|
... | ... | |
46 | 46 |
|
47 | 47 |
public UniformBlockAssociation() |
48 | 48 |
{ |
49 |
mMax = MeshBase.getMaxEffComponents(); |
|
49 | 50 |
mStride = DEFAULT_STRIDE; |
50 |
mAssociations= new int[mStride*MAX_EFFECT_COMPONENTS];
|
|
51 |
mAssociations= new int[mStride*mMax];
|
|
51 | 52 |
|
52 |
for(int i=0; i<MAX_EFFECT_COMPONENTS; i++)
|
|
53 |
for(int i=0; i<mMax; i++)
|
|
53 | 54 |
{ |
54 | 55 |
mAssociations[mStride*i+LOC_AND] = DEFAULT_ASSOCIATION; |
55 | 56 |
mAssociations[mStride*i+LOC_EQU] = i; |
... | ... | |
62 | 63 |
|
63 | 64 |
public UniformBlockAssociation(UniformBlockAssociation original) |
64 | 65 |
{ |
66 |
mMax = original.mMax; |
|
65 | 67 |
mStride = original.mStride; |
66 | 68 |
int size = original.mAssociations.length; |
67 | 69 |
mAssociations= new int[size]; |
... | ... | |
77 | 79 |
{ |
78 | 80 |
if( mStride != stride && stride!=0 ) |
79 | 81 |
{ |
80 |
int[] tmp = new int[stride*MAX_EFFECT_COMPONENTS];
|
|
82 |
int[] tmp = new int[stride*mMax];
|
|
81 | 83 |
|
82 |
for(int i=0; i<MAX_EFFECT_COMPONENTS; i++)
|
|
84 |
for(int i=0; i<mMax; i++)
|
|
83 | 85 |
{ |
84 | 86 |
tmp[stride*i+LOC_AND] = mAssociations[mStride*i+LOC_AND]; |
85 | 87 |
tmp[stride*i+LOC_EQU] = mAssociations[mStride*i+LOC_EQU]; |
... | ... | |
111 | 113 |
|
112 | 114 |
public int getIndex() |
113 | 115 |
{ |
114 |
return mUBO.createImmediatelyInt( 4*mStride*MAX_EFFECT_COMPONENTS, mAssociations);
|
|
116 |
return mUBO.createImmediatelyInt( 4*mStride*mMax, mAssociations);
|
|
115 | 117 |
} |
116 | 118 |
|
117 | 119 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
src/main/java/org/distorted/library/uniformblock/UniformBlockCenter.java | ||
---|---|---|
22 | 22 |
import android.opengl.GLES30; |
23 | 23 |
|
24 | 24 |
import org.distorted.library.main.InternalBuffer; |
25 |
|
|
26 |
import static org.distorted.library.mesh.MeshBase.MAX_EFFECT_COMPONENTS; |
|
25 |
import org.distorted.library.mesh.MeshBase; |
|
27 | 26 |
|
28 | 27 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
29 | 28 |
/** |
... | ... | |
33 | 32 |
*/ |
34 | 33 |
public class UniformBlockCenter |
35 | 34 |
{ |
36 |
private static final int BLOCK_SIZE = 16*MAX_EFFECT_COMPONENTS; |
|
37 |
|
|
38 | 35 |
private final InternalBuffer mUBO; |
39 | 36 |
private final float[] mArray; |
37 |
private final int mMax; |
|
40 | 38 |
|
41 | 39 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
42 | 40 |
|
43 | 41 |
public UniformBlockCenter() |
44 | 42 |
{ |
45 |
mArray= new float[BLOCK_SIZE/4]; |
|
46 |
mUBO = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ); |
|
43 |
mMax = MeshBase.getMaxEffComponents(); |
|
44 |
mArray= new float[4*mMax]; |
|
45 |
mUBO = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ); |
|
47 | 46 |
} |
48 | 47 |
|
49 | 48 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
50 | 49 |
|
51 | 50 |
public UniformBlockCenter(UniformBlockCenter original) |
52 | 51 |
{ |
52 |
mMax = original.mMax; |
|
53 | 53 |
int size = original.mArray.length; |
54 | 54 |
mArray= new float[size]; |
55 | 55 |
System.arraycopy(original.mArray, 0, mArray, 0, size); |
... | ... | |
71 | 71 |
|
72 | 72 |
public int getIndex() |
73 | 73 |
{ |
74 |
return mUBO.createImmediatelyFloat( BLOCK_SIZE, mArray);
|
|
74 |
return mUBO.createImmediatelyFloat( 16*mMax, mArray);
|
|
75 | 75 |
} |
76 | 76 |
|
77 | 77 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
MeshBase's 'MAX_NUM_COMPONENTS' is not a constant - rename!