Project

General

Profile

« Previous | Next » 

Revision 09ab7524

Added by Leszek Koltunski almost 8 years ago

Introduce 3 types of Surfaces: System, Tree, User

View differences:

src/main/java/org/distorted/library/DistortedEffects.java
77 77
  private static long mNextID =0;
78 78
  private long mID;
79 79

  
80
  private static DistortedFramebuffer mBufferFBO = new DistortedFramebuffer(true,1,1);
80
  private static DistortedFramebuffer mBufferFBO = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
81 81

  
82 82
  private EffectQueueMatrix      mM;
83 83
  private EffectQueueFragment    mF;
src/main/java/org/distorted/library/DistortedFramebuffer.java
154 154
    }
155 155

  
156 156
///////////////////////////////////////////////////////////////////////////////////////////////////
157
// create 'system' Framebuffers, i.e. those that are used internally by the library.
158
// Those do not get removed in onDestroy();
157
// create SYSTEM or TREE framebuffers (those are just like normal FBOs, just hold information
158
// that they were autocreated only for the Library's internal purposes (SYSTEM) or for using
159
// inside a Tree of DistortedNodes (TREE)
160
// SYSTEM surfaces do not get removed in onDestroy().
159 161

  
160
  DistortedFramebuffer(boolean depthEnabled, int width, int height)
162
  DistortedFramebuffer(boolean depthEnabled, int type, int width, int height)
161 163
    {
162
    super(width,height,NOT_CREATED_YET, (depthEnabled ? NOT_CREATED_YET:DONT_CREATE),NOT_CREATED_YET, true);
164
    super(width,height,NOT_CREATED_YET, (depthEnabled ? NOT_CREATED_YET:DONT_CREATE),NOT_CREATED_YET, type);
163 165
    }
164 166

  
165 167
///////////////////////////////////////////////////////////////////////////////////////////////////
......
175 177
  @SuppressWarnings("unused")
176 178
  public DistortedFramebuffer(int width, int height, boolean depthEnabled)
177 179
    {
178
    super(width,height,NOT_CREATED_YET,(depthEnabled ? NOT_CREATED_YET:DONT_CREATE),NOT_CREATED_YET,false);
180
    super(width,height,NOT_CREATED_YET,(depthEnabled ? NOT_CREATED_YET:DONT_CREATE),NOT_CREATED_YET,TYPE_USER);
179 181
    }
180 182

  
181 183
///////////////////////////////////////////////////////////////////////////////////////////////////
......
189 191
  @SuppressWarnings("unused")
190 192
  public DistortedFramebuffer(int width, int height)
191 193
    {
192
    super(width,height,NOT_CREATED_YET,DONT_CREATE,NOT_CREATED_YET,false);
194
    super(width,height,NOT_CREATED_YET,DONT_CREATE,NOT_CREATED_YET,TYPE_USER);
193 195
    }
194 196

  
195 197
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/library/DistortedNode.java
169 169
        else
170 170
          {
171 171
          android.util.Log.d("NODE", "creating new FBO of node surfaceID="+mSurface.getID());
172
          newData.mFBO = new DistortedFramebuffer(mSurface.getWidth(),mSurface.getHeight());
172
          newData.mFBO = new DistortedFramebuffer(true,DistortedSurface.TYPE_TREE,mSurface.getWidth(),mSurface.getHeight());
173 173
          }
174 174
        }
175 175
      if( mNumChildren[0]==0 && newData.mFBO!=null )
......
303 303

  
304 304
      if( node.mSurface instanceof DistortedTexture )
305 305
        {
306
        mSurface = new DistortedTexture(w,h);
306
        mSurface = new DistortedTexture(w,h, DistortedSurface.TYPE_TREE);
307 307
        }
308 308
      else if( node.mSurface instanceof DistortedFramebuffer )
309 309
        {
310 310
        boolean hasDepth = ((DistortedFramebuffer) node.mSurface).hasDepth();
311
        mSurface = new DistortedFramebuffer(w,h,hasDepth);
311
        mSurface = new DistortedFramebuffer(hasDepth,DistortedSurface.TYPE_TREE,w,h);
312 312
        }
313 313
      }
314 314
    if( (flags & Distorted.CLONE_CHILDREN) != 0 )
src/main/java/org/distorted/library/DistortedOutputSurface.java
43 43

  
44 44
///////////////////////////////////////////////////////////////////////////////////////////////////
45 45

  
46
  DistortedOutputSurface(int width, int height, int createColor, int createDepth, int fbo, boolean system)
46
  DistortedOutputSurface(int width, int height, int createColor, int createDepth, int fbo, int type)
47 47
    {
48
    super(width,height,createColor,system);
48
    super(width,height,createColor,type);
49 49

  
50 50
    mProjectionMatrix = new float[16];
51 51

  
......
114 114
    mRender++;
115 115

  
116 116
    // change tree topology (attach and detach children)
117
    // create and delete all underlying OpenGL resources
118
    // Watch out: FIRST change topology, only then deal
119
    // with OpenGL resources. That's because changing Tree
120
    // can result in additional Framebuffers that would need
121
    // to be created immediately, before the calls to drawRecursive()
122

  
123 117
    boolean changed = DistortedAttachDaemon.toDo();
124 118

  
119
    // if some changes have been made, we need to rebuilt our tree-isomorphism data structures.
125 120
    if( changed )
126 121
      {
127 122
      for(int i=0; i<mNumChildren; i++)
......
133 128
      DistortedNode.debugMap();
134 129
      }
135 130

  
131
    // create and delete all underlying OpenGL resources
132
    // Watch out: FIRST change topology, only then deal
133
    // with OpenGL resources. That's because changing Tree
134
    // can result in additional Framebuffers that would need
135
    // to be created immediately, before the calls to drawRecursive()
136 136
    toDo();
137 137

  
138 138
    if( changed )
src/main/java/org/distorted/library/DistortedScreen.java
46 46
    {
47 47
    // set color to 'DONT_CREATE' so that Screens will not get added to the Surface lists
48 48
    // set depth to 'CREATED' so that depth will be, by default, on.
49
    super(0,0,DONT_CREATE,CREATED,0,false);
49
    super(0,0,DONT_CREATE,CREATED,0,TYPE_USER);
50 50
    }
51 51
  }
src/main/java/org/distorted/library/DistortedSurface.java
36 36
  static final int DONT_CREATE      = 3;
37 37
  static final int CREATED          = 4;
38 38

  
39
  static final int TYPE_USER = 0;
40
  static final int TYPE_TREE = 1;
41
  static final int TYPE_SYST = 2;
42

  
39 43
  private static boolean mToDo = false;
40 44
  private static LinkedList<DistortedSurface> mDoneList = new LinkedList<>();
41 45
  private static LinkedList<DistortedSurface> mToDoList = new LinkedList<>();
......
44 48

  
45 49
  private long mID;
46 50
  private boolean mMarked;
47
  private boolean mSystem;
51
  private int mType;
48 52
  int mColorCreated;
49 53
  int[] mColorH = new int[1];
50 54
  int mSizeX, mSizeY;  // in screen space
......
98 102
      {
99 103
      surface = mDoneList.removeFirst();
100 104

  
101
      if( surface.mSystem )
105
      if( surface.mType==TYPE_SYST )
102 106
        {
103 107
        mToDoList.add(surface);
104 108
        surface.recreate();
......
111 115
      {
112 116
      surface = mToDoList.get(i);
113 117

  
114
      if( !surface.mSystem )
118
      if( surface.mType!=TYPE_SYST )
115 119
        {
116 120
        mDoneList.remove(i);
117 121
        i--;
......
165 169

  
166 170
      str += ("("+surface.getWidth()+","+surface.getHeight()+") surfaceID:"+surface.getID());
167 171

  
172
      switch(surface.mType)
173
        {
174
        case TYPE_SYST: str+=" SYSTEM"; break;
175
        case TYPE_USER: str+=" USER"  ; break;
176
        case TYPE_TREE: str+=" TREE"  ; break;
177
        default       : str+=" ERROR??";
178
        }
179

  
168 180
      android.util.Log.e("Surface", str);
169 181
      }
170 182
    }
171 183

  
172 184
///////////////////////////////////////////////////////////////////////////////////////////////////
173 185

  
174
  DistortedSurface(int width, int height, int create, boolean system)
186
  DistortedSurface(int width, int height, int create, int type)
175 187
    {
176 188
    mSizeX        = width ;
177 189
    mSizeY        = height;
178 190
    mColorCreated = create;
179 191
    mColorH[0]    = 0;
180 192
    mMarked       = false;
181
    mID           = system ? --mNextSystemID : ++mNextClientID;
182
    mSystem       = system;
193
    mID           = type==TYPE_SYST ? --mNextSystemID : ++mNextClientID;
194
    mType         = type;
183 195

  
184 196
    if( create!=DONT_CREATE )
185 197
      {
src/main/java/org/distorted/library/DistortedTexture.java
111 111
    GLES30.glUniform1i(textureH, 0);
112 112
    }
113 113

  
114
///////////////////////////////////////////////////////////////////////////////////////////////////
115
// create SYSTEM or TREE textures (those are just like normal Textures, just hold information
116
// that they were autocreated only for the Library's internal purposes (SYSTEM) or for using
117
// inside a Tree of DistortedNodes (TREE)
118
// SYSTEM surfaces do not get removed in onDestroy().
119

  
120
  public DistortedTexture(int width, int height, int type)
121
    {
122
    super(width,height,NOT_CREATED_YET,type);
123
    mBmp= null;
124
    }
125

  
114 126
///////////////////////////////////////////////////////////////////////////////////////////////////
115 127
// PUBLIC API
116 128
///////////////////////////////////////////////////////////////////////////////////////////////////
......
119 131
 */
120 132
  public DistortedTexture(int width, int height)
121 133
    {
122
    super(width,height,NOT_CREATED_YET,false);
134
    super(width,height,NOT_CREATED_YET,TYPE_USER);
123 135
    mBmp= null;
124 136
    }
125 137

  
src/main/java/org/distorted/library/EffectQueuePostprocess.java
69 69
    mQuadTextureInv.put(textureInv).position(0);
70 70
    }
71 71

  
72
  private static DistortedFramebuffer mBufferFBO = new DistortedFramebuffer(true,1,1);
72
  private static DistortedFramebuffer mBufferFBO = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
73 73

  
74 74
  private static float[] mMVPMatrix = new float[16];
75 75
  private static float[] mTmpMatrix = new float[16];

Also available in: Unified diff