Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
 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);
 }