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; } } }
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"); } }
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); } } }
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; } }