/// <summary> /// IRenderer interface method /// Renders a model in a viewport /// </summary> public bool RenderModel(RMModel model, Rhino.DocObjects.ViewportInfo viewport) { if (null == model || null == viewport || !model.IsReadyForRendering) return false; Model = model; CheckGLError ("intro call"); //HACK: necessary on some Android GPUs (don't delete this check) viewport.SetFrustumNearFar (model.BBox); // Disable Blending and set the depth function GL.DepthFunc (DepthFunction.Gequal); GL.Disable (EnableCap.Blend); // Get the shader... ActiveShader = FastDrawing ? GetShader ("PerVertexLighting") : GetShader ("PerPixelLighting"); // Render calls... if (model != null) { // First, render all opaque objects that are not instances foreach (var obj in model.DisplayMeshes) { if (obj != null) RenderObject (obj, viewport, false); } // Second, render all opaque objects that are instances foreach (var obj in model.DisplayInstanceMeshes) { if (obj != null) RenderObject (obj, viewport, true); } // Third, we're done drawing our instances, so set the ModelViewMatrix's XForm back to the identity matrix. ActiveShader.SetModelViewMatrix (Rhino.Geometry.Transform.Identity); // Fourth, render all transparent meshes... RenderTransparentObjects (model); } // Disable the shader ActiveShader.Disable (); return true; }