예제 #1
0
 private unsafe void SetCallbacks(Wrapper wrapper)
 {
     _environmentCallback      = wrapper.RetroEnvironmentCallback;
     _videoRefreshCallback     = wrapper.RetroVideoRefreshCallback;
     _audioSampleCallback      = wrapper.RetroAudioSampleCallback;
     _audioSampleBatchCallback = wrapper.RetroAudioSampleBatchCallback;
     _inputPollCallback        = wrapper.RetroInputPollCallback;
     _inputStateCallback       = wrapper.RetroInputStateCallback;
     _logPrintfCallback        = wrapper.RetroLogPrintf;
     _perfGetTimeUsecCallback  = wrapper.RetroPerfGetTimeUsec;
     _perfGetCounterCallback   = wrapper.RetroPerfGetCounter;
     _getCPUFeaturesCallback   = wrapper.RetroGetCPUFeatures;
     _perfLogCallback          = wrapper.RetroPerfLog;
     _perfRegisterCallback     = wrapper.RetroPerfRegister;
     _perfStartCallback        = wrapper.RetroPerfStart;
     _perfStopCallback         = wrapper.RetroPerfStop;
 }
예제 #2
0
        protected void InitInterfaces()
        {
            retro_log_printf_cb = new retro_log_printf_t(RetroLogPrintf);
            retro_rumble_interface.set_rumble_state = new retro_set_rumble_state_t(RetroSetRumbleState);

            //no way (need new mechanism) to check for SSSE3, MMXEXT, SSE4, SSE42
            retro_perf_callback.get_cpu_features = new retro_get_cpu_features_t(() => (ulong)(
                                                                                    (Win32PInvokes.IsProcessorFeaturePresent(Win32PInvokes.ProcessorFeature.InstructionsXMMIAvailable) ? RETRO_SIMD.SSE : 0) |
                                                                                    (Win32PInvokes.IsProcessorFeaturePresent(Win32PInvokes.ProcessorFeature.InstructionsXMMI64Available) ? RETRO_SIMD.SSE2 : 0) |
                                                                                    (Win32PInvokes.IsProcessorFeaturePresent(Win32PInvokes.ProcessorFeature.InstructionsSSE3Available) ? RETRO_SIMD.SSE3 : 0) |
                                                                                    (Win32PInvokes.IsProcessorFeaturePresent(Win32PInvokes.ProcessorFeature.InstructionsMMXAvailable) ? RETRO_SIMD.MMX : 0)
                                                                                    ));
            retro_perf_callback.get_perf_counter = new retro_perf_get_counter_t(() => System.Diagnostics.Stopwatch.GetTimestamp());
            retro_perf_callback.get_time_usec    = new retro_perf_get_time_usec_t(() => DateTime.Now.Ticks / 10);
            retro_perf_callback.perf_log         = new retro_perf_log_t(() => { });
            retro_perf_callback.perf_register    = new retro_perf_register_t((ref retro_perf_counter counter) => { });
            retro_perf_callback.perf_start       = new retro_perf_start_t((ref retro_perf_counter counter) => { });
            retro_perf_callback.perf_stop        = new retro_perf_stop_t((ref retro_perf_counter counter) => { });
        }