Revision b0568eb5
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/examples/stencil/StencilRenderer.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.graphics.Bitmap; |
23 | 23 |
import android.graphics.BitmapFactory; |
24 |
import android.opengl.GLES30; |
|
24 | 25 |
import android.opengl.GLSurfaceView; |
25 | 26 |
|
26 | 27 |
import org.distorted.examples.R; |
27 | 28 |
import org.distorted.library.Distorted; |
28 | 29 |
import org.distorted.library.DistortedEffects; |
30 |
import org.distorted.library.DistortedNode; |
|
29 | 31 |
import org.distorted.library.DistortedScreen; |
30 | 32 |
import org.distorted.library.DistortedTexture; |
31 | 33 |
import org.distorted.library.EffectNames; |
... | ... | |
52 | 54 |
private DistortedTexture mCubeTex, mFloorTex; |
53 | 55 |
private DistortedEffects mCube1Effects, mCube2Effects, mFloorEffects; |
54 | 56 |
private MeshObject mCubeMesh, mFloorMesh; |
55 |
private int bmpHeight, bmpWidth;
|
|
57 |
private DistortedNode mCube1Node, mCube2Node, mFloorNode;
|
|
56 | 58 |
|
57 | 59 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
58 | 60 |
|
... | ... | |
72 | 74 |
|
73 | 75 |
mCube2Effects.brightness(new Static1D(0.5f)); |
74 | 76 |
|
75 |
mScreen = new DistortedScreen(); |
|
76 |
mScreen.attach(mCubeTex ,mCube1Effects,mCubeMesh ); |
|
77 |
mScreen.attach(mFloorTex,mFloorEffects,mFloorMesh); |
|
78 |
mScreen.attach(mCubeTex ,mCube2Effects,mCubeMesh ); |
|
77 |
mCube1Node = new DistortedNode(mCubeTex ,mCube1Effects,mCubeMesh ); |
|
78 |
mCube2Node = new DistortedNode(mCubeTex ,mCube2Effects,mCubeMesh ); |
|
79 |
mFloorNode = new DistortedNode(mFloorTex,mFloorEffects,mFloorMesh); |
|
80 |
|
|
81 |
mFloorNode.glEnable(GLES30.GL_STENCIL_TEST); // Enable Stencil when rendering this Node |
|
82 |
mFloorNode.glStencilFunc(GLES30.GL_ALWAYS, 1, 0xFF); // Set any stencil to 1 |
|
83 |
mFloorNode.glStencilOp(GLES30.GL_KEEP, GLES30.GL_KEEP, GLES30.GL_REPLACE); // replace with 1 when we fail Depth test |
|
84 |
mFloorNode.glStencilMask(0xFF); // Write to stencil buffer |
|
85 |
mFloorNode.glDepthMask(false); // Don't write to depth buffer |
|
86 |
mFloorNode.glClear(GLES30.GL_STENCIL_BUFFER_BIT); // Clear stencil buffer (0 by default) |
|
87 |
|
|
88 |
mCube2Node.glEnable(GLES30.GL_STENCIL_TEST); // Enable Stencil when rendering this Node |
|
89 |
mCube2Node.glStencilFunc(GLES30.GL_EQUAL, 1, 0xFF); // Pass test if stencil value is 1 |
|
90 |
mCube2Node.glStencilMask(0x00); // Don't write anything to stencil buffer |
|
91 |
mCube2Node.glDepthMask(true); // Write to depth buffer |
|
79 | 92 |
|
93 |
mScreen = new DistortedScreen(); |
|
94 |
mScreen.attach(mCube1Node); |
|
95 |
mScreen.attach(mFloorNode); |
|
96 |
mScreen.attach(mCube2Node); |
|
80 | 97 |
mScreen.glClearColor(1.0f,1.0f,1.0f,1.0f); |
81 | 98 |
} |
82 | 99 |
|
... | ... | |
162 | 179 |
catch(IOException e) { } |
163 | 180 |
} |
164 | 181 |
|
165 |
bmpHeight = bitmap.getHeight(); |
|
166 |
bmpWidth = bitmap.getWidth(); |
|
167 |
|
|
168 | 182 |
mCubeTex.setTexture(bitmap); |
169 | 183 |
mFloorTex.setColor(0xff000000); // ARGB |
170 | 184 |
|
Also available in: Unified diff
Progress with Stencil App; should be working now AFAIK but doesn't.