public static void SetupVoxelEntity(MyLodTypeEnum lod, MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            {
                MatrixD worldMatrixD = renderElement.WorldMatrix;
                worldMatrixD.Translation -= MyRenderCamera.Position;
                var worldMatrix = (Matrix)worldMatrixD;
                effectVoxels.SetWorldMatrix(ref worldMatrix);
            }

            //effectVoxels.SetVoxelMapPosition((Vector3)(renderElement.WorldMatrix.Translation - MyRenderCamera.Position));
            //effectVoxels.SetPositionLocalOffset((Vector3)(renderElement.WorldMatrix.Right));
            //effectVoxels.SetPositionLocalScale((Vector3)(renderElement.WorldMatrix.Up));
            //effectVoxels.SetLodBounds(new Vector2((float)renderElement.WorldMatrix.M14, (float)renderElement.WorldMatrix.M24));
            effectVoxels.SetDiffuseColor(Vector3.One);
            if (MyRenderSettings.DebugClipmapLodColor && renderElement.VoxelBatch.Lod < MyRenderVoxelCell.LOD_COLORS.Length)
            {
                effectVoxels.SetDiffuseColor(MyRenderVoxelCell.LOD_COLORS[renderElement.VoxelBatch.Lod].ToVector3());
            }
            effectVoxels.EnablePerVertexAmbient(MyRender.Settings.EnablePerVertexVoxelAmbient);

            if (lod == MyLodTypeEnum.LOD_BACKGROUND && renderElement.RenderObject is MyRenderVoxelCellBackground)
            {
                SetupAtmosphere(effectVoxels, renderElement.RenderObject as MyRenderVoxelCellBackground);
            }
        }
        public sealed override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            base.SetupEntity(shader, renderElement);

            MyEffectModelsDNS effectDNS = shader as MyEffectModelsDNS;

            MyRenderCharacter character = renderElement.RenderObject as MyRenderCharacter;

            var bonesUsed = renderElement.BonesUsed;

            if (character.SkinMatrices != null)
            {
                if (bonesUsed == null)
                {
                    for (int i = 0; i < Math.Min(character.SkinMatrices.Length, MyRenderConstants.MAX_SHADER_BONES); i++)
                    {
                        m_bonesBuffer[i] = character.SkinMatrices[i];
                    }
                }
                else
                {
                    for (int i = 0; i < bonesUsed.Length; i++)
                    {
                        m_bonesBuffer[i] = character.SkinMatrices[bonesUsed[i]];
                    }
                }

                effectDNS.SetBones(m_bonesBuffer);
            }
        }
        public static void SetupVoxelEntity(MyLodTypeEnum lod, MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            {
                MatrixD worldMatrixD = renderElement.WorldMatrix;
                worldMatrixD.Translation -= MyRenderCamera.Position;
                var worldMatrix = (Matrix)worldMatrixD;
                effectVoxels.SetWorldMatrix(ref worldMatrix);
            }

            var voxelCell = renderElement.RenderObject as MyRenderVoxelCell;

            if (voxelCell != null)
            {
                MyRenderVoxelCell.EffectArgs args;
                voxelCell.GetEffectArgs(out args);
                effectVoxels.VoxelVertex.SetArgs(ref args);
            }

            effectVoxels.SetDiffuseColor(Vector3.One);
            if (MyRenderSettings.DebugClipmapLodColor && renderElement.VoxelBatch.Lod < MyRenderVoxelCell.LOD_COLORS.Length)
            {
                effectVoxels.SetDiffuseColor(MyRenderVoxelCell.LOD_COLORS[renderElement.VoxelBatch.Lod].ToVector3());
            }
            effectVoxels.EnablePerVertexAmbient(
                MyRenderSettings.EnableVoxelAo,
                MyRenderSettings.VoxelAoMin,
                MyRenderSettings.VoxelAoMax,
                MyRenderSettings.VoxelAoOffset);
        }
Пример #4
0
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectAtmosphere effectAtmosphere = shader as MyEffectAtmosphere;

            effectAtmosphere.SetWorldMatrix((Matrix)renderElement.WorldMatrixForDraw);
            effectAtmosphere.SetDiffuseColor(renderElement.Color);

            var atmosphere = renderElement.RenderObject as MyRenderAtmosphere;

            float depthScale = 0.2f;

            effectAtmosphere.SetInnerRadius(atmosphere.PlanetRadius);
            effectAtmosphere.SetOutherRadius(atmosphere.AtmosphereRadius);

            float scaleAtmosphere = 1.0f / (atmosphere.AtmosphereRadius - atmosphere.PlanetRadius);

            effectAtmosphere.SetScaleAtmosphere(scaleAtmosphere);
            effectAtmosphere.SetScaleAtmosphereOverScaleDepth(scaleAtmosphere / depthScale);

            Vector3 cameraToCenter = atmosphere.GetRelativeCameraPos(MyRenderCamera.Position);

            effectAtmosphere.SetRelativeCameraPos(cameraToCenter);

            effectAtmosphere.SetLightPos(-MySunGlare.GetSunDirection());
            effectAtmosphere.SetIsInside(atmosphere.IsInside(MyRenderCamera.Position));

            effectAtmosphere.SetScaleDepth(depthScale);

            effectAtmosphere.SetWavelength(atmosphere.AtmosphereWavelengths);
        }
Пример #5
0
        public sealed override void SetupMaterial(MyEffectBase shader, MyRenderMeshMaterial material)
        {
            System.Diagnostics.Debug.Assert(material != null);

            shader.SetEmissivity(0);

            MyRender.CheckTextures(shader, material.NormalTexture, material.DrawTechnique == MyMeshDrawTechnique.HOLO);
        }
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            base.SetupEntity(shader, renderElement);

            if (renderElement.Dithering > 0)
            {
                //    renderElement.Dithering = 0;
            }
        }
Пример #7
0
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectModelsDNS effectDNS = shader as MyEffectModelsDNS;

            effectDNS.SetWorldMatrix((Matrix)renderElement.WorldMatrixForDraw);
            effectDNS.SetDiffuseColor(renderElement.Color);
            effectDNS.Dithering = renderElement.Dithering;
            effectDNS.Time      = (float)MyRender.InterpolationTime.Miliseconds;
            effectDNS.SetColorMaskHSV(renderElement.ColorMaskHSV);
        }
Пример #8
0
 static void UnloadEffects()
 {
     for (int i = 0; i < Enum.GetValues(typeof(MyEffects)).GetLength(0); i++)
     {
         MyEffectBase effect = m_effects[i];
         if (effect != null)
         {
             effect.Dispose();
             m_effects[i] = null;
         }
     }
 }
Пример #9
0
        static void SetupShaderForMaterialAlternative(MyEffectBase shader, MyVoxelCacheCellRenderBatchType batchType, MyMwcVoxelMaterialsEnum m0, MyMwcVoxelMaterialsEnum?m1, MyMwcVoxelMaterialsEnum?m2)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
            {
                effectVoxels.UpdateVoxelTextures(OverrideVoxelMaterial ?? m0);
            }
            else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
            {
                effectVoxels.UpdateVoxelMultiTextures(OverrideVoxelMaterial ?? m0, OverrideVoxelMaterial ?? m1, OverrideVoxelMaterial ?? m2);
            }
        }
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            base.SetupEntity(shader, renderElement);

            var atmosphere = renderElement.RenderObject as MyRenderAtmosphere;

            if (atmosphere.IsInside(MyRenderCamera.Position))
            {
                MyEffectAtmosphere effectAtmosphere = shader as MyEffectAtmosphere;
                Matrix             optProjection    = Matrix.CreatePerspectiveFieldOfView(MyRenderCamera.FieldOfView, MyRenderCamera.AspectRatio, MyRenderCamera.NEAR_PLANE_DISTANCE, atmosphere.AtmosphereRadius * 2.0f / MyRenderAtmosphere.ATMOSPHERE_SCALE);
                effectAtmosphere.SetProjectionMatrix(ref optProjection);
            }
        }
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectModelsDNS effectDNS = shader as MyEffectModelsDNS;

            // This is required, it's position of whole group
            effectDNS.SetWorldMatrix((Matrix)renderElement.WorldMatrixForDraw);

            // This should be in instance buffer when required
            effectDNS.SetDiffuseColor(renderElement.Color);
            effectDNS.Dithering = renderElement.Dithering;
            effectDNS.SetColorMaskHSV(renderElement.ColorMaskHSV);
            effectDNS.SetEmissivity(0);
        }
Пример #12
0
        /// <summary>
        /// Draws the full screen quad
        /// </summary>
        /// <param name="graphicsDevice">The GraphicsDevice to use for rendering</param>
        public void Draw(MyEffectBase effect)
        {
            // Set the vertex buffer and declaration
            MyMinerGame.Static.GraphicsDevice.VertexDeclaration = MyVertexFormatFullScreenQuad.VertexDeclaration;
            MyMinerGame.Static.GraphicsDevice.SetStreamSource(0, m_vertexBuffer, 0, MyVertexFormatFullScreenQuad.Stride);

            effect.Begin();
            // Draw primitives
            MyMinerGame.Static.GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

            effect.End();

            MyPerformanceCounter.PerCameraDraw.TotalDrawCalls++;
        }
Пример #13
0
        public static void SetupBaseEffect(MyEffectBase effect, float fogMultiplierMult = 1.0f)
        {
            if (MyRender.EnableFog)
            {
                effect.SetFogDistanceFar(MySector.FogProperties.FogFar);
                effect.SetFogDistanceNear(MySector.FogProperties.FogNear);
                effect.SetFogColor(MySector.FogProperties.FogColor);
                effect.SetFogMultiplier(MySector.FogProperties.FogMultiplier * fogMultiplierMult);
                effect.SetFogBacklightMultiplier(MySector.FogProperties.FogBacklightMultiplier);
            }
            else
            {
                effect.SetFogMultiplier(0);
            }

            //if (MyRenderConstants.RenderQualityProfile.ForwardRender || !MyRender.EnableLODBlending)
            {
                if (MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD0)
                {
                    effect.SetLodCut((GetLodTransitionDistanceFar() + GetLodTransitionDistanceNear()) / 2.0f);
                }
                else
                if (MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD1)
                {
                    effect.SetLodCut(-(GetLodTransitionDistanceFar() + GetLodTransitionDistanceNear()) / 2.0f);
                }
                else
                {
                    effect.SetLodCut(0);
                }

                effect.SetLodBackgroundCut(GetLodTransitionDistanceBackgroundEnd());
            }

            /*
             * if (!MyRenderConstants.RenderQualityProfile.ForwardRender && MyRender.EnableLODBlending)
             * {
             *  if (MyRender.GetCurrentLodDrawPass() == MyLodTypeEnum.LOD1)
             *  {
             *      //effect.SetLodCut(-(GetLodTransitionDistanceFar() + GetLodTransitionDistanceNear()) / 2.0f);
             *      //effect.SetLodCut(-(GetLodTransitionDistanceFar() + GetLodTransitionDistanceNear()) / 2.0f);
             *      effect.SetLodCut(0);
             *  }
             *  else
             *  {
             *      effect.SetLodCut(0);
             *  }
             * }  */
        }
Пример #14
0
 public static void SetupBaseEffect(MyEffectBase effect, MyLodTypeEnum lodType, float fogMultiplierMult = 1.0f)
 {
     if (MyRender.Settings.EnableFog)
     {
         effect.SetFogDistanceFar(MyRender.FogProperties.FogFar);
         effect.SetFogDistanceNear(MyRender.FogProperties.FogNear);
         effect.SetFogColor(MyRender.FogProperties.FogColor);
         effect.SetFogMultiplier(MyRender.FogProperties.FogMultiplier * fogMultiplierMult);
         effect.SetFogBacklightMultiplier(MyRender.FogProperties.FogBacklightMultiplier);
     }
     else
     {
         effect.SetFogMultiplier(0);
     }
 }
Пример #15
0
        static void UnloadEffects()
        {
            MyMwcLog.WriteLine("MyRender.UnloadEffects - START");

            for (int i = 0; i < Enum.GetValues(typeof(MyEffects)).GetLength(0); i++)
            {
                MyEffectBase effect = m_effects[i];
                if (effect != null)
                {
                    effect.Dispose();
                    m_effects[i] = null;
                }
            }

            MyMwcLog.WriteLine("MyRender.UnloadEffects - END");
        }
Пример #16
0
        /// <summary>
        /// Draws the full screen quad
        /// </summary>
        /// <param name="graphicsDevice">The GraphicsDevice to use for rendering</param>
        public void Draw(MyEffectBase effect)
        {
            

            // Set the vertex buffer and declaration
            MyMinerGame.Static.GraphicsDevice.VertexDeclaration = MyVertexFormatFullScreenQuad.VertexDeclaration;
            MyMinerGame.Static.GraphicsDevice.SetStreamSource(0, m_vertexBuffer, 0, MyVertexFormatFullScreenQuad.Stride);

            effect.Begin();
            // Draw primitives
            MyMinerGame.Static.GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

            effect.End();

            MyPerformanceCounter.PerCameraDraw.TotalDrawCalls++;
        }
Пример #17
0
        protected void SetupBaseEffect(MyEffectBase shader, MyRender.MyRenderSetup setup, MyLodTypeEnum lodType)
        {
            MyRenderCamera.SetupBaseEffect(shader, lodType, setup.FogMultiplierMult);

            if (lodType == MyLodTypeEnum.LOD_NEAR)
            {
                shader.SetProjectionMatrix(ref MyRenderCamera.ProjectionMatrixForNearObjects);
            }
            else
            {
                shader.SetProjectionMatrix(ref MyRenderCamera.ProjectionMatrix);
            }

            shader.SetViewMatrix(ref MyRenderCamera.ViewMatrixAtZero);

            var rasterizerState = MyRender.Settings.Wireframe ? WireframeRasterizerState : SolidRasterizerState;

            rasterizerState.Apply();
        }
        public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectVoxelsDebris effectVoxelsDebris = (MyEffectVoxelsDebris)shader;

            MyRenderVoxelDebris voxelDebris = renderElement.RenderObject as MyRenderVoxelDebris;

            //  Random texture coord scale and per-object random texture coord offset
            effectVoxelsDebris.SetTextureCoordRandomPositionOffset(voxelDebris.TextureCoordOffset);
            effectVoxelsDebris.SetTextureCoordScale(voxelDebris.TextureCoordScale);
            effectVoxelsDebris.SetDiffuseTextureColorMultiplier(voxelDebris.TextureColorMultiplier);

            Matrix m = (Matrix)renderElement.WorldMatrixForDraw;

            effectVoxelsDebris.SetViewWorldScaleMatrix(m * MyRenderCamera.ViewMatrixAtZero);

            effectVoxelsDebris.SetWorldMatrix(ref m);
            effectVoxelsDebris.SetDiffuseColor(Vector3.One);
            effectVoxelsDebris.SetEmissivity(0);

            effectVoxelsDebris.UpdateVoxelTextures(voxelDebris.VoxelMaterialIndex);
        }
Пример #19
0
        public sealed override void SetupMaterial(MyEffectBase shader, MyRenderMeshMaterial material)
        {
            System.Diagnostics.Debug.Assert(material != null);

            shader.SetTextureDiffuse(material.DiffuseTexture);
            shader.SetTextureNormal(material.NormalTexture);

            shader.SetSpecularIntensity(material.SpecularIntensity);
            shader.SetSpecularPower(material.SpecularPower);

            shader.SetDiffuseUVAnim(material.DiffuseUVAnim);
            shader.SetEmissivityUVAnim(material.EmissiveUVAnim);

            shader.SetEmissivityOffset(material.EmissivityOffset);

            ((MyEffectModelsDNS)shader).EnableColorMaskHsv(material.DiffuseTexture != null ? material.EnableColorMask : false);
            ((MyEffectModelsDNS)shader).SetDitheringTexture((SharpDX.Direct3D9.Texture)MyTextureManager.GetTexture <MyTexture2D>(@"Textures\Models\Dither.png"));
            ((MyEffectModelsDNS)shader).SetHalfPixel(MyRenderCamera.Viewport.Width, MyRenderCamera.Viewport.Height);

            // TODO: Petrzilka - Get rid of this branching
            if (material.DrawTechnique == MyMeshDrawTechnique.HOLO)
            {
                shader.SetEmissivity(material.HoloEmissivity);
            }

            if (material.Emissivity.HasValue)
            {
                shader.SetEmissivity(material.Emissivity.Value);
            }
            else
            {
                shader.SetEmissivity(0);
            }

            MyRender.CheckTextures(shader, material.NormalTexture, material.DrawTechnique == MyMeshDrawTechnique.HOLO);
        }
 public override void SetupMaterial(MyEffectBase shader, MyRenderMeshMaterial material)
 {
     // nothing to do
 }
Пример #21
0
 public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
 {
     SetupVoxelEntity(m_currentLod, shader, renderElement);
 }
Пример #22
0
        static void SetupShaderForMaterialAlternative(MyEffectBase shader, MyMeshMaterial material)
        {
            switch (material.DrawTechnique)
            {
            case MyMeshDrawTechnique.MESH:
            case MyMeshDrawTechnique.DECAL:
            case MyMeshDrawTechnique.HOLO:
            case MyMeshDrawTechnique.ALPHA_MASKED:
            {
                if (material != null)
                {
                    shader.SetTextureDiffuse(material.DiffuseTexture);
                    shader.SetTextureNormal(material.NormalTexture);

                    //Do we need this? Graphicians dont use this
                    //shader.SetDiffuseColor(material.DiffuseColor);

                    shader.SetSpecularIntensity(material.SpecularIntensity);
                    shader.SetSpecularPower(material.SpecularPower);

                    shader.SetDiffuseUVAnim(material.DiffuseUVAnim);
                    shader.SetEmissivityUVAnim(material.EmissiveUVAnim);

                    shader.SetEmissivityOffset(material.EmissivityOffset);

                    if (material.DrawTechnique == MyMeshDrawTechnique.HOLO)
                    {
                        shader.SetEmissivity(material.HoloEmissivity);
                    }

                    // Commented due 856 - graphicians have to reexport white diffuse colors from MAX
                    //shader.SetDiffuseColor(material.DiffuseColor);
                }
                else
                {
                    shader.SetTextureDiffuse(null);
                    shader.SetTextureNormal(null);

                    shader.SetSpecularPower(1);
                    shader.SetSpecularIntensity(1);

                    //this value is set from object if not from material
                    //shader.SetDiffuseColor(material.DiffuseColor);
                }

                if (CheckDiffuseTextures)
                {
                    if (!shader.IsTextureDiffuseSet())
                    {
                        LazyLoadDebugTextures();

                        shader.SetTextureDiffuse(m_debugTexture);
                        shader.SetDiffuseColor(Vector3.One);
                        shader.SetEmissivity(1);
                    }
                    else
                    {
                        if (material.DrawTechnique != MyMeshDrawTechnique.HOLO)
                        {
                            shader.SetEmissivity(0);
                        }
                    }
                }
                if (CheckNormalTextures)
                {
                    if (!shader.IsTextureNormalSet())
                    {
                        LazyLoadDebugTextures();

                        shader.SetTextureDiffuse(m_debugTexture);
                        shader.SetEmissivity(1);
                    }
                    else
                    {
                        shader.SetTextureDiffuse(material.NormalTexture);
                        //shader.SetTextureDiffuse(m_debugNormalTexture);
                        shader.SetEmissivity(0);
                    }
                }

                if (!shader.IsTextureNormalSet())
                {
                    LazyLoadDebugTextures();
                    shader.SetTextureNormal(m_debugTexture);
                }
            }
            break;

            case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
            case MyMeshDrawTechnique.VOXELS_DEBRIS:
                break;

            default:
            {
                throw new MyMwcExceptionApplicationShouldNotGetHere();
            }
            }
        }
Пример #23
0
        static void BeginShaderAlternative(MyEffectBase shader, MyMeshDrawTechnique technique, MyVoxelCacheCellRenderBatchType batchType)
        {
            switch (technique)
            {
            case MyMeshDrawTechnique.DECAL:
            {
                if (shader is MyEffectModelsDNS)
                {
                    (shader as MyEffectModelsDNS).BeginBlended();
                }
            }
            break;

            case MyMeshDrawTechnique.HOLO:
            {
                if (m_currentLodDrawPass != MyLodTypeEnum.LOD_NEAR && !MyRenderConstants.RenderQualityProfile.ForwardRender)
                {
                    (shader as MyEffectModelsDNS).ApplyHolo(false);
                }
                else
                {
                    (shader as MyEffectModelsDNS).ApplyHolo(true);
                }
            }
            break;

            case MyMeshDrawTechnique.ALPHA_MASKED:
            {
                (shader as MyEffectModelsDNS).ApplyMasked();
            }
            break;

            case MyMeshDrawTechnique.VOXEL_MAP:
            {
                MyEffectVoxels effectVoxels = shader as MyEffectVoxels;
                if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
                {
                    effectVoxels.Apply();
                }
                else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
                {
                    effectVoxels.ApplyMultimaterial();
                }
                break;
            }

            case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
            {
                ((MyEffectVoxelsStaticAsteroid)shader).Apply();
            }
            break;

            case MyMeshDrawTechnique.MESH:
            {
                ((MyEffectModelsDNS)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.ModelsRenderTechnique);
            }
            break;

            case MyMeshDrawTechnique.VOXELS_DEBRIS:
            {
                ((MyEffectVoxelsDebris)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.VoxelsRenderTechnique);
            }
            break;

            default:
            {
                System.Diagnostics.Debug.Assert(false);
            }
            break;
            }
        }
 public override void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement)
 {
     MyDrawTechniqueVoxelSingle.SetupVoxelEntity(m_currentLod, shader, renderElement);
 }
 public override void SetupMaterial(MyEffectBase shader, MyRenderMeshMaterial material)
 {
     throw new InvalidOperationException();
 }
Пример #26
0
 public abstract void SetupEntity(MyEffectBase shader, MyRender.MyRenderElement renderElement);
Пример #27
0
 public abstract void SetupMaterial(MyEffectBase shader, MyRenderMeshMaterial material);
Пример #28
0
        private static void SetupShaderForEntity(MyEffectBase shader, MyRenderElement renderElement)
        {
            // m_renderProfiler.StartProfilingBlock("SetupShaderForEntity");

            MyEffectBase currRenderEffect = null;

            Vector3 diffuseColor = Vector3.One;
            Vector3 highlightColor = Vector3.Zero;
            float emisivity = 0;

            MyEntity entity = renderElement.Entity;

            if (entity.GetDiffuseColor().HasValue)
                diffuseColor = entity.GetDiffuseColor().Value;

            highlightColor = entity.GetHighlightColor();

            switch (renderElement.DrawTechnique)
            {
                case MyMeshDrawTechnique.MESH:
                case MyMeshDrawTechnique.DECAL:
                case MyMeshDrawTechnique.HOLO:
                case MyMeshDrawTechnique.ALPHA_MASKED:
                    {
                        MyEffectModelsDNS effectDNS = shader as MyEffectModelsDNS;

                        effectDNS.SetWorldMatrix(renderElement.WorldMatrixForDraw);
                        effectDNS.SetDiffuseColor(diffuseColor);
                        effectDNS.SetEmissivity(emisivity);
                        effectDNS.SetHighlightColor(highlightColor);
                    }
                    break;

                case MyMeshDrawTechnique.VOXELS_DEBRIS:
                    {
                        //m_renderProfiler.StartProfilingBlock("VOXELD");

                        MyEffectVoxelsDebris effectVoxelsDebris = shader as MyEffectVoxelsDebris;

                        MyExplosionDebrisVoxel explosionDebrisVoxel = entity as MyExplosionDebrisVoxel;

                        //  Random texture coord scale and per-object random texture coord offset
                        effectVoxelsDebris.SetTextureCoordRandomPositionOffset(explosionDebrisVoxel.GetRandomizedTextureCoordRandomPositionOffset());
                        effectVoxelsDebris.SetTextureCoordScale(explosionDebrisVoxel.GetRandomizedTextureCoordScale());
                        effectVoxelsDebris.SetDiffuseTextureColorMultiplier(explosionDebrisVoxel.GetRandomizedDiffuseTextureColorMultiplier());
                        effectVoxelsDebris.SetViewWorldScaleMatrix(renderElement.WorldMatrixForDraw * MyCamera.ViewMatrixAtZero);
                        effectVoxelsDebris.SetWorldMatrix(ref renderElement.WorldMatrixForDraw);
                        effectVoxelsDebris.SetDiffuseColor(diffuseColor);
                        effectVoxelsDebris.SetHighlightColor(highlightColor);
                        effectVoxelsDebris.SetEmissivity(0);

                        effectVoxelsDebris.UpdateVoxelTextures(explosionDebrisVoxel.VoxelMaterial);

                        currRenderEffect = effectVoxelsDebris;

                        //m_renderProfiler.EndProfilingBlock();
                    }
                    break;

                case MyMeshDrawTechnique.VOXEL_MAP:
                    {
                        //m_renderProfiler.StartProfilingBlock("VOXMAP");

                        MyVoxelMap voxelMap = entity as MyVoxelMap;

                        MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

                        effectVoxels.SetVoxelMapPosition(voxelMap.PositionLeftBottomCorner - MyCamera.Position);

                        effectVoxels.SetDiffuseColor(diffuseColor);
                        effectVoxels.SetHighlightColor(highlightColor);
                        effectVoxels.EnablePerVertexAmbient(EnablePerVertexVoxelAmbient);

                        //m_renderProfiler.EndProfilingBlock();
                    }
                    break;

                case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
                    {
                        // m_renderProfiler.StartProfilingBlock("STATA");

                        MyEffectVoxelsStaticAsteroid effectVoxelsStaticAsteroid = shader as MyEffectVoxelsStaticAsteroid;
                        var asteroid = ((MyStaticAsteroid)entity);
                        //effectVoxelsStaticAsteroid.UpdateVoxelTextures(((MyStaticAsteroid)entity).VoxelMaterial);
                        //effectVoxelsStaticAsteroid.UpdateVoxelMultiTextures(((MyStaticAsteroid)entity).VoxelMaterial, ((MyStaticAsteroid)entity).VoxelMaterial1, null);

                        if (asteroid.VoxelMaterial1 == null || MyRenderConstants.RenderQualityProfile.ForwardRender)
                        {
                            effectVoxelsStaticAsteroid.UpdateVoxelTextures(asteroid.VoxelMaterial);
                        }
                        else
                        {
                            Debug.Assert(asteroid.FieldDir != null);

                            effectVoxelsStaticAsteroid.SetEmissivityPower1(3f);
                            effectVoxelsStaticAsteroid.SetTime(MyMinerGame.TotalGamePlayTimeInMilliseconds);
                            effectVoxelsStaticAsteroid.SetFieldDir(asteroid.FieldDir.Value);
                            effectVoxelsStaticAsteroid.UpdateVoxelMultiTextures(asteroid.VoxelMaterial, asteroid.VoxelMaterial1, null);
                        }

                        effectVoxelsStaticAsteroid.SetWorldMatrix(ref renderElement.WorldMatrixForDraw);
                        effectVoxelsStaticAsteroid.SetDiffuseColor(diffuseColor);
                        effectVoxelsStaticAsteroid.SetHighlightColor(highlightColor);
                        effectVoxelsStaticAsteroid.SetEmissivity(0);

                        //m_renderProfiler.EndProfilingBlock();
                    }
                    break;

                default:
                    {
                        throw new MyMwcExceptionApplicationShouldNotGetHere();
                    }
            }

            //   m_renderProfiler.EndProfilingBlock();
        }
Пример #29
0
 static void BeginShaderAlternative(MyEffectBase shader, MyMeshDrawTechnique technique, MyVoxelCacheCellRenderBatchType batchType)
 {
     switch (technique)
     {
         case MyMeshDrawTechnique.DECAL:
             {
                 if (shader is MyEffectModelsDNS)
                 {
                     (shader as MyEffectModelsDNS).BeginBlended();
                 }
             }
             break;
         case MyMeshDrawTechnique.HOLO:
             {
                 if (m_currentLodDrawPass != MyLodTypeEnum.LOD_NEAR && !MyRenderConstants.RenderQualityProfile.ForwardRender)
                 {
                     (shader as MyEffectModelsDNS).ApplyHolo(false);
                 }
                 else
                 {
                     (shader as MyEffectModelsDNS).ApplyHolo(true);
                 }
             }
             break;
         case MyMeshDrawTechnique.ALPHA_MASKED:
             {
                 (shader as MyEffectModelsDNS).ApplyMasked();
             }
             break;
         case MyMeshDrawTechnique.VOXEL_MAP:
             {
                 MyEffectVoxels effectVoxels = shader as MyEffectVoxels;
                 if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
                 {
                     effectVoxels.Apply();
                 }
                 else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
                 {
                     effectVoxels.ApplyMultimaterial();
                 }
                 break;
             }
         case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
             {
                 ((MyEffectVoxelsStaticAsteroid)shader).Apply();
             }
             break;
         case MyMeshDrawTechnique.MESH:
             {
                 ((MyEffectModelsDNS)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.ModelsRenderTechnique);
             }
             break;
         case MyMeshDrawTechnique.VOXELS_DEBRIS:
             {
                 ((MyEffectVoxelsDebris)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.VoxelsRenderTechnique);
             }
             break;
         default:
             {
                 System.Diagnostics.Debug.Assert(false);
             }
             break;
     }
 }
Пример #30
0
        static void SetupShaderForMaterialAlternative(MyEffectBase shader, MyMeshMaterial material)
        {
            switch (material.DrawTechnique)
            {
                case MyMeshDrawTechnique.MESH:
                case MyMeshDrawTechnique.DECAL:
                case MyMeshDrawTechnique.HOLO:
                case MyMeshDrawTechnique.ALPHA_MASKED:
                    {
                        if (material != null)
                        {
                            shader.SetTextureDiffuse(material.DiffuseTexture);
                            shader.SetTextureNormal(material.NormalTexture);

                            //Do we need this? Graphicians dont use this
                            //shader.SetDiffuseColor(material.DiffuseColor);

                            shader.SetSpecularIntensity(material.SpecularIntensity);
                            shader.SetSpecularPower(material.SpecularPower);

                            shader.SetDiffuseUVAnim(material.DiffuseUVAnim);
                            shader.SetEmissivityUVAnim(material.EmissiveUVAnim);

                            shader.SetEmissivityOffset(material.EmissivityOffset);

                            if (material.DrawTechnique == MyMeshDrawTechnique.HOLO)
                            {
                                shader.SetEmissivity(material.HoloEmissivity);
                            }

                            // Commented due 856 - graphicians have to reexport white diffuse colors from MAX
                            //shader.SetDiffuseColor(material.DiffuseColor);
                        }
                        else
                        {
                            shader.SetTextureDiffuse(null);
                            shader.SetTextureNormal(null);

                            shader.SetSpecularPower(1);
                            shader.SetSpecularIntensity(1);

                            //this value is set from object if not from material
                            //shader.SetDiffuseColor(material.DiffuseColor);
                        }

                        if (CheckDiffuseTextures)
                        {
                            if (!shader.IsTextureDiffuseSet())
                            {
                                LazyLoadDebugTextures();

                                shader.SetTextureDiffuse(m_debugTexture);
                                shader.SetDiffuseColor(Vector3.One);
                                shader.SetEmissivity(1);
                            }
                            else
                            {
                                if (material.DrawTechnique != MyMeshDrawTechnique.HOLO)
                                {
                                    shader.SetEmissivity(0);
                                }
                            }
                        }
                        if (CheckNormalTextures)
                        {
                            if (!shader.IsTextureNormalSet())
                            {
                                LazyLoadDebugTextures();

                                shader.SetTextureDiffuse(m_debugTexture);
                                shader.SetEmissivity(1);
                            }
                            else
                            {
                                shader.SetTextureDiffuse(material.NormalTexture);
                                //shader.SetTextureDiffuse(m_debugNormalTexture);
                                shader.SetEmissivity(0);
                            }
                        }

                        if (!shader.IsTextureNormalSet())
                        {
                            LazyLoadDebugTextures();
                            shader.SetTextureNormal(m_debugTexture);
                        }

                    }
                    break;

                case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
                case MyMeshDrawTechnique.VOXELS_DEBRIS:
                    break;

                default:
                    {
                        throw new MyMwcExceptionApplicationShouldNotGetHere();
                    }
            }
        }
Пример #31
0
        static void SetupShaderForMaterialAlternative(MyEffectBase shader, MyVoxelCacheCellRenderBatchType batchType, MyMwcVoxelMaterialsEnum m0, MyMwcVoxelMaterialsEnum? m1, MyMwcVoxelMaterialsEnum? m2)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
            {
                effectVoxels.UpdateVoxelTextures(OverrideVoxelMaterial ?? m0);
            }
            else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
            {
                effectVoxels.UpdateVoxelMultiTextures(OverrideVoxelMaterial ?? m0, OverrideVoxelMaterial ?? m1, OverrideVoxelMaterial ?? m2);
            }
        }
Пример #32
0
        private static void SetupShaderPerDraw(MyEffectBase shader, MyMeshDrawTechnique technique)
        {
            //  m_renderProfiler.StartProfilingBlock("SetupShaderPerDraw");

            MyCamera.SetupBaseEffect(shader, m_currentSetup.FogMultiplierMult);

            if (m_currentLodDrawPass == MyLodTypeEnum.LOD_NEAR)
                shader.SetProjectionMatrix(ref MyCamera.ProjectionMatrixForNearObjects);
            else
                shader.SetProjectionMatrix(ref MyCamera.ProjectionMatrix);

            shader.SetViewMatrix(ref MyCamera.ViewMatrixAtZero);

            switch (technique)
            {
                case MyMeshDrawTechnique.DECAL:
                    {
                        MyStateObjects.Static_Decals_BlendState.Apply();
                        MyStateObjects.BiasedRasterizer_StaticDecals.Apply();
                        MyStateObjects.DepthStencil_TestFarObject_DepthReadOnly.Apply();
                    }
                    break;
                case MyMeshDrawTechnique.HOLO:
                    {
                        RasterizerState.CullNone.Apply();
                        MyStateObjects.Holo_BlendState.Apply();

                        MyEffectModelsDNS dnsShader = shader as MyEffectModelsDNS;

                        dnsShader.SetHalfPixel(MyCamera.ForwardViewport.Width, MyCamera.ForwardViewport.Height);
                        dnsShader.SetScale(GetScaleForViewport(GetRenderTarget(MyRenderTargets.Depth)));

                        if (m_currentLodDrawPass != MyLodTypeEnum.LOD_NEAR && !MyRenderConstants.RenderQualityProfile.ForwardRender)
                        {
                            //m_device.DepthStencilState = DepthStencilState.DepthRead;
                            
                            MyStateObjects.DepthStencil_TestFarObject_DepthReadOnly.Apply();
                            MyStateObjects.HoloRasterizerState.Apply();
                            /*dnsShader.SetDepthTextureNear(GetRenderTarget(MyRenderTargets.Lod0Depth));
                            dnsShader.SetDepthTextureFar(GetRenderTarget(MyRenderTargets.Lod1Depth));
                             */

                        }
                        else
                        {
                            DepthStencilState.DepthRead.Apply();
                        }
                    }
                    break;
                case MyMeshDrawTechnique.ALPHA_MASKED:
                    {
                        if (!Wireframe)
                            RasterizerState.CullCounterClockwise.Apply();
                        else
                            MyStateObjects.WireframeRasterizerState.Apply();


                        BlendState.Opaque.Apply();
                    }
                    break;
                case MyMeshDrawTechnique.VOXEL_MAP:
                    {
                        if (!Wireframe)
                            RasterizerState.CullCounterClockwise.Apply();
                        else
                            MyStateObjects.WireframeRasterizerState.Apply();

                        break;
                    }
                case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
                    {
                        if (!Wireframe)
                            RasterizerState.CullNone.Apply();
                        else
                            MyStateObjects.WireframeRasterizerState.Apply();

                        break;
                    }
                default:
                    {
                        if (!Wireframe)
                            RasterizerState.CullCounterClockwise.Apply();
                        else
                            MyStateObjects.WireframeRasterizerState.Apply();

                    }
                    break;
            }

            // m_renderProfiler.EndProfilingBlock();
        }