/** * Creates a new RenderQueue, the default {@link GeometryComparator comparators} * are used for all {@link GeometryList geometry lists}. */ public RenderQueue() { this.opaqueList = new GeometryList(new OpaqueComparator()); this.guiList = new GeometryList(new GuiComparator()); this.transparentList = new GeometryList(new TransparentComparator()); this.translucentList = new GeometryList(new TransparentComparator()); this.skyList = new GeometryList(new NullComparator()); }
public int compare(Geometry o1, Geometry o2) { float d1 = distanceToCam(o1); float d2 = distanceToCam(o2); if (d1 == d2) return 0; else if (d1 < d2) return 1; else return -1; } }
private void renderGeometryList(GeometryList list, RenderManager rm, Camera cam, boolean clear) { list.setCamera(cam); // select camera for sorting list.sort(); for (int i = 0; i < list.size(); i++) { Geometry obj = list.get(i); assert obj != null; rm.renderGeometry(obj); obj.queueDistance = Float.NEGATIVE_INFINITY; } if (clear) { list.clear(); } }
public boolean hasNext() { return index < size(); }
public void renderQueue(Bucket bucket, RenderManager rm, Camera cam) { renderQueue(bucket, rm, cam, true); }
/** * Set the camera that will be set on the geometry comparators * via {@link GeometryComparator#setCamera(com.jme3.renderer.Camera)}. * * @param cam Camera to use for sorting. */ public void setCamera(Camera cam){ this.comparator.setCamera(cam); }
public void renderShadowQueue(GeometryList list, RenderManager rm, Camera cam, boolean clear) { renderGeometryList(list, rm, cam, clear); }
/** * Clears the queue of the given ViewPort. * Simply calls {@link RenderQueue#clear() } on the ViewPort's * {@link ViewPort#getQueue() render queue}. * * @param vp The ViewPort of which the queue will be cleared. * * @see RenderQueue#clear() * @see ViewPort#getQueue() */ public void clearQueue(ViewPort vp) { vp.getQueue().clear(); }
@Before public void setUp() { assetManager = TestUtil.createAssetManager(); renderManager = TestUtil.createRenderManager(); comparator.setCamera(cam); }
/** * Renders the given GeometryList. * <p> * For every geometry in the list, the * {@link #renderGeometry(com.jme3.scene.Geometry) } method is called. * * @param gl The geometry list to render. * * @see GeometryList * @see #renderGeometry(com.jme3.scene.Geometry) */ public void renderGeometryList(GeometryList gl) { for (int i = 0; i < gl.size(); i++) { renderGeometry(gl.get(i)); } }
public boolean isQueueEmpty(Bucket bucket) { switch (bucket) { case Gui: return guiList.size() == 0; case Opaque: return opaqueList.size() == 0; case Sky: return skyList.size() == 0; case Transparent: return transparentList.size() == 0; case Translucent: return translucentList.size() == 0; default: throw new UnsupportedOperationException("Unsupported bucket type: " + bucket); } }
public void postQueue(RenderQueue rq) { // lay depth first rm.setForcedMaterial(preDepth); rq.renderQueue(RenderQueue.Bucket.Opaque, rm, vp.getCamera(), false); rm.setForcedMaterial(null); rm.setForcedRenderState(forcedRS); }
@Override protected void getReceivers(GeometryList lightReceivers) { lightReceivers.clear(); for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getLitGeometriesInViewPort(scene, viewPort.getCamera(), shadowCams, RenderQueue.ShadowMode.Receive, lightReceivers); } }
@Override protected void getReceivers(GeometryList lightReceivers) { if (lightReceivers.size()==0) { for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getGeometriesInCamFrustum(scene, viewPort.getCamera(), RenderQueue.ShadowMode.Receive, lightReceivers); } } }
@Override protected void getReceivers(GeometryList lightReceivers) { lightReceivers.clear(); Camera[] cameras = new Camera[1]; cameras[0] = shadowCam; for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getLitGeometriesInViewPort(scene, viewPort.getCamera(), cameras, RenderQueue.ShadowMode.Receive, lightReceivers); } }
@Override protected void getReceivers(GeometryList lightReceivers) { if (lightReceivers.size()==0) { for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getGeometriesInCamFrustum(scene, viewPort.getCamera(), RenderQueue.ShadowMode.Receive, lightReceivers); } } }
@Override protected GeometryList getOccludersToRender(int shadowMapIndex, GeometryList shadowMapOccluders) { // update frustum points based on current camera and split ShadowUtil.updateFrustumPoints(viewPort.getCamera(), splitsArray[shadowMapIndex], splitsArray[shadowMapIndex + 1], 1.0f, points); //Updating shadow cam with current split frusta if (lightReceivers.size()==0) { for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getGeometriesInCamFrustum(scene, viewPort.getCamera(), RenderQueue.ShadowMode.Receive, lightReceivers); } } ShadowUtil.updateShadowCamera(viewPort, lightReceivers, shadowCam, points, shadowMapOccluders, stabilize?shadowMapSize:0); return shadowMapOccluders; }
@Override protected GeometryList getOccludersToRender(int shadowMapIndex, GeometryList shadowMapOccluders) { // update frustum points based on current camera and split ShadowUtil.updateFrustumPoints(viewPort.getCamera(), splitsArray[shadowMapIndex], splitsArray[shadowMapIndex + 1], 1.0f, points); //Updating shadow cam with current split frusta if (lightReceivers.size()==0) { for (Spatial scene : viewPort.getScenes()) { ShadowUtil.getGeometriesInCamFrustum(scene, viewPort.getCamera(), RenderQueue.ShadowMode.Receive, lightReceivers); } } ShadowUtil.updateShadowCamera(viewPort, lightReceivers, shadowCam, points, shadowMapOccluders, stabilize?shadowMapSize:0); return shadowMapOccluders; }