Project

General

Profile

« Previous | Next » 

Revision bed13bea

Added by Leszek Koltunski over 7 years ago

Progress with Glow.

View differences:

src/main/java/org/distorted/library/effect/PostprocessEffect.java
139 139
 *
140 140
 * @y.exclude
141 141
 */
142
  public abstract int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers);
142
  public abstract int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers);
143 143

  
144 144
///////////////////////////////////////////////////////////////////////////////////////////////////
145 145
/**
src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
138 138
 *
139 139
 * @y.exclude
140 140
 */
141
  public int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers)
141
  public int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers)
142 142
    {
143 143
    if( mProgram1 ==null)
144 144
      {
......
146 146
      mProgram2 = mPrograms.get(mIndex2);
147 147
      }
148 148

  
149
    DistortedFramebuffer buffer = buffers[quality];
149
    DistortedFramebuffer buffer = buffers[mQualityLevel];
150 150

  
151 151
    buffer.setAsOutput();
152 152

  
......
198 198
    GLES30.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
199 199
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
200 200

  
201
    return quality;
201
    return 2;
202 202
    }
203 203

  
204 204
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
141 141
 *
142 142
 * @y.exclude
143 143
 */
144
  public int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers)
144
  public int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers)
145 145
    {
146 146
    if( mProgram1 ==null)
147 147
      {
......
149 149
      mProgram2 = mPrograms.get(mIndex2);
150 150
      }
151 151

  
152
    int outQuality = (quality<mQualityLevel ? mQualityLevel:quality);
153

  
154
    DistortedFramebuffer  inBuffer = buffers[quality];
155
    DistortedFramebuffer outBuffer = buffers[outQuality];
156

  
157
    outBuffer.setAsOutput();
152
    DistortedFramebuffer  inBuffer = buffers[0];
153
    DistortedFramebuffer outBuffer = buffers[mQualityLevel];
158 154

  
159 155
    float w1  = outBuffer.getWidth();
160 156
    float h1  = outBuffer.getHeight();
......
172 168
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/w1;
173 169

  
174 170
    mProgram1.useProgram();
171
    outBuffer.setAsOutput();
175 172
    outBuffer.bindForOutput(1);
176 173
    inBuffer.setAsInput(0);
177 174

  
......
189 186
    for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h1;
190 187

  
191 188
    mProgram2.useProgram();
192
    outBuffer.bindForOutput(0);
189
    inBuffer.setAsOutput();
190
    inBuffer.bindForOutput(0);
193 191
    outBuffer.setAsInput(1);
194
/*
195
GLES30.glColorMask(true,true,true,true);
196
GLES30.glClearColor(0.0f,0.0f,0.0f,0.0f);
197
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
198
*/
192

  
199 193
    GLES30.glUniform1f ( mProgram2.mUniform[0] , near);
200 194
    GLES30.glUniform1i ( mProgram2.mUniform[1] , 0 );
201 195
    GLES30.glUniform1fv( mProgram2.mUniform[2] , radius+1, mOffsets,0);
......
206 200
    GLES30.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
207 201
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
208 202

  
209
    return outQuality;
203
    return 2;
210 204
    }
211 205

  
212 206
///////////////////////////////////////////////////////////////////////////////////////////////////
......
253 247
      "    pixel += ( texture(u_ColorTexture,vec2(v_TexCoord.x+u_Offsets[i],v_TexCoord.y)) +                 \n"+
254 248
      "               texture(u_ColorTexture,vec2(v_TexCoord.x-u_Offsets[i],v_TexCoord.y)) ) * u_Weights[i]; \n"+
255 249
      "    }                                                                                                 \n"+
256
      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sign(pixel.a)*u_Color.a);                            \n"+
250
      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sqrt(pixel.a*u_Color.a));                            \n"+
257 251
      "  }";
258 252

  
259 253
    final String glowFragment2 =
......
277 271
      "    pixel += ( texture(u_ColorTexture,vec2(v_TexCoord.x,v_TexCoord.y+u_Offsets[i])) +                 \n"+
278 272
      "               texture(u_ColorTexture,vec2(v_TexCoord.x,v_TexCoord.y-u_Offsets[i])) ) * u_Weights[i]; \n"+
279 273
      "    }                                                                                                 \n"+
280
      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sign(pixel.a)*u_Color.a);                            \n"+
274
      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sqrt(pixel.a*u_Color.a));                            \n"+
281 275
      "  }";
282 276

  
283 277
    mIndex1 = PostprocessEffect.register("GLOW1", glowVertex,glowFragment1);
src/main/java/org/distorted/library/main/DistortedEffects.java
231 231

  
232 232
///////////////////////////////////////////////////////////////////////////////////////////////////
233 233

  
234
  int postprocess(DistortedOutputSurface surface,int quality)
234
  int postprocess(DistortedOutputSurface surface)
235 235
    {
236
    return mP.postprocess(surface,quality);
236
    return mP.postprocess(surface);
237 237
    }
238 238

  
239 239
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/library/main/DistortedOutputSurface.java
251 251

  
252 252
  int renderChildren(long time, int numChildren, ArrayList<DistortedNode> children)
253 253
    {
254
    int inQuality=0, outQuality, numRenders = 0, bucketChange = 0;
254
    int quality=0, numRenders = 0, bucketChange = 0;
255 255
    DistortedNode child1, child2;
256 256
    DistortedEffects lastEffects=null, currEffects;
257 257
    long lastBucket=0, currBucket;
......
278 278
            for(int j=bucketChange; j<i; j++)
279 279
              {
280 280
              child2 = children.get(j);
281
              numRenders += child2.markStencilAndDepth(time,mBuffer[inQuality],lastEffects);
281
              numRenders += child2.markStencilAndDepth(time,mBuffer[quality],lastEffects);
282 282
              }
283 283

  
284
            outQuality  = lastEffects.postprocess(this,inQuality);
285
            numRenders += lastEffects.getNumRenders();
286
            numRenders += blitWithDepth(time, mBuffer[outQuality]);
284
            numRenders += lastEffects.postprocess(this);
285
            numRenders += blitWithDepth(time, mBuffer[quality]);
287 286
            }
288 287

  
289
          inQuality = currEffects.getQuality();
288
          quality = currEffects.getQuality();
290 289
          bucketChange = i;
291 290
          }
292 291

  
293
        numRenders += child1.draw(time,mBuffer[inQuality]);
292
        numRenders += child1.draw(time,mBuffer[quality]);
294 293

  
295 294
        if( i==numChildren-1 )
296 295
          {
297 296
          for(int j=bucketChange; j<numChildren; j++)
298 297
            {
299 298
            child2 = children.get(j);
300
            numRenders += child2.markStencilAndDepth(time,mBuffer[inQuality],currEffects);
299
            numRenders += child2.markStencilAndDepth(time,mBuffer[quality],currEffects);
301 300
            }
302 301

  
303
          outQuality  = currEffects.postprocess(this,inQuality);
304
          numRenders += currEffects.getNumRenders();
305
          numRenders += blitWithDepth(time, mBuffer[outQuality]);
302
          numRenders += currEffects.postprocess(this);
303
          numRenders += blitWithDepth(time, mBuffer[quality]);
306 304
          }
307 305
        }
308 306

  
src/main/java/org/distorted/library/main/EffectQueueMatrix.java
46 46
  private static int mObjDH;      // This is a handle to half a Object dimensions
47 47
  private static int mMVPMatrixH; // the transformation matrix
48 48
  private static int mMVMatrixH;  // the modelview matrix.
49
  
49

  
50 50
///////////////////////////////////////////////////////////////////////////////////////////////////
51 51
   
52 52
  EffectQueueMatrix(long id)
......
70 70

  
71 71
///////////////////////////////////////////////////////////////////////////////////////////////////
72 72
// modify the ModelView matrix so that the object drawn appears to be (about) 'marginInPixels' pixels
73
// larger in each direction when rendered. Used in BLUR.
73
// larger in each direction when rendered. Used in Postprocessing.
74 74

  
75 75
  private void magnify(DistortedOutputSurface projection, float halfX, float halfY, float halfZ, float marginInPixels)
76 76
    {
......
94 94

  
95 95
    float xlen = projection.mWidth *(mMaxx-mMinx)/2;
96 96
    float ylen = projection.mHeight*(mMaxy-mMiny)/2;
97
    float scale = 1.0f + marginInPixels/( xlen>ylen ? ylen:xlen );
98

  
99
    android.util.Log.d("scale", ""+marginInPixels+" scale= "+scale+" xlen="+xlen+" ylen="+ylen+" meshW="+(2*halfX)+" meshY="+(2*halfY));
97
    float scale = 1.0f + 2*marginInPixels/( xlen>ylen ? ylen:xlen );
100 98

  
101 99
    Matrix.scaleM(mViewMatrix, 0, scale, scale, scale);
102 100
    }
src/main/java/org/distorted/library/main/EffectQueuePostprocess.java
101 101

  
102 102
///////////////////////////////////////////////////////////////////////////////////////////////////
103 103

  
104
  int postprocess(DistortedOutputSurface surface, int quality)
104
  int postprocess(DistortedOutputSurface surface)
105 105
    {
106
    int numRenders = 0;
107

  
106 108
    DistortedRenderState.useStencilMark();
107 109

  
108 110
    for(int i=0; i<mNumEffects; i++)
109 111
      {
110
      quality = ((PostprocessEffect)mEffects[i]).apply(mUniforms,NUM_UNIFORMS*i, quality, surface.mBuffer);
112
      numRenders += ((PostprocessEffect)mEffects[i]).apply(mUniforms,NUM_UNIFORMS*i, surface.mBuffer);
111 113
      }
112 114

  
113 115
    DistortedRenderState.unuseStencilMark();
114 116

  
115
    return quality;
117
    return numRenders;
116 118
    }
117 119
  }

Also available in: Unified diff