Skip to content

Commit 7ed3d37

Browse files
authored
resolve issue 1446 (test whether an EnvironmentCamera is busy) (#1490)
* resolve issue #1446 (test whether an EnvironmentCamera is busy) * RefEnv: indicate whether the EnvironmentCamera is busy (to test 1446) * EnvironmentCamera: clearer coding of render() method
1 parent 5bbf6dd commit 7ed3d37

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -172,28 +172,30 @@ public Void call() throws Exception {
172172

173173
@Override
174174
public void render(final RenderManager renderManager) {
175+
if (isBusy()) {
176+
final SnapshotJob job = jobs.get(0);
177+
178+
for (int i = 0; i < 6; i++) {
179+
viewports[i].clearScenes();
180+
viewports[i].attachScene(job.scene);
181+
renderManager.renderViewPort(viewports[i], 0.16f);
182+
buffers[i] = BufferUtils.createByteBuffer(
183+
size * size * imageFormat.getBitsPerPixel() / 8);
184+
renderManager.getRenderer().readFrameBufferWithFormat(
185+
framebuffers[i], buffers[i], imageFormat);
186+
images[i] = new Image(imageFormat, size, size, buffers[i],
187+
ColorSpace.Linear);
188+
MipMapGenerator.generateMipMaps(images[i]);
189+
}
175190

176-
if (jobs.isEmpty()) {
177-
return;
178-
}
179-
180-
final SnapshotJob job = jobs.get(0);
181-
182-
for (int i = 0; i < 6; i++) {
183-
viewports[i].clearScenes();
184-
viewports[i].attachScene(job.scene);
185-
renderManager.renderViewPort(viewports[i], 0.16f);
186-
buffers[i] = BufferUtils.createByteBuffer(size * size * imageFormat.getBitsPerPixel() / 8);
187-
renderManager.getRenderer().readFrameBufferWithFormat(framebuffers[i], buffers[i], imageFormat);
188-
images[i] = new Image(imageFormat, size, size, buffers[i], ColorSpace.Linear);
189-
MipMapGenerator.generateMipMaps(images[i]);
190-
}
191-
192-
final TextureCubeMap map = EnvMapUtils.makeCubeMap(images[0], images[1], images[2], images[3], images[4], images[5], imageFormat);
191+
final TextureCubeMap map = EnvMapUtils.makeCubeMap(images[0],
192+
images[1], images[2], images[3], images[4], images[5],
193+
imageFormat);
193194
debugEnv = map;
194-
job.callback.done(map);
195-
map.getImage().dispose();
196-
jobs.remove(0);
195+
job.callback.done(map);
196+
map.getImage().dispose();
197+
jobs.remove(0);
198+
}
197199
}
198200

199201
/**
@@ -276,6 +278,17 @@ public ViewPort[] getViewPorts(){
276278
return viewports;
277279
}
278280

281+
/**
282+
* Test whether this EnvironmentCamera is busy. Avoid reconfiguring while
283+
* busy!
284+
*
285+
* @return true if busy, otherwise false
286+
*/
287+
public boolean isBusy() {
288+
boolean result = !jobs.isEmpty();
289+
return result;
290+
}
291+
279292
@Override
280293
protected void initialize(Application app) {
281294
this.backGroundColor = app.getViewPort().getBackgroundColor().clone();

jme3-examples/src/main/java/jme3test/light/pbr/RefEnv.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,9 @@ private void switchMat(Spatial s) {
147147
public void simpleUpdate(float tpf) {
148148
frame++;
149149

150+
EnvironmentCamera eCam = stateManager.getState(EnvironmentCamera.class);
150151
if (frame == 2) {
151-
final LightProbe probe = LightProbeFactory.makeProbe(stateManager.getState(EnvironmentCamera.class), rootNode, EnvMapUtils.GenerationType.Fast, new JobProgressAdapter<LightProbe>() {
152+
final LightProbe probe = LightProbeFactory.makeProbe(eCam, rootNode, EnvMapUtils.GenerationType.Fast, new JobProgressAdapter<LightProbe>() {
152153

153154
@Override
154155
public void done(LightProbe result) {
@@ -161,5 +162,9 @@ public void done(LightProbe result) {
161162
rootNode.addLight(probe);
162163

163164
}
165+
166+
if (eCam.isBusy()) {
167+
System.out.println("EnvironmentCamera busy as of frame " + frame);
168+
}
164169
}
165170
}

0 commit comments

Comments
 (0)