void CreateNewContextAndRemoveOldOne()
        {
            Console.WriteLine("----------------------------------------------");
            // Stops the current context if it has one already.
            if (PspRunner != null)
            {
                PspRunner.StopSynchronized();

                InjectContext.GetInstance <PspMemory>().Dispose();
                InjectContext.GetInstance <GpuImpl>().StopSynchronized();
                InjectContext.GetInstance <PspAudioImpl>().StopSynchronized();

                PspRunner = null;
                _InjectContext.Dispose();
                _InjectContext = null;
                GC.Collect();
            }

            lock (this)
            {
                _InjectContext = PspInjectContext.CreateInjectContext(StoredConfig, test: false);
                _InjectContext.SetInstanceType <IGuiExternalInterface, PspEmulator>();

                _InjectContext.InjectDependencesTo(this);

                PspRunner.StartSynchronized();
            }

            //GpuImpl.InitSynchronizedOnce();
        }
示例#2
0
        void CreateNewContextAndRemoveOldOne()
        {
            ContextInitializedFlag = false;
            ContextInitialized.Reset();
            {
                // Stops the current context if it has one already.
                if (PspRunner != null)
                {
                    PspRunner.StopSynchronized();

                    PspEmulatorContext.GetInstance <PspMemory>().Dispose();
                    PspEmulatorContext.GetInstance <GpuImpl>().StopSynchronized();
                    PspEmulatorContext.GetInstance <PspAudioImpl>().StopSynchronized();

                    PspRunner          = null;
                    PspEmulatorContext = null;
                    GC.Collect();
                }

                foreach (var FileName in new [] {
                    Path.GetDirectoryName(typeof(Program).Assembly.Location) + @"\CSPspEmu.Hle.Modules.dll",
                    Application.ExecutablePath,
                })
                {
                    if (File.Exists(FileName))
                    {
                        PspConfig.HleModulesDll = Assembly.LoadFile(FileName);
                        break;
                    }
                }
                //

                PspEmulatorContext = new PspEmulatorContext(PspConfig);

                {
                    PspEmulatorContext.SetInstanceType <GpuImpl, OpenglGpuImpl>();
                    PspEmulatorContext.SetInstanceType <PspAudioImpl, PspAudioOpenalImpl>();

#if RELEASE
                    PspEmulatorContext.SetInstanceType <PspMemory, FastPspMemory>();
#else
                    PspEmulatorContext.SetInstanceType <PspMemory, NormalPspMemory>();
#endif

                    /*
                     * if (PspConfig.UseFastAndUnsaferMemory)
                     * {
                     *      PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();
                     * }
                     * else
                     * {
                     *      PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
                     * }
                     */
                }

                PspRunner = PspEmulatorContext.GetInstance <PspRunner>();
                PspRunner.StartSynchronized();

                var GpuImpl = PspEmulatorContext.GetInstance <GpuImpl>();
                GpuImpl.InitSynchronizedOnce();
            }
            ContextInitializedFlag = true;
            ContextInitialized.Set();
        }