Example #1
0
        protected void draw(DrawContext dc)
        {
            try
            {
                // Draw the layers.
                if (dc.getLayers() != null)
                {
                    foreach (Layer layer in dc.getLayers())
                    {
                        try
                        {
                            if (layer != null)
                            {
                                dc.setCurrentLayer(layer);
                                layer.render(dc);
                            }
                        }
                        catch (Exception e)
                        {
                            String message = Logging.getMessage("SceneController.ExceptionWhileRenderingLayer",
                                                                (layer != null ? layer.GetType().Name : Logging.getMessage("term.unknown")));
                            Logging.logger().log(Level.SEVERE, message, e);
                            // Don't abort; continue on to the next layer.
                        }
                    }

                    dc.setCurrentLayer(null);
                }

                // Draw the deferred/ordered surface renderables.
                this.drawOrderedSurfaceRenderables(dc);

                if (this.isDeferOrderedRendering())
                {
                    return;
                }

                if (this.screenCreditController != null)
                {
                    this.screenCreditController.render(dc);
                }

                // Draw the deferred/ordered renderables.
                dc.setOrderedRenderingMode(true);
//            dc.applyGroupingFilters();
                dc.applyClutterFilter();
                while (dc.peekOrderedRenderables() != null)
                {
                    try
                    {
                        dc.pollOrderedRenderables().render(dc);
                    }
                    catch (Exception e)
                    {
                        Logging.logger().log(Level.WARNING,
                                             Logging.getMessage("BasicSceneController.ExceptionDuringRendering"), e);
                    }
                }
                dc.setOrderedRenderingMode(false);

                // Draw the diagnostic displays.
                if (dc.getSurfaceGeometry() != null && dc.getModel() != null && (dc.getModel().isShowWireframeExterior() ||
                                                                                 dc.getModel().isShowWireframeInterior() || dc.getModel().isShowTessellationBoundingVolumes()))
                {
                    Model model = dc.getModel();

                    float[] previousColor = new float[4];
                    GL2     gl            = dc.getGL().getGL2(); // GL initialization checks for GL2 compatibility.
                    gl.glGetFloatv(GL2.GL_CURRENT_COLOR, previousColor, 0);

                    foreach (SectorGeometry sg in dc.getSurfaceGeometry())
                    {
                        if (model.isShowWireframeInterior() || model.isShowWireframeExterior())
                        {
                            sg.renderWireframe(dc, model.isShowWireframeInterior(), model.isShowWireframeExterior());
                        }

                        if (model.isShowTessellationBoundingVolumes())
                        {
                            gl.glColor3d(1, 0, 0);
                            sg.renderBoundingVolume(dc);
                        }
                    }

                    gl.glColor4fv(previousColor, 0);
                }
            }
            catch (Throwable e)
            {
                Logging.logger().log(Level.SEVERE, Logging.getMessage("BasicSceneController.ExceptionDuringRendering"), e);
            }
        }