Project

General

Profile

« Previous | Next » 

Revision f1d5ea12

Added by Leszek Koltunski over 7 years ago

Small progress with Blur.

View differences:

src/main/java/org/distorted/library/EffectQueuePostprocess.java
49 49
  private static final int NUM_CACHE    = 0;
50 50
  private static final int INDEX = EffectTypes.POSTPROCESS.ordinal();
51 51

  
52
  private static int mNumEffectsH;
53
  private static int mTypeH;
54
  private static int mUniformsH;
52
  private static int mRadiusH;
53
  private static int mOneOverH;
55 54
  private static int mObjDH;
56 55
  private static int mMVPMatrixH;
57 56

  
58 57
  private static final FloatBuffer mQuadPositions, mQuadTexture;
59
  private static DistortedProgram mProgram;
58
  private static DistortedProgram mBlurProgram;
60 59

  
61 60
  static
62 61
    {
......
84 83
  static void createProgram(Resources resources)
85 84
  throws FragmentCompilationException,VertexCompilationException,VertexUniformsException,FragmentUniformsException,LinkingException
86 85
    {
87
    final InputStream postVertexStream   = resources.openRawResource(R.raw.post_vertex_shader);
88
    final InputStream postFragmentStream = resources.openRawResource(R.raw.post_fragment_shader);
86
    final InputStream postVertexStream   = resources.openRawResource(R.raw.blur_vertex_shader);
87
    final InputStream postFragmentStream = resources.openRawResource(R.raw.blur_fragment_shader);
89 88

  
90
    String postFragmentHeader= ("#version 100\n#define NUM_POSTPROCESS "  + DistortedEffects.getMaxPostprocess()+"\n");
89
    mBlurProgram = new DistortedProgram(postVertexStream,postFragmentStream, "", "");
91 90

  
92
    for(EffectNames name: EffectNames.values() )
93
      {
94
      if( name.getType()== EffectTypes.POSTPROCESS)
95
        postFragmentHeader += ("#define "+name.name()+" "+name.ordinal()+"\n");
96
      }
97

  
98
    mProgram = new DistortedProgram(postVertexStream,postFragmentStream, "", postFragmentHeader);
99

  
100
    int postProgramH = mProgram.getProgramHandle();
101
    getUniforms(postProgramH);
102
    }
103

  
104
///////////////////////////////////////////////////////////////////////////////////////////////////
105

  
106
  private static void getUniforms(int mProgramH)
107
    {
108
    mNumEffectsH= GLES30.glGetUniformLocation( mProgramH, "pNumEffects");
109
    mTypeH      = GLES30.glGetUniformLocation( mProgramH, "pType");
110
    mUniformsH  = GLES30.glGetUniformLocation( mProgramH, "pUniforms");
111
    mObjDH      = GLES30.glGetUniformLocation( mProgramH, "u_objD");
112
    mMVPMatrixH = GLES30.glGetUniformLocation(mProgramH, "u_MVPMatrix");
91
    int blurProgramH = mBlurProgram.getProgramHandle();
92
    mRadiusH    = GLES30.glGetUniformLocation( blurProgramH, "u_Radius");
93
    mOneOverH   = GLES30.glGetUniformLocation( blurProgramH, "one_over_objD");
94
    mObjDH      = GLES30.glGetUniformLocation( blurProgramH, "u_objD");
95
    mMVPMatrixH = GLES30.glGetUniformLocation( blurProgramH, "u_MVPMatrix");
113 96
    }
114 97

  
115 98
///////////////////////////////////////////////////////////////////////////////////////////////////
......
156 139
    mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3];
157 140
    }
158 141

  
159
///////////////////////////////////////////////////////////////////////////////////////////////////
160

  
161
  synchronized static void sendZero(float w, float h, float[] mvp)
162
    {
163
    GLES30.glUniform1i( mNumEffectsH, 0);
164
    GLES30.glUniform2f( mObjDH , w, h);
165
    GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mvp , 0);
166
    }
167

  
168 142
///////////////////////////////////////////////////////////////////////////////////////////////////
169 143
// w,h - width and height of hte input texture. MVP - Model-View-Projection matrix to apply to the
170 144
// texture; df - output FBO.
171 145

  
172 146
  synchronized void render(float w, float h, float[] mvp, DistortedFramebuffer df)
173 147
    {
174
    mProgram.useProgram();
148
    mBlurProgram.useProgram();
175 149
    df.setAsOutput();
176 150

  
177
    GLES30.glUniform1i( mNumEffectsH, mNumEffects);
151
    GLES30.glUniform1f( mRadiusH, mUniforms[0]);
152
    GLES30.glUniform2f( mOneOverH, 1/w,1/h);
178 153
    GLES30.glUniform2f( mObjDH , w, h );
179 154
    GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mvp , 0);
180 155

  
181
    if( mNumEffects>0 )
182
      {
183
      GLES30.glUniform1iv( mTypeH    ,                  mNumEffects, mName    ,0);
184
      GLES30.glUniform4fv( mUniformsH, (NUM_UNIFORMS/4)*mNumEffects, mUniforms,0);
185
      }
186

  
187
    GLES30.glVertexAttribPointer(mProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
188
    GLES30.glVertexAttribPointer(mProgram.mAttribute[1], TEX_DATA_SIZE     , GLES30.GL_FLOAT, false, 0, mQuadTexture);
156
    GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[0], POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
157
    GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[1], TEX_DATA_SIZE     , GLES30.GL_FLOAT, false, 0, mQuadTexture);
189 158
    GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
190 159
    }
191 160

  

Also available in: Unified diff