Revision 7c6d11c8
Added by Leszek Koltunski about 7 years ago
src/main/java/org/distorted/library/DistortedEffectsPostprocess.java | ||
---|---|---|
22 | 22 |
import org.distorted.library.message.EffectListener; |
23 | 23 |
import org.distorted.library.type.Data1D; |
24 | 24 |
|
25 |
import java.util.ArrayList; |
|
26 |
|
|
25 | 27 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
26 | 28 |
|
27 | 29 |
/** |
... | ... | |
35 | 37 |
* <p> |
36 | 38 |
* The queue holds actual effects to be applied to a given bucket of several (DistortedTexture,MeshObject) combos. |
37 | 39 |
*/ |
38 |
public class DistortedEffectsPostprocess |
|
40 |
public class DistortedEffectsPostprocess implements DistortedSlave
|
|
39 | 41 |
{ |
42 |
private static final int MIPMAP = 0; |
|
43 |
|
|
40 | 44 |
private static long mNextID =0; |
41 | 45 |
private long mID; |
42 | 46 |
|
... | ... | |
44 | 48 |
|
45 | 49 |
private boolean postprocessCloned; |
46 | 50 |
|
51 |
private class Job |
|
52 |
{ |
|
53 |
int type; |
|
54 |
int level; |
|
55 |
|
|
56 |
Job(int t, int l) |
|
57 |
{ |
|
58 |
type = t; |
|
59 |
level= l; |
|
60 |
} |
|
61 |
} |
|
62 |
|
|
63 |
private ArrayList<Job> mJobs = new ArrayList<>(); |
|
64 |
|
|
47 | 65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
48 | 66 |
|
49 | 67 |
private void initializeEffectLists(DistortedEffectsPostprocess d, int flags) |
... | ... | |
125 | 143 |
initializeEffectLists(dc,flags); |
126 | 144 |
} |
127 | 145 |
|
146 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
147 |
/** |
|
148 |
* This is not really part of the public API. Has to be public only because it is a part of the |
|
149 |
* DistortedSlave interface, which should really be a class that we extend here instead but |
|
150 |
* Java has no multiple inheritance. |
|
151 |
* |
|
152 |
* @y.exclude |
|
153 |
*/ |
|
154 |
public void doWork() |
|
155 |
{ |
|
156 |
int num = mJobs.size(); |
|
157 |
Job job; |
|
158 |
|
|
159 |
for(int i=0; i<num; i++) |
|
160 |
{ |
|
161 |
job = mJobs.remove(0); |
|
162 |
|
|
163 |
switch(job.type) |
|
164 |
{ |
|
165 |
case MIPMAP: int level = job.level; |
|
166 |
mP.mQualityLevel = level; |
|
167 |
mP.mQualityScale = 1.0f; |
|
168 |
for(int j=0; j<level; j++) mP.mQualityScale*=EffectQuality.MULTIPLIER; |
|
169 |
break; |
|
170 |
} |
|
171 |
} |
|
172 |
} |
|
173 |
|
|
128 | 174 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
129 | 175 |
/** |
130 | 176 |
* Releases all resources. After this call, the queue should not be used anymore. |
... | ... | |
291 | 337 |
* <p> |
292 | 338 |
* This works by rendering into smaller and smaller intermediate buffers. Each step renders into a |
293 | 339 |
* buffer that's half the size of the previous one. |
340 |
* <p> |
|
341 |
* We cannot this during mid-render - thus, give it to the Master to assign us back this job on the |
|
342 |
* next render. |
|
294 | 343 |
*/ |
295 | 344 |
public void setQuality(EffectQuality quality) |
296 | 345 |
{ |
297 |
int level = quality.level; |
|
298 |
|
|
299 |
mP.mQualityLevel = level; |
|
300 |
mP.mQualityScale = 1.0f; |
|
301 |
|
|
302 |
for(int i=0; i<level; i++) mP.mQualityScale*=EffectQuality.MULTIPLIER; |
|
346 |
mJobs.add(new Job(MIPMAP,quality.level)); |
|
347 |
DistortedMaster.newSlave(this); |
|
303 | 348 |
} |
304 | 349 |
|
305 | 350 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Do not change postprocessing Quality mid-render but go through the Master.