Revision 8a57da61
Added by Leszek Koltunski over 7 years ago
| src/main/java/org/distorted/library/main/DistortedEffects.java | ||
|---|---|---|
| 274 | 274 |
{
|
| 275 | 275 |
float halfZ = halfW*mesh.zFactor; |
| 276 | 276 |
|
| 277 |
android.util.Log.d("surface", "SurfaceID "+ surface.getID()+" transparent fragments: "+ surface.returnOldCounter() );
|
|
| 278 |
|
|
| 279 | 277 |
mM.compute(currTime); |
| 280 | 278 |
mV.compute(currTime,halfW,halfH,halfZ); |
| 281 | 279 |
mF.compute(currTime,halfW,halfH); |
| ... | ... | |
| 285 | 283 |
|
| 286 | 284 |
mMainProgram.useProgram(); |
| 287 | 285 |
GLES31.glUniform1i(mMainTextureH, 0); |
| 288 |
GLES31.glUniform1i(mCountIndexH, surface.resetNewCounter() );
|
|
| 286 |
GLES31.glUniform1i(mCountIndexH, surface.getNewCounter() );
|
|
| 289 | 287 |
|
| 290 | 288 |
if( Distorted.GLSL >= 300 ) |
| 291 | 289 |
{
|
| src/main/java/org/distorted/library/main/DistortedOutputSurface.java | ||
|---|---|---|
| 114 | 114 |
|
| 115 | 115 |
private int mSurfaceID; |
| 116 | 116 |
private int mLastIndex; |
| 117 |
private int mLastValue =-1; |
|
| 117 | 118 |
// end section |
| 118 | 119 |
//////////////////////////////////////////////////////////////////////////////// |
| 119 | 120 |
|
| ... | ... | |
| 209 | 210 |
|
| 210 | 211 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 211 | 212 |
|
| 212 |
void debugSSBO()
|
|
| 213 |
int getNewCounter()
|
|
| 213 | 214 |
{
|
| 214 |
android.util.Log.d("SSBO", mIntBuffer.get(0)+" "+mIntBuffer.get(1)+" "
|
|
| 215 |
+mIntBuffer.get(2)+" "+mIntBuffer.get(3) ); |
|
| 216 |
} |
|
| 217 |
|
|
| 218 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 219 |
|
|
| 220 |
int resetNewCounter() |
|
| 221 |
{
|
|
| 222 |
mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0); |
|
| 223 |
return BUFFERING*mSurfaceID + mLastIndex; |
|
| 224 |
} |
|
| 215 |
int value = mIntBuffer.get(BUFFERING*mSurfaceID+mLastIndex); |
|
| 225 | 216 |
|
| 226 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
| 227 |
|
|
| 228 |
int returnOldCounter()
|
|
| 229 |
{
|
|
| 230 |
int ret = mIntBuffer.get(BUFFERING*mSurfaceID+mLastIndex);
|
|
| 217 |
if( value!=mLastValue )
|
|
| 218 |
{
|
|
| 219 |
mLastValue = value;
|
|
| 220 |
android.util.Log.d("surface", "surface id: "+mSurfaceID+" value now: "+mLastValue);
|
|
| 221 |
}
|
|
| 231 | 222 |
|
| 232 | 223 |
mLastIndex++; |
| 233 | 224 |
if( mLastIndex>=BUFFERING ) mLastIndex-=BUFFERING; |
| 234 | 225 |
|
| 235 |
return ret; |
|
| 226 |
mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0); |
|
| 227 |
return BUFFERING*mSurfaceID + mLastIndex; |
|
| 236 | 228 |
} |
| 237 | 229 |
|
| 238 | 230 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| src/main/res/raw/main_fragment_shader.glsl | ||
|---|---|---|
| 73 | 73 |
} |
| 74 | 74 |
#endif |
| 75 | 75 |
|
| 76 |
ssbocount[u_currentIndex]= 27 + u_currentIndex;
|
|
| 76 |
if( color.a < 1.0 ) ssbocount[u_currentIndex]++;
|
|
| 77 | 77 |
|
| 78 | 78 |
FRAG_COLOR = vec4(color.rgb * (1.0 + 7.0*v_Normal.z) * 0.125, color.a); |
| 79 | 79 |
} |
Also available in: Unified diff
SSBO: counting of transparent fragments more or less works now. Still the counters are zeroed out in the wrong place - every time we start rendering something to a given Surface, rather than once per frame.