void AppendRetroShaderChain(FilterProgram program, string name, BizHawk.Client.EmuHawk.Filters.RetroShaderChain retroChain, Dictionary <string, object> properties) { for (int i = 0; i < retroChain.Passes.Length; i++) { var pass = retroChain.Passes[i]; var rsp = new BizHawk.Client.EmuHawk.Filters.RetroShaderPass(retroChain, i); string fname = string.Format("{0}[{1}]", name, i); program.AddFilter(rsp, fname); rsp.Parameters = properties; } }
FilterProgram BuildDefaultChain(Size chain_insize, Size chain_outsize, bool includeOSD) { //select user special FX shader chain Dictionary <string, object> selectedChainProperties = new Dictionary <string, object>(); BizHawk.Client.EmuHawk.Filters.RetroShaderChain selectedChain = null; if (Global.Config.TargetDisplayFilter == 3 && ShaderChain_user != null && ShaderChain_user.Available) { selectedChain = ShaderChain_user; } BizHawk.Client.EmuHawk.Filters.FinalPresentation fPresent = new BizHawk.Client.EmuHawk.Filters.FinalPresentation(chain_outsize); BizHawk.Client.EmuHawk.Filters.SourceImage fInput = new BizHawk.Client.EmuHawk.Filters.SourceImage(chain_insize); BizHawk.Client.EmuHawk.Filters.OSD fOSD = new BizHawk.Client.EmuHawk.Filters.OSD(); fOSD.RenderCallback = () => { if (!includeOSD) { return; } var size = fOSD.FindInput().SurfaceFormat.Size; Renderer.Begin(size.Width, size.Height); Renderer.SetBlendState(GL.BlendNormal); Renderer.End(); }; var chain = new FilterProgram(); //add the first filter, encompassing output from the emulator core chain.AddFilter(fInput, "input"); //choose final filter BizHawk.Client.EmuHawk.Filters.FinalPresentation.eFilterOption finalFilter = BizHawk.Client.EmuHawk.Filters.FinalPresentation.eFilterOption.None; if (Global.Config.DispFinalFilter == 1) { finalFilter = BizHawk.Client.EmuHawk.Filters.FinalPresentation.eFilterOption.Bilinear; } if (Global.Config.DispFinalFilter == 2) { finalFilter = BizHawk.Client.EmuHawk.Filters.FinalPresentation.eFilterOption.Bicubic; } finalFilter = BizHawk.Client.EmuHawk.Filters.FinalPresentation.eFilterOption.None; fPresent.FilterOption = finalFilter; //add final presentation chain.AddFilter(fPresent, "presentation"); return(chain); }
public void RefreshUserShader() { if (ShaderChain_user != null) { ShaderChain_user.Dispose(); } if (File.Exists(Global.Config.DispUserFilterPath)) { var fi = new FileInfo(Global.Config.DispUserFilterPath); using (var stream = fi.OpenRead()) ShaderChain_user = new BizHawk.Client.EmuHawk.Filters.RetroShaderChain(GL, new BizHawk.Client.EmuHawk.Filters.RetroShaderPreset(stream), Path.GetDirectoryName(Global.Config.DispUserFilterPath)); } }
private void btnSelectUserFilter_Click(object sender, EventArgs e) { using var ofd = new OpenFileDialog { Filter = ".CGP (*.cgp)|*.cgp", FileName = _pathSelection }; if (ofd.ShowDialog() == DialogResult.OK) { rbUser.Checked = true; var choice = Path.GetFullPath(ofd.FileName); //test the preset using (var stream = File.OpenRead(choice)) { var cgp = new BizHawk.Client.EmuHawk.Filters.RetroShaderPreset(stream); if (cgp.ContainsGlsl) { MessageBox.Show("Specified CGP contains references to .glsl files. This is illegal. Use .cg"); return; } // try compiling it bool ok = false; string errors = ""; try { var filter = new BizHawk.Client.EmuHawk.Filters.RetroShaderChain(GlobalWin.GL, cgp, Path.GetDirectoryName(choice)); ok = filter.Available; errors = filter.Errors; } catch {} if (!ok) { using var errorForm = new ExceptionBox(errors); errorForm.ShowDialog(); return; } } _pathSelection = choice; RefreshState(); } }
public void RefreshUserShader() { if (ShaderChain_user != null) ShaderChain_user.Dispose(); if (File.Exists(Global.Config.DispUserFilterPath)) { var fi = new FileInfo(Global.Config.DispUserFilterPath); using (var stream = fi.OpenRead()) ShaderChain_user = new BizHawk.Client.EmuHawk.Filters.RetroShaderChain(GL, new BizHawk.Client.EmuHawk.Filters.RetroShaderPreset(stream), Path.GetDirectoryName(Global.Config.DispUserFilterPath)); } }
private void btnSelectUserFilter_Click(object sender, EventArgs e) { var ofd = new OpenFileDialog(); ofd.Filter = ".CGP (*.cgp)|*.cgp"; ofd.FileName = PathSelection; if (ofd.ShowDialog() == DialogResult.OK) { rbUser.Checked = true; var choice = Path.GetFullPath(ofd.FileName); //test the preset using (var stream = File.OpenRead(choice)) { var cgp = new BizHawk.Client.EmuHawk.Filters.RetroShaderPreset(stream); if (cgp.ContainsGLSL) { MessageBox.Show("Specified CGP contains references to .glsl files. This is illegal. Use .cg"); return; } //try compiling it bool ok = false; string errors = ""; try { var filter = new BizHawk.Client.EmuHawk.Filters.RetroShaderChain(GlobalWin.GL, cgp, Path.GetDirectoryName(choice)); ok = filter.Available; errors = filter.Errors; } catch {} if (!ok) { new ExceptionBox(errors).ShowDialog(); return; } } PathSelection = choice; RefreshState(); } }