unsafe private void NotifyMaterialSetup(uint pass_id, MaterialPtr mat)
        {
            // Prepare the fragment params offsets
            switch (pass_id)
            {
            //case 994: // rt_lum4
            case 993:     // rt_lum3
            case 992:     // rt_lum2
            case 991:     // rt_lum1
            case 990:     // rt_lum0
                break;

            case 800:     // rt_brightpass
                break;

            case 701:     // rt_bloom1
            {
                // horizontal bloom
                mat.Load();
                GpuProgramParametersSharedPtr fparams =
                    mat.GetBestTechnique().GetPass(0).GetFragmentProgramParameters();
                String progName = mat.GetBestTechnique().GetPass(0).FragmentProgramName;
                fixed(float *p_mBloomTexOffsetsHorz = &mBloomTexOffsetsHorz[0, 0])
                {
                    fparams.SetNamedConstant("sampleOffsets", p_mBloomTexOffsetsHorz, 15);
                }

                fixed(float *p_mBloomTexWeights = &mBloomTexWeights[0, 0])
                {
                    fparams.SetNamedConstant("sampleWeights", p_mBloomTexWeights, 15);
                }

                break;
            }

            case 700:     // rt_bloom0
            {
                // vertical bloom
                mat.Load();
                GpuProgramParametersSharedPtr fparams =
                    mat.GetTechnique(0).GetPass(0).GetFragmentProgramParameters();
                String progName = mat.GetBestTechnique().GetPass(0).FragmentProgramName;
                fixed(float *p_mBloomTexOffsetsVert = &mBloomTexOffsetsVert[0, 0])
                {
                    fparams.SetNamedConstant("sampleOffsets", p_mBloomTexOffsetsVert, 15);
                }

                fixed(float *p_mBloomTexWeights = &mBloomTexWeights[0, 0])
                {
                    fparams.SetNamedConstant("sampleWeights", p_mBloomTexWeights, 15);
                }

                break;
            }
            }
        }
Exemple #2
0
 public void setupVirtualTextureFragmentParams(GpuProgramParametersSharedPtr gpuParams, IndirectionTexture indirectionTexture)
 {
     if (gpuParams.Value.hasNamedConstant("physicalSizeRecip"))
     {
         gpuParams.Value.setNamedConstant("physicalSizeRecip", PhysicalSizeRecrip);
         var realSize = indirectionTexture.RealTextureSize;
         gpuParams.Value.setNamedConstant("mipBiasSize", new Vector2(realSize.Width, realSize.Height));
         gpuParams.Value.setNamedConstant("pagePaddingScale", TextureLoader.PagePaddingScale);
         gpuParams.Value.setNamedConstant("pagePaddingOffset", TextureLoader.PagePaddingOffset);
         if (gpuParams.Value.hasNamedConstant("pageSizeLog2"))
         {
             gpuParams.Value.setNamedConstant("pageSizeLog2", pageSizeLog2);
         }
     }
     else
     {
         Logging.Log.Error("physicalSizeRecip varaible missing");
     }
 }
Exemple #3
0
        private void BindGpuProgramParameters(GpuProgramType type, Miyagi.Common.Resources.GpuProgram gpuProg)
        {
            if (gpuProg.NamedConstants.Count > 0)
            {
                using (GpuProgramParametersSharedPtr gpuParas = type == GpuProgramType.GPT_FRAGMENT_PROGRAM
                                                                                                                                        ? this.MogreRenderManager.Pass.GetFragmentProgramParameters()
                                                                                                                                        : this.MogreRenderManager.Pass.GetVertexProgramParameters())
                {
                    foreach (KeyValuePair <string, object> kvp in gpuProg.NamedConstants)
                    {
                        object o = kvp.Value;

                        if (o is ColourValue)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (ColourValue)o);
                        }
                        else if (o is int)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (int)o);
                        }
                        else if (o is float)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (float)o);
                        }
                        else if (o is Matrix4)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (Matrix4)o);
                        }
                        else if (o is Vector3)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (Vector3)o);
                        }
                        else if (o is Vector4)
                        {
                            gpuParas.SetNamedConstant(kvp.Key, (Vector4)o);
                        }
                    }

                    this.renderSystem.BindGpuProgramParameters(type, gpuParas, (ushort)GpuParamVariability.GPV_ALL);
                }
            }
        }
Exemple #4
0
        public override void notifyMaterialSetup(uint pass_id, MaterialPtr mat)
        {
            // Prepare the fragment params offsets
            switch (pass_id)
            {
            //case 994: // rt_lum4
            case 993:                     // rt_lum3
            case 992:                     // rt_lum2
            case 991:                     // rt_lum1
            case 990:                     // rt_lum0
            {
                // Need to set the texel size
                // Set from source, which is the one higher in the chain
                mat.Get().Load();
                uint  idx       = pass_id - 990 + 1;
                float texelSize = 1.0f / (float)mLumSize[idx];
                GpuProgramParametersSharedPtr fparams =
                    mat.Get().GetBestTechnique().getPass(0).getFragmentProgramParameters();
                fparams.Get().setNamedConstant("texelSize", texelSize);
            }
            break;

            case 800:                     // rt_brightpass
                break;

            case 701:                     // rt_bloom1
            {
                // horizontal bloom
                mat.Get().Load();
                GpuProgramParametersSharedPtr fparams =
                    mat.Get().GetBestTechnique().getPass(0).getFragmentProgramParameters();
                string progName = mat.Get().GetBestTechnique().getPass(0).getFragmentProgramName();
                // A bit hacky - Cg & HLSL index arrays via [0], GLSL does not
                if (progName.IndexOf("GLSL") > -1)
                {
                    fparams.setNamedConstant("sampleOffsets", mBloomTexOffsetsHorz, 15);
                    fparams.setNamedConstant("sampleWeights", mBloomTexWeights, 15);
                }
                else
                {
                    fparams.setNamedConstant("sampleOffsets[0]", mBloomTexOffsetsHorz, 15);
                    fparams.setNamedConstant("sampleWeights[0]", mBloomTexWeights, 15);
                }
            }
            break;

            case 700:                     // rt_bloom0
            {
                // vertical bloom
                mat.Get().Load();
                GpuProgramParametersSharedPtr fparams =
                    mat.Get().GetTechnique(0).getPass(0).getFragmentProgramParameters();
                string progName = mat.Get().GetBestTechnique().getPass(0).getFragmentProgramName();
                // A bit hacky - Cg & HLSL index arrays via [0], GLSL does not
                if (progName.IndexOf("GLSL") > -1)
                {
                    fparams.setNamedConstant("sampleOffsets", mBloomTexOffsetsVert, 15);
                    fparams.setNamedConstant("sampleWeights", mBloomTexWeights, 15);
                }
                else
                {
                    fparams.setNamedConstant("sampleOffsets[0]", mBloomTexOffsetsVert, 15);
                    fparams.setNamedConstant("sampleWeights[0]", mBloomTexWeights, 15);
                }
            }
            break;
            }
        }