Example #1
0
        private void Init()
        {
            //called from VehicleForm_Load

            if (!initedOk)
            {
                Close();
                return;
            }


            MouseWheel += VehicleForm_MouseWheel;

            if (!GTAFolder.UpdateGTAFolder(true))
            {
                Close();
                return;
            }



            ShaderParamNames[] texsamplers = RenderableGeometry.GetTextureSamplerList();
            foreach (var texsampler in texsamplers)
            {
                TextureSamplerComboBox.Items.Add(texsampler);
            }
            //TextureSamplerComboBox.SelectedIndex = 0;//LoadSettings will do this..


            UpdateGridVerts();
            GridSizeComboBox.SelectedIndex  = 1;
            GridCountComboBox.SelectedIndex = 1;



            Input.Init();


            Renderer.Start();
        }
Example #2
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture  = null;
            RenderableTexture texture2 = null;
            RenderableTexture tintpal  = null;
            RenderableTexture bumptex  = null;
            RenderableTexture spectex  = null;
            RenderableTexture detltex  = null;
            bool isdistmap             = false;

            float tntpalind = 0.0f;

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                if (RenderMode == WorldRenderMode.Default)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex = geom.RenderableTextures[i];
                        if (geom.HDTextureEnable)
                        {
                            var hdtex = geom.RenderableTexturesHD[i];
                            if ((hdtex != null) && (hdtex.IsLoaded))
                            {
                                itex = hdtex;
                            }
                        }
                        var ihash = geom.TextureParamHashes[i];
                        if (itex == null)
                        {
                            continue;
                        }
                        if (itex.Key?.NameHash == 1678728908 /*"blank"*/)
                        {
                            continue;
                        }
                        switch (ihash)
                        {
                        case MetaName.DiffuseSampler:
                        case MetaName.PlateBgSampler:
                            texture = itex;
                            break;

                        case MetaName.BumpSampler:
                        case MetaName.PlateBgBumpSampler:
                            bumptex = itex;
                            break;

                        case MetaName.SpecSampler:
                            spectex = itex;
                            break;

                        case MetaName.DetailSampler:
                            detltex = itex;
                            break;

                        case MetaName.TintPaletteSampler:
                            tintpal = itex;
                            if (tintpal.Key != null)
                            {
                                //this is slightly dodgy but VSEntityVars should have the correct value in it...
                                tntpalind = (VSEntityVars.Vars.TintPaletteIndex + 0.5f) / tintpal.Key.Height;
                            }
                            break;

                        case MetaName.distanceMapSampler:
                            texture   = itex;
                            isdistmap = true;
                            break;

                        case MetaName.DiffuseSampler2:
                            texture2 = itex;
                            break;

                        case MetaName.heightSampler:
                        case MetaName.EnvironmentSampler:
                            //case MetaName.SnowSampler0:
                            //case MetaName.SnowSampler1:
                            //case MetaName.DiffuseSampler3:
                            //case MetaName.DirtSampler:
                            //case MetaName.DirtBumpSampler:
                            break;

                        case MetaName.FlowSampler:
                        case MetaName.FogSampler:
                        case MetaName.FoamSampler:
                            if (texture == null)
                            {
                                texture = itex;
                            }
                            break;

                        default:
                            if (texture == null)
                            {
                                texture = itex;
                            }
                            break;
                        }
                    }
                }
                else if (RenderMode == WorldRenderMode.SingleTexture)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        if (ihash == RenderTextureSampler)
                        {
                            texture = itex;
                            break;
                        }
                    }
                }
            }


            bool usediff  = ((texture != null) && (texture.ShaderResourceView != null));
            bool usediff2 = ((texture2 != null) && (texture2.ShaderResourceView != null));
            bool usebump  = ((bumptex != null) && (bumptex.ShaderResourceView != null));
            bool usespec  = ((spectex != null) && (spectex.ShaderResourceView != null));
            bool usedetl  = ((detltex != null) && (detltex.ShaderResourceView != null));
            bool usetint  = ((tintpal != null) && (tintpal.ShaderResourceView != null));

            uint tintflag = 0;

            if (usetint)
            {
                tintflag = 1;
            }

            Vector4 textureAlphaMask = Vector4.Zero;
            uint    decalflag        = DecalMode ? 1u : 0u;
            uint    windflag         = geom.EnableWind ? 1u : 0u;
            uint    emflag           = geom.IsEmissive ? 1u : 0u;
            uint    pstintflag       = tintflag;
            var     shaderName       = geom.DrawableGeom.Shader.Name;
            var     shaderFile       = geom.DrawableGeom.Shader.FileName;

            switch (shaderFile.Hash)
            {
            case 2245870123:    //trees_normal_diffspec_tnt.sps
            case 3334613197:    //trees_tnt.sps
            case 1229591973:    //{trees_normal_spec_tnt.sps}
                if (usetint)
                {
                    tintflag = 2;              //use 2nd vertex colour channel for tint...
                }
                break;

            case 3880384844:   //{decal_spec_only.sps}w
            case 600733812:    //{decal_amb_only.sps}
            case 2842248626:   //{spec_decal.sps}
            case 2457676400:   //{reflect_decal.sps}
            case 2706821972:   //{mirror_decal.sps}
                //if (RenderMode == WorldRenderMode.Default) usediff = false;
                break;

            case 2655725442:    //{decal_dirt.sps}
                textureAlphaMask = geom.DirtDecalMask;
                decalflag        = 2;
                break;
            }

            if (VSEntityVars.Vars.IsInstanced > 0)
            {
                pstintflag = 1;
                switch (shaderFile.Hash)
                {
                case 916743331:     //{grass_batch.sps}
                    windflag = 1;
                    break;

                case 3833671083:    //{normal_spec_batch.sps}
                    windflag = 0;
                    break;

                default:
                    break;
                }
            }


            PSGeomVars.Vars.EnableTexture         = (usediff ? 1u : 0u) + (usediff2 ? 2u : 0u);
            PSGeomVars.Vars.EnableTint            = pstintflag;
            PSGeomVars.Vars.EnableNormalMap       = usebump ? 1u : 0u;
            PSGeomVars.Vars.EnableSpecMap         = usespec ? 1u : 0u;
            PSGeomVars.Vars.EnableDetailMap       = usedetl ? 1u : 0u;
            PSGeomVars.Vars.IsDecal               = decalflag;
            PSGeomVars.Vars.IsEmissive            = emflag;
            PSGeomVars.Vars.IsDistMap             = isdistmap ? 1u : 0u;
            PSGeomVars.Vars.bumpiness             = geom.bumpiness;
            PSGeomVars.Vars.AlphaScale            = isdistmap ? 1.0f : AlphaScale;
            PSGeomVars.Vars.HardAlphaBlend        = 0.0f; //todo: cutouts flag!
            PSGeomVars.Vars.useTessellation       = 0.0f;
            PSGeomVars.Vars.detailSettings        = geom.detailSettings;
            PSGeomVars.Vars.specMapIntMask        = geom.specMapIntMask;
            PSGeomVars.Vars.specularIntensityMult = SpecularEnable ? geom.specularIntensityMult : 0.0f;
            PSGeomVars.Vars.specularFalloffMult   = geom.specularFalloffMult;
            PSGeomVars.Vars.specularFresnel       = geom.specularFresnel;
            PSGeomVars.Vars.wetnessMultiplier     = geom.wetnessMultiplier;
            PSGeomVars.Vars.SpecOnly              = geom.SpecOnly ? 1u : 0u;
            PSGeomVars.Vars.TextureAlphaMask      = textureAlphaMask;
            PSGeomVars.Update(context);
            PSGeomVars.SetPSCBuffer(context, 2);

            VSGeomVars.Vars.EnableTint         = tintflag;
            VSGeomVars.Vars.TintYVal           = tntpalind;
            VSGeomVars.Vars.IsDecal            = DecalMode ? 1u : 0u;
            VSGeomVars.Vars.EnableWind         = windflag;
            VSGeomVars.Vars.WindOverrideParams = geom.WindOverrideParams;
            VSGeomVars.Update(context);
            VSGeomVars.SetVSCBuffer(context, 4);

            context.VertexShader.SetSampler(0, geom.IsFragment ? texsamplertntyft : texsamplertnt);
            context.PixelShader.SetSampler(0, AnisotropicFilter ? texsampleranis : texsampler);
            if (usediff)
            {
                texture.SetPSResource(context, 0);
            }
            if (usebump)
            {
                bumptex.SetPSResource(context, 2);
            }
            if (usespec)
            {
                spectex.SetPSResource(context, 3);
            }
            if (usedetl)
            {
                detltex.SetPSResource(context, 4);
            }
            if (usediff2)
            {
                texture2.SetPSResource(context, 5);
            }
            if (usetint)
            {
                tintpal.SetVSResource(context, 0);
            }
        }
Example #3
0
 public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
 {
     //don't use this
 }
Example #4
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture = null; // ((geom.Textures != null) && (geom.Textures.Length > 0)) ? geom.Textures[0] : null;

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                if (RenderMode == WorldRenderMode.Default)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        switch (ihash)
                        {
                        case ShaderParamNames.DiffuseSampler:
                            texture = itex;
                            break;
                        }
                    }


                    ////fallback try get first texture... eventaully remove this! (helps with water for now)
                    //int index = 0;
                    //while (((texture == null) || (texture.Texture2D == null)) && (index < geom.Textures.Length))
                    //{
                    //    texture = geom.Textures[index];
                    //    index++;
                    //}
                }
                else if (RenderMode == WorldRenderMode.SingleTexture)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        if (ihash == RenderTextureSampler)
                        {
                            texture = itex;
                            break;
                        }
                    }
                }
            }


            bool usediff = ((texture != null) && (texture.Texture2D != null) && (texture.ShaderResourceView != null));

            PSGeomVars.Vars.EnableTexture = usediff ? 1u : 0u;
            PSGeomVars.Vars.EnableTint    = 0u;
            PSGeomVars.Update(context);
            PSGeomVars.SetPSCBuffer(context, 2);

            VSGeomVars.Vars.EnableTint         = 0u;
            VSGeomVars.Vars.TintYVal           = 0u;
            VSGeomVars.Vars.IsDecal            = 0u;
            VSGeomVars.Vars.EnableWind         = 0u;
            VSGeomVars.Vars.WindOverrideParams = Vector4.Zero;
            VSGeomVars.Vars.globalAnimUV0      = Vector4.Zero;
            VSGeomVars.Vars.globalAnimUV1      = Vector4.Zero;
            VSGeomVars.Update(context);
            VSGeomVars.SetVSCBuffer(context, 4);


            //context.VertexShader.SetSampler(0, texsampler);
            context.PixelShader.SetSampler(0, texsampler);
            //context.PixelShader.SetSampler(1, texsamplerc);
            if (usediff)
            {
                texture.SetPSResource(context, 0);
                //context.PixelShader.SetShaderResource(0, difftex.ShaderResourceView);
            }
        }
Example #5
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            switch (geom.DrawableGeom.Shader.FileName.Hash)
            {
            case 4103916155:    //{clouds_animsoft.sps}
            case 1097000161:    //{clouds_altitude.sps}
            case 1481470665:    //{clouds_soft.sps}
            case 2184108982:    //{clouds_fast.sps}
            case 4192928948:    //{clouds_anim.sps}
                break;

            default:
                break;
            }

            RenderableTexture DensitySampler        = null;
            RenderableTexture NormalSampler         = null;
            RenderableTexture DetailDensitySampler  = null;
            RenderableTexture DetailNormalSampler   = null;
            RenderableTexture DetailDensity2Sampler = null;
            RenderableTexture DetailNormal2Sampler  = null;
            RenderableTexture DepthMapTexSampler    = null;


            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                for (int i = 0; i < geom.RenderableTextures.Length; i++)
                {
                    var itex  = geom.RenderableTextures[i];
                    var ihash = geom.TextureParamHashes[i];
                    switch (ihash)
                    {
                    case ShaderParamNames.DensitySampler:
                        DensitySampler = itex;
                        break;

                    case ShaderParamNames.normalSampler:
                        NormalSampler = itex;
                        break;

                    case ShaderParamNames.DetailDensitySampler:
                        DetailDensitySampler = itex;
                        break;

                    case ShaderParamNames.DetailNormalSampler:
                        DetailNormalSampler = itex;
                        break;

                    case ShaderParamNames.DetailDensity2Sampler:
                        DetailDensity2Sampler = itex;
                        break;

                    case ShaderParamNames.DetailNormal2Sampler:
                        DetailNormal2Sampler = itex;
                        break;

                    case ShaderParamNames.DepthMapTexSampler:
                        DepthMapTexSampler = itex;
                        break;

                    default:
                        break;
                    }
                }
            }

            bool usedens = ((DensitySampler != null) && (DensitySampler.ShaderResourceView != null));
            bool usenorm = ((NormalSampler != null) && (NormalSampler.ShaderResourceView != null));
            bool usedden = ((DetailDensitySampler != null) && (DetailDensitySampler.ShaderResourceView != null));
            bool usednrm = ((DetailNormalSampler != null) && (DetailNormalSampler.ShaderResourceView != null));
            bool useddn2 = ((DetailDensity2Sampler != null) && (DetailDensity2Sampler.ShaderResourceView != null));
            bool usednm2 = ((DetailNormal2Sampler != null) && (DetailNormal2Sampler.ShaderResourceView != null));
            bool usedept = ((DepthMapTexSampler != null) && (DepthMapTexSampler.ShaderResourceView != null));

            if (usedens)
            {
                DensitySampler.SetPSResource(context, 0);
            }
            if (usenorm)
            {
                NormalSampler.SetPSResource(context, 1);
            }
            if (usedden)
            {
                DetailDensitySampler.SetPSResource(context, 2);
            }
            if (usednrm)
            {
                DetailNormalSampler.SetPSResource(context, 3);
            }
            if (useddn2)
            {
                DetailDensity2Sampler.SetPSResource(context, 4);
            }
            if (usednm2)
            {
                DetailNormal2Sampler.SetPSResource(context, 5);
            }
            if (usedept)
            {
                DepthMapTexSampler.SetPSResource(context, 6);
            }

            context.PixelShader.SetSampler(0, AnisotropicFilter ? texsampleranis : texsampler);
        }
Example #6
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture0    = null;
            RenderableTexture texture1    = null;
            RenderableTexture texture2    = null;
            RenderableTexture texture3    = null;
            RenderableTexture texture4    = null;
            RenderableTexture texturemask = null;
            RenderableTexture tintpal     = null;
            RenderableTexture normals0    = null;
            RenderableTexture normals1    = null;
            RenderableTexture normals2    = null;
            RenderableTexture normals3    = null;
            RenderableTexture normals4    = null;
            float             tntpalind   = 0.0f;
            bool usevc = true;

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                for (int i = 0; i < geom.RenderableTextures.Length; i++)
                {
                    var itex = geom.RenderableTextures[i];
                    if (geom.HDTextureEnable)
                    {
                        var hdtex = geom.RenderableTexturesHD[i];
                        if ((hdtex != null) && (hdtex.IsLoaded))
                        {
                            itex = hdtex;
                        }
                    }
                    var ihash = geom.TextureParamHashes[i];
                    switch (ihash)
                    {
                    case MetaName.DiffuseSampler:
                        texture0 = itex;
                        break;

                    case MetaName.TextureSampler_layer0:
                        texture1 = itex;
                        break;

                    case MetaName.TextureSampler_layer1:
                        texture2 = itex;
                        break;

                    case MetaName.TextureSampler_layer2:
                        texture3 = itex;
                        break;

                    case MetaName.TextureSampler_layer3:
                        texture4 = itex;
                        break;

                    case MetaName.BumpSampler:
                        normals0 = itex;
                        break;

                    case MetaName.BumpSampler_layer0:
                        normals1 = itex;
                        break;

                    case MetaName.BumpSampler_layer1:
                        normals2 = itex;
                        break;

                    case MetaName.BumpSampler_layer2:
                        normals3 = itex;
                        break;

                    case MetaName.BumpSampler_layer3:
                        normals4 = itex;
                        break;

                    case MetaName.lookupSampler:
                        texturemask = itex;
                        break;

                    case MetaName.TintPaletteSampler:
                        tintpal = itex;
                        if (tintpal.Key != null)
                        {
                            //this is slightly dodgy but vsentvarsdata should have the correct value in it...
                            tntpalind = (VSEntityVars.Vars.TintPaletteIndex + 0.5f) / tintpal.Key.Height;
                        }
                        break;
                    }
                }

                //if ((geom.DiffuseSampler >= 0) && (geom.DiffuseSampler < geom.Textures.Length))
                //{
                //    texture0 = geom.Textures[geom.DiffuseSampler];
                //}
                //if ((geom.TextureSampler_layer0 >= 0) && (geom.TextureSampler_layer0 < geom.Textures.Length))
                //{
                //    texture1 = geom.Textures[geom.TextureSampler_layer0];
                //}
                //if ((geom.TextureSampler_layer1 >= 0) && (geom.TextureSampler_layer1 < geom.Textures.Length))
                //{
                //    texture2 = geom.Textures[geom.TextureSampler_layer1];
                //}
                //if ((geom.TextureSampler_layer2 >= 0) && (geom.TextureSampler_layer2 < geom.Textures.Length))
                //{
                //    texture3 = geom.Textures[geom.TextureSampler_layer2];
                //}
                //if ((geom.TextureSampler_layer3 >= 0) && (geom.TextureSampler_layer3 < geom.Textures.Length))
                //{
                //    texture4 = geom.Textures[geom.TextureSampler_layer3];
                //}
                //if ((geom.BumpSampler >= 0) && (geom.BumpSampler < geom.Textures.Length))
                //{
                //    normals0 = geom.Textures[geom.BumpSampler];
                //}
                //if ((geom.BumpSampler_layer0 >= 0) && (geom.BumpSampler_layer0 < geom.Textures.Length))
                //{
                //    normals1 = geom.Textures[geom.BumpSampler_layer0];
                //}
                //if ((geom.BumpSampler_layer1 >= 0) && (geom.BumpSampler_layer1 < geom.Textures.Length))
                //{
                //    normals2 = geom.Textures[geom.BumpSampler_layer1];
                //}
                //if ((geom.BumpSampler_layer2 >= 0) && (geom.BumpSampler_layer2 < geom.Textures.Length))
                //{
                //    normals3 = geom.Textures[geom.BumpSampler_layer2];
                //}
                //if ((geom.BumpSampler_layer3 >= 0) && (geom.BumpSampler_layer3 < geom.Textures.Length))
                //{
                //    normals4 = geom.Textures[geom.BumpSampler_layer3];
                //}
                //if ((geom.lookupSampler >= 0) && (geom.lookupSampler < geom.Textures.Length))
                //{
                //    texturemask = geom.Textures[geom.lookupSampler];
                //}
                //if ((geom.TintPaletteSampler >= 0) && (geom.TintPaletteSampler < geom.Textures.Length))
                //{
                //    tintpal = geom.Textures[geom.TintPaletteSampler];
                //    if (tintpal.Texture != null)
                //    {
                //        //this is slightly dodgy but vsentvarsdata should have the correct value in it...
                //        tntpalind = (vsentvarsdata.TintPaletteIndex + 0.5f) / tintpal.Texture.Height;
                //    }
                //}
            }

            if (RenderMode == WorldRenderMode.SingleTexture)
            {
                usevc = false;
                switch (RenderTextureSampler)
                {
                case MetaName.DiffuseSampler:
                case MetaName.BumpSampler:
                case MetaName.SpecSampler:
                    break;

                default:
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        if (ihash == RenderTextureSampler)
                        {
                            texture0 = itex;
                            break;
                        }
                    }

                    //int directtexind = geom.GetTextureSamplerIndex(RenderTextureSampler);
                    //if ((directtexind >= 0) && (directtexind < geom.Textures.Length))
                    //{
                    //    texture0 = geom.Textures[directtexind];
                    //}
                    break;
                }
            }

            bool usediff0 = ((texture0 != null) && (texture0.ShaderResourceView != null));
            bool usediff1 = ((texture1 != null) && (texture1.ShaderResourceView != null));
            bool usediff2 = ((texture2 != null) && (texture2.ShaderResourceView != null));
            bool usediff3 = ((texture3 != null) && (texture3.ShaderResourceView != null));
            bool usediff4 = ((texture4 != null) && (texture4.ShaderResourceView != null));
            bool usemask  = ((texturemask != null) && (texturemask.ShaderResourceView != null));
            bool usetint  = ((tintpal != null) && (tintpal.ShaderResourceView != null));
            bool usenm    = (((normals0 != null) && (normals0.ShaderResourceView != null)) || ((normals1 != null) && (normals1.ShaderResourceView != null)));


            float bumpiness = 1.0f;

            if (usenm)
            {
                bumpiness = geom.bumpiness;
            }


            PSGeomVars.Vars.EnableTexture0     = usediff0 ? 1u : 0u;
            PSGeomVars.Vars.EnableTexture1     = usediff1 ? 1u : 0u;
            PSGeomVars.Vars.EnableTexture2     = usediff2 ? 1u : 0u;
            PSGeomVars.Vars.EnableTexture3     = usediff3 ? 1u : 0u;
            PSGeomVars.Vars.EnableTexture4     = usediff4 ? 1u : 0u;
            PSGeomVars.Vars.EnableTextureMask  = usemask ? 1u : 0u;
            PSGeomVars.Vars.EnableNormalMap    = usenm ? 1u : 0u;
            PSGeomVars.Vars.ShaderName         = geom.DrawableGeom.Shader.Name.Hash;
            PSGeomVars.Vars.EnableTint         = usetint ? 1u : 0u;
            PSGeomVars.Vars.EnableVertexColour = usevc ? 1u : 0u;
            PSGeomVars.Vars.bumpiness          = bumpiness;//
            PSGeomVars.Update(context);
            PSGeomVars.SetPSCBuffer(context, 2);

            VSGeomVars.Vars.EnableTint = usetint ? 1u : 0u;
            VSGeomVars.Vars.TintYVal   = tntpalind;
            VSGeomVars.Update(context);
            VSGeomVars.SetVSCBuffer(context, 4);


            context.VertexShader.SetSampler(0, texsamplertnt);
            context.PixelShader.SetSampler(0, AnisotropicFilter ? texsampleranis : texsampler);

            if (usediff0)
            {
                texture0.SetPSResource(context, 0);
            }
            if (usediff1)
            {
                texture1.SetPSResource(context, 2);
            }
            if (usediff2)
            {
                texture2.SetPSResource(context, 3);
            }
            if (usediff3)
            {
                texture3.SetPSResource(context, 4);
            }
            if (usediff4)
            {
                texture4.SetPSResource(context, 5);
            }
            if (usemask)
            {
                texturemask.SetPSResource(context, 6);
            }
            if (usetint)
            {
                tintpal.SetVSResource(context, 0);
            }
            if (normals0 != null)
            {
                normals0.SetPSResource(context, 7);
            }
            if (normals1 != null)
            {
                normals1.SetPSResource(context, 8);
            }
            if (normals2 != null)
            {
                normals2.SetPSResource(context, 9);
            }
            if (normals3 != null)
            {
                normals3.SetPSResource(context, 10);
            }
            if (normals4 != null)
            {
                normals4.SetPSResource(context, 11);
            }
        }
Example #7
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture = null; // ((geom.Textures != null) && (geom.Textures.Length > 0)) ? geom.Textures[0] : null;

            //trees_lod2
            //PNCCTTTT: texcoord2 seems to be 0-1 for the billboard, vertex pos is billboard root.
            //param for billboard dir... (treeLod2Normal)

            //trees_lod
            //PNCCT:


            if (geom.VertexType != VertexType.PNCCTTTT)
            {
            }

            var shader = geom.DrawableGeom.Shader;

            if (shader.Name.Hash == 1874959840)
            {
                int               nparams = 0;
                MetaName[]        hashes  = null;
                ShaderParameter[] sparams = null;

                if (shader.ParametersList != null)
                {
                    nparams = shader.ParametersList.Hashes.Length;
                    hashes  = shader.ParametersList.Hashes;
                    sparams = shader.ParametersList.Parameters;
                }

                for (int i = 0; i < nparams; i++)
                {
                    var h = (ShaderParamNames)shader.ParametersList.Hashes[i];
                    switch (h)
                    {
                    case ShaderParamNames.AlphaTest: VSGeomVars.Vars.AlphaTest = (Vector4)sparams[i].Data; break;

                    case ShaderParamNames.AlphaScale: VSGeomVars.Vars.AlphaScale = (Vector4)sparams[i].Data; break;

                    case ShaderParamNames.UseTreeNormals: VSGeomVars.Vars.UseTreeNormals = (Vector4)sparams[i].Data; break;

                    case ShaderParamNames.treeLod2Normal: VSGeomVars.Vars.treeLod2Normal = (Vector4)sparams[i].Data; break;

                    case ShaderParamNames.treeLod2Params: VSGeomVars.Vars.treeLod2Params = (Vector4)sparams[i].Data; break;
                    }
                }
            }
            else
            {
                VSGeomVars.Vars.AlphaTest      = Vector4.Zero;
                VSGeomVars.Vars.AlphaScale     = Vector4.Zero;
                VSGeomVars.Vars.UseTreeNormals = Vector4.Zero;
                VSGeomVars.Vars.treeLod2Normal = Vector4.Zero;
                VSGeomVars.Vars.treeLod2Params = Vector4.Zero;
            }

            VSGeomVars.Update(context);
            VSGeomVars.SetVSCBuffer(context, 3);

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                for (int i = 0; i < geom.RenderableTextures.Length; i++)
                {
                    var itex  = geom.RenderableTextures[i];
                    var ihash = geom.TextureParamHashes[i];
                    switch (ihash)
                    {
                    case ShaderParamNames.DiffuseSampler:
                        texture = itex;
                        break;
                    }
                    if (texture != null)
                    {
                        break;
                    }
                }

                ////try get default diffuse texture
                //if ((geom.DiffuseSampler >= 0) && (geom.DiffuseSampler < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.DiffuseSampler];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer0 >= 0) && (geom.TextureSampler_layer0 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer0];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer1 >= 0) && (geom.TextureSampler_layer1 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer1];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer2 >= 0) && (geom.TextureSampler_layer2 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer2];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer3 >= 0) && (geom.TextureSampler_layer3 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer3];
                //}

                //fallback try get first texture...
                int index = 0;
                while (((texture == null) || (texture.Texture2D == null)) && (index < geom.RenderableTextures.Length))
                {
                    texture = geom.RenderableTextures[index];
                    index++;
                }
            }


            bool usediff = ((texture != null) && (texture.Texture2D != null) && (texture.ShaderResourceView != null));

            PSEntityVars.Vars.EnableTexture = usediff ? 1u : 0u;
            PSEntityVars.Update(context);
            PSEntityVars.SetPSCBuffer(context, 1);

            if (usediff)
            {
                context.PixelShader.SetSampler(0, texsampler);
                //context.PixelShader.SetShaderResource(0, difftex.ShaderResourceView);
                texture.SetPSResource(context, 0);
            }
        }
Example #8
0
 public abstract void SetGeomVars(DeviceContext context, RenderableGeometry geom);
Example #9
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture = null; // ((geom.Textures != null) && (geom.Textures.Length > 0)) ? geom.Textures[0] : null;

            //RenderableTexture tintpal = null;

            //float tntpalind = 0.0f;

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                for (int i = 0; i < geom.RenderableTextures.Length; i++)
                {
                    var itex  = geom.RenderableTextures[i];
                    var ihash = geom.TextureParamHashes[i];
                    switch (ihash)
                    {
                    case MetaName.DiffuseSampler:
                    case MetaName.TextureSampler_layer0:
                    case MetaName.TextureSampler_layer1:
                    case MetaName.TextureSampler_layer2:
                    case MetaName.TextureSampler_layer3:
                        texture = itex;
                        break;
                    }
                    if (texture != null)
                    {
                        break;
                    }
                }

                ////try get default diffuse texture
                //if ((geom.DiffuseSampler >= 0) && (geom.DiffuseSampler < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.DiffuseSampler];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer0 >= 0) && (geom.TextureSampler_layer0 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer0];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer1 >= 0) && (geom.TextureSampler_layer1 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer1];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer2 >= 0) && (geom.TextureSampler_layer2 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer2];
                //}
                //if ((texture == null) && (geom.TextureSampler_layer3 >= 0) && (geom.TextureSampler_layer3 < geom.Textures.Length))
                //{
                //    texture = geom.Textures[geom.TextureSampler_layer3];
                //}

                //fallback try get first texture... eventaully remove this! (helps with water for now)
                int index = 0;
                while (((texture == null)) && (index < geom.RenderableTextures.Length))
                {
                    texture = geom.RenderableTextures[index];
                    index++;
                }


                //if ((geom.PaletteTexture >= 0) && (geom.PaletteTexture < geom.Textures.Length))
                //{
                //    tintpal = geom.Textures[geom.PaletteTexture];
                //    if (tintpal.Texture != null)
                //    {
                //        //this is slightly dodgy but vsentvarsdata should have the correct value in it...
                //        tntpalind = (vsentvarsdata.TintPaletteIndex + 0.5f) / tintpal.Texture.Height;
                //    }
                //}
            }


            bool usediff = ((texture != null) && (texture.ShaderResourceView != null));


            uint windflag   = 0;
            var  shaderFile = geom.DrawableGeom.Shader.FileName;

            switch (shaderFile.Hash)
            {
            case 2245870123:    //trees_normal_diffspec_tnt.sps
            case 3334613197:    //trees_tnt.sps
            case 1229591973:    //{trees_normal_spec_tnt.sps}
            case 2322653400:    //{trees.sps}
            case 3192134330:    //{trees_normal.sps}
            case 1224713457:    //{trees_normal_spec.sps}
            case 4265705004:    //{trees_normal_diffspec.sps}
                windflag = 1;
                break;
            }



            GeomVars.Vars.EnableTexture      = usediff ? 1u : 0u;
            GeomVars.Vars.EnableTint         = 0u; // usetint ? 1u : 0u;
            GeomVars.Vars.IsDecal            = 0u; // DecalMode ? 1u : 0u;
            GeomVars.Vars.EnableWind         = windflag;
            GeomVars.Vars.WindOverrideParams = geom.WindOverrideParams;
            GeomVars.Update(context);
            GeomVars.SetPSCBuffer(context, 0);
            GeomVars.SetVSCBuffer(context, 3);

            context.VertexShader.SetSampler(0, texsamplerc);
            context.PixelShader.SetSampler(0, texsampler);
            //context.PixelShader.SetSampler(1, texsamplerc);
            if (usediff)
            {
                texture.SetPSResource(context, 0);
            }
        }
Example #10
0
        public override void SetGeomVars(DeviceContext context, RenderableGeometry geom)
        {
            RenderableTexture texture = null;
            RenderableTexture bumptex = null;
            RenderableTexture flowtex = null;
            RenderableTexture foamtex = null;
            RenderableTexture fogtex  = null;

            if ((geom.RenderableTextures != null) && (geom.RenderableTextures.Length > 0))
            {
                if (RenderMode == WorldRenderMode.Default)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        if (itex == null)
                        {
                            continue;
                        }
                        switch (ihash)
                        {
                        case ShaderParamNames.DiffuseSampler:
                            texture = itex;
                            break;

                        case ShaderParamNames.BumpSampler:
                            bumptex = itex;
                            break;

                        case ShaderParamNames.FlowSampler:
                            flowtex = itex;
                            break;

                        case ShaderParamNames.FoamSampler:
                            foamtex = itex;
                            break;

                        case ShaderParamNames.FogSampler:
                            fogtex = itex;
                            break;

                        default:
                            if (texture == null)
                            {
                                texture = itex;
                            }
                            break;
                        }
                    }
                }
                else if (RenderMode == WorldRenderMode.SingleTexture)
                {
                    for (int i = 0; i < geom.RenderableTextures.Length; i++)
                    {
                        var itex  = geom.RenderableTextures[i];
                        var ihash = geom.TextureParamHashes[i];
                        if (ihash == RenderTextureSampler)
                        {
                            texture = itex;
                            break;
                        }
                    }
                }
            }


            bool usediff = ((texture != null) && (texture.ShaderResourceView != null));
            bool usebump = ((bumptex != null) && (bumptex.ShaderResourceView != null));
            bool useflow = ((flowtex != null) && (flowtex.ShaderResourceView != null));
            bool usefoam = ((foamtex != null) && (foamtex.ShaderResourceView != null));
            bool usefog  = ((fogtex != null) && (fogtex.ShaderResourceView != null));

            uint shaderMode = 0;
            var  shaderFile = geom.DrawableGeom.Shader.FileName;

            switch (shaderFile.Hash)
            {
            case 1529202445:    //{water_river.sps}
            case 4064804434:    //{water_riverlod.sps}
            case 2871265627:    //{water_riverocean.sps}
            case 1507348828:    //{water_rivershallow.sps}
            case 3945561843:    //{water_fountain.sps}
            case 4234404348:    //{water_shallow.sps}
            case 1077877097:    //{water_poolenv.sps}
                break;

            case 1471966282:    //{water_decal.sps} (should this be in decal batch?)
            case 3053856997:    //{water_riverfoam.sps}
                shaderMode = 1;
                break;

            case 3066724854:    //{water_terrainfoam.sps}
                shaderMode = 2;
                break;

            default:
                break;
            }


            PSGeomVars.Vars.EnableTexture     = usediff ? 1u : 0u;
            PSGeomVars.Vars.EnableBumpMap     = usebump ? 1u : 0u;
            PSGeomVars.Vars.EnableFoamMap     = usefoam ? 1u : 0u;
            PSGeomVars.Vars.ShaderMode        = shaderMode;
            PSGeomVars.Vars.SpecularIntensity = SpecularEnable ? 1.0f : 0.0f; // geom.specularIntensityMult;
            PSGeomVars.Vars.SpecularFalloff   = 1.0f;                         // geom.specularFalloffMult;
            PSGeomVars.Vars.WaveOffset        = geom.WaveOffset;              //for terrainfoam
            PSGeomVars.Vars.WaterHeight       = geom.WaterHeight;             //for terrainfoam
            PSGeomVars.Vars.WaveMovement      = geom.WaveMovement;            //for terrainfoam
            PSGeomVars.Vars.HeightOpacity     = geom.HeightOpacity;           //for terrainfoam
            PSGeomVars.Vars.RippleSpeed       = geom.RippleSpeed;
            PSGeomVars.Vars.RippleScale       = geom.RippleScale;
            PSGeomVars.Vars.RippleBumpiness   = geom.RippleBumpiness;
            PSGeomVars.Update(context);
            PSGeomVars.SetPSCBuffer(context, 2);

            VSGeomVars.Vars.EnableFlow  = useflow ? 1u : 0u;
            VSGeomVars.Vars.ShaderMode  = shaderMode;
            VSGeomVars.Vars.WaterParams = Vector4.Zero;
            VSGeomVars.Vars.RippleSpeed = geom.RippleSpeed;
            VSGeomVars.Update(context);
            VSGeomVars.SetVSCBuffer(context, 3);

            context.VertexShader.SetSampler(0, texsamplerflow);
            context.PixelShader.SetSampler(0, AnisotropicFilter ? texsampleranis : texsampler);
            if (usediff)
            {
                texture.SetPSResource(context, 0);
            }
            if (usebump)
            {
                bumptex.SetPSResource(context, 2);
            }
            if (usefoam)
            {
                foamtex.SetPSResource(context, 3);
            }
            if (useflow)
            {
                flowtex.SetVSResource(context, 0);
            }
        }
Example #11
0
        private void Init()
        {
            //called from ModelForm_Load

            if (!initedOk)
            {
                Close();
                return;
            }


            MouseWheel += ModelForm_MouseWheel;

            string fldr = Settings.Default.GTAFolder;

            if (string.IsNullOrEmpty(fldr) || !Directory.Exists(fldr))
            {
                SelectFolderForm f = new SelectFolderForm();
                f.ShowDialog();
                if (f.Result == DialogResult.OK)
                {
                    fldr = f.SelectedFolder;
                }
                else
                {
                    Close();
                    return;
                }
            }
            if (!Directory.Exists(fldr))
            {
                MessageBox.Show("The specified folder does not exist:\n" + fldr);
                Close();
                return;
            }
            if (!File.Exists(fldr + "\\gta5.exe"))
            {
                MessageBox.Show("GTA5.exe not found in folder:\n" + fldr);
                Close();
                return;
            }

            Settings.Default.GTAFolder = fldr; //seems ok, save it for later



            MetaName[] texsamplers = RenderableGeometry.GetTextureSamplerList();
            foreach (var texsampler in texsamplers)
            {
                TextureSamplerComboBox.Items.Add(texsampler);
            }
            //TextureSamplerComboBox.SelectedIndex = 0;//LoadSettings will do this..


            UpdateGridVerts();
            GridSizeComboBox.SelectedIndex  = 1;
            GridCountComboBox.SelectedIndex = 1;



            Input.Init();


            Renderer.Start();
        }
Example #12
0
        private void performanceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape box = GlobalInstance.BrepTools.MakeBox(Vector3.ZERO, Vector3.UNIT_Z, Vector3.UNIT_SCALE);
            RenderableGeometry geom = new RenderableGeometry();
            geom.SetGeometry(box);

            for (int ii = 0; ii < 100; ++ii)
            {
                for (int jj = 0; jj < 200; ++jj)
                {
                    EntitySceneNode node = new EntitySceneNode();
                    node.SetEntity(geom);
                    node.SetTransform(GlobalInstance.MatrixBuilder.MakeTranslate(ii * 5 - 250, jj * 5 - 500, 0));
                    renderView.ShowSceneNode(node);
                }
            }

            renderView.RequestDraw();
        }