Project

General

Profile

« Previous | Next » 

Revision dedacd82

Added by Leszek Koltunski almost 8 years ago

Javadoc

View differences:

src/main/java/org/distorted/library/Distorted.java
374 374
    {
375 375
    DistortedGridFactory.release();
376 376
    DistortedObjectList.release();
377
    DistortedFramebufferList.release();
377 378
    DistortedNode.release();
378 379
    EffectQueue.reset();
379 380
    EffectMessageSender.stopSending();
src/main/java/org/distorted/library/DistortedFramebuffer.java
23 23
import android.opengl.Matrix;
24 24

  
25 25
///////////////////////////////////////////////////////////////////////////////////////////////////
26

  
26
/**
27
 * Class which represents a OpenGL Framebuffer object.
28
 *
29
 * User is able to create either WRITE-only Framebuffers from objects already constructed outside
30
 * of the library (the first constructor; primary use case: the screen) or an offscreen READ-WRITE
31
 * FBOs (used by the DistortedNode, but also can be used by external users of the library)
32
 */
27 33
public class DistortedFramebuffer
28 34
  {
29 35
  private static final int TEXTURE_FAILED_TO_CREATE = -1;
......
83 89
  private boolean createFBO()
84 90
    {
85 91
    GLES20.glGenTextures(1, texIds, 0);
86

  
87 92
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texIds[0]);
88 93
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
89 94
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
......
94 99
    GLES20.glGenFramebuffers(1, fboIds, 0);
95 100
    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboIds[0]);
96 101
    GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texIds[0], 0);
102

  
97 103
    int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
98 104

  
99 105
    if(status != GLES20.GL_FRAMEBUFFER_COMPLETE)
100 106
      {
101 107
      android.util.Log.e("DistortedFramebuffer", "failed to create framebuffer, error="+status);
102

  
103 108
      GLES20.glDeleteTextures(1, texIds, 0);
104 109
      GLES20.glDeleteFramebuffers(1, fboIds, 0);
105 110
      fboIds[0] = 0;
......
107 112
      return false;
108 113
      }
109 114

  
110
    android.util.Log.e("FBO", "creating ("+mWidth+","+mHeight+") "+fboIds[0]);
115
    DistortedFramebufferList.add(this);
116
    android.util.Log.e("FBO", "created ("+mWidth+","+mHeight+") "+fboIds[0]);
111 117

  
112 118
    return true;
113 119
    }
......
146 152

  
147 153
///////////////////////////////////////////////////////////////////////////////////////////////////
148 154
// PUBLIC API
149

  
155
///////////////////////////////////////////////////////////////////////////////////////////////////
156
/**
157
 * Create a new offscreen FBO.
158
 *
159
 * @param width Width of the COLOR attachment.
160
 * @param height Height of the COLOR attachment.
161
 */
150 162
  public DistortedFramebuffer(int width, int height)
151 163
    {
152 164
    mProjectionMatrix = new float[16];
......
162 174
    mMarked = false;
163 175

  
164 176
    createProjection();
165

  
166
    DistortedFramebufferList.add(this);
167 177
    }
168 178

  
169 179
///////////////////////////////////////////////////////////////////////////////////////////////////
170

  
180
/**
181
 * Create a new DistortedFramebuffer from an already created OpenGL Framebuffer.
182
 *
183
 * @param fbo the ID of a OpenGL Framebuffer object. Typically 0 (the screen)
184
 */
171 185
  public DistortedFramebuffer(int fbo)
172 186
    {
173 187
    mProjectionMatrix = new float[16];
......
182 196
    }
183 197

  
184 198
///////////////////////////////////////////////////////////////////////////////////////////////////
185

  
199
/**
200
 * Mark the underlying OpenGL object for deletion. Actual deletion will take place on the next render.
201
 */
186 202
  public void markForDeletion()
187 203
    {
188 204
    android.util.Log.e("FBO", "marking for deletion ("+mWidth+","+mHeight+") "+fboIds[0]);
......
192 208
    }
193 209

  
194 210
///////////////////////////////////////////////////////////////////////////////////////////////////
195

  
196
  public void setProjection(float FOV, float x, float y)
211
/**
212
 * Create new Projection matrix.
213
 *
214
 * @param fov Vertical 'field of view' of the Projection frustrum (in degrees).
215
 * @param x X-coordinate of the point at which our camera looks at. -1<x<1
216
 * @param y Y-coordinate of the point at which our camera looks at. -1<y<1
217
 */
218
  public void setProjection(float fov, float x, float y)
197 219
    {
198
    mFOV = FOV;
220
    mFOV = fov;
199 221
    mX   = x;
200 222
    mY   = y;
201 223

  
......
203 225
    }
204 226

  
205 227
///////////////////////////////////////////////////////////////////////////////////////////////////
206

  
228
/**
229
 * Resize the underlying Framebuffer.
230
 *
231
 * As the Framebuffer is not created until the first render, typical usage of this API is actually
232
 * to set the size of an not-yet-created Framebuffer of an object that has been created with the
233
 * second constructor.
234
 *
235
 * Fully creating an object, rendering to it, then resizing mid-render is also possible.
236
 *
237
 * @param width The new width.
238
 * @param height The new height.
239
 */
207 240
  public void resize(int width, int height)
208 241
    {
209 242
    if( mWidth!=width || mHeight!=height )
......
218 251
    }
219 252

  
220 253
///////////////////////////////////////////////////////////////////////////////////////////////////
221

  
222
  public int getFBO()
223
    {
224
    return fboIds[0];
225
    }
226

  
227
///////////////////////////////////////////////////////////////////////////////////////////////////
228
// set this as Render Target to draw to. Must be called from a thread holding OpenGL context.
254
/**
255
 * Set this as the Framebuffer to write to.
256
 */
229 257

  
230 258
  public void setOutput()
231 259
    {
......
235 263
    }
236 264

  
237 265
///////////////////////////////////////////////////////////////////////////////////////////////////
238
// set this as Render Target to draw from. Must be called from a thread holding OpenGL context.
266
/**
267
 * Set this as the Framebuffer to read from.
268
 */
239 269

  
240 270
  public void setInput()
241 271
    {
src/main/java/org/distorted/library/DistortedFramebufferList.java
23 23
import java.util.Iterator;
24 24

  
25 25
/**
26
 * List of all DistortedRenderTarget objects currently created by the application.
26
 * List of all DistortedFramebuffer objects currently created by the application.
27 27
 *
28
 * The point: we need to be able ot mark RenderTargets for deletion, and delete all marked
29
 * objects later at a convenient time. Thus we keep all of them in a LinkedList here.
28
 * The point: we need to be able to mark Framebuffers for deletion, and delete all marked
29
 * objects later at a convenient time (that's because we can only delete from a thread that
30
 * holds the OpenGL context so here we provide a framework where one is able to mark for deletion
31
 * at any place and actual deletion takes place on the next render).
30 32
 */
31 33

  
32 34
///////////////////////////////////////////////////////////////////////////////////////////////////
......
50 52
    mMarked = true;
51 53
    }
52 54

  
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56

  
57
  static synchronized void release()
58
    {
59
    mMarked = false;
60
    mList.clear();
61
    }
62

  
53 63
///////////////////////////////////////////////////////////////////////////////////////////////////
54 64
// must be called form a thread holding OpenGL Context
55 65

  

Also available in: Unified diff