public void Draw(Mesh3d container, int instances) { /*if(instances < 3 || ForceFrustumCull) // special case optimization * { * var inst = container.GetInstances(); * bool visibility = true; * for(int i = 0; i < instances; i++) * { * var pos = inst[i].Transformation.Position; * visibility = visibility && Camera.Current.IsAABBVisible(Info3d.BoundingBoxMin + pos, Info3d.BoundingBoxMax + pos); * } * if(!visibility) * return; * }*/ if (InternalRenderingState.PassState == InternalRenderingState.State.ForwardOpaquePass) { if (Material.UseForwardRenderer) { return; } } if (InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAdditivePass || InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAlphaPass) { if (!Material.UseForwardRenderer) { return; } } if (Material.Blending == GenericMaterial.BlendingEnum.Alpha && InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAdditivePass) { return; } if (Material.Blending == GenericMaterial.BlendingEnum.AdditiveNormalized && InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAlphaPass) { return; } Material.Use(); container.SetUniforms(); ShaderProgram.Current.SetUniform("ForwardPass", InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAlphaPass ? 0 : 1); ModelInfosBuffer.Use(0); // if(DisableFaceCulling) // GL.Disable(EnableCap.CullFace); Info3d.DrawInstanced(InstancesFiltered); //if(DisableFaceCulling) // GL.Enable(EnableCap.CullFace); }
public void DrawBoundingBoxes(Mesh3d container, int instances) { Material.Use(); container.SetUniforms(); //ShaderProgram.Current.SetUniform("ForwardPass", InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentBlendingAlphaPass ? 0 : 1); ModelInfosBuffer.Use(0); //BoundingBoxInfo3d.DrawInstanced(InstancesFiltered); if (DisableFaceCulling) { GL.Disable(EnableCap.CullFace); } Info3d.DrawInstanced(InstancesFiltered); if (DisableFaceCulling) { GL.Enable(EnableCap.CullFace); } }
public void Draw(Mesh3d container, int instances) { if(InternalRenderingState.PassState == InternalRenderingState.State.ShadowMapPass) { if(!Material.CastShadows) return; } if(InternalRenderingState.PassState == InternalRenderingState.State.EarlyZPass) { if(Material.SupportTransparency) return; } if(InternalRenderingState.PassState == InternalRenderingState.State.DistancePass) { if(Material.SupportTransparency) return; } if(InternalRenderingState.PassState == InternalRenderingState.State.ForwardOpaquePass) { if(Material.SupportTransparency) return; } if(InternalRenderingState.PassState == InternalRenderingState.State.ForwardTransparentPass) { if(!Material.SupportTransparency) return; } Material.Use(); container.SetUniforms(); SetUniforms(); ModelMatricesBuffer.Use(0); RotationMatricesBuffer.Use(1); Ids.Use(2); Info3d.DrawInstanced(InstancesFiltered); }