EXPORT_C_(int32) GPUopen(void* hWnd) { GPUclose(); if(!GSUtil::CheckSSE()) { return -1; } #ifdef _WINDOWS s_hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); if(!GSUtil::CheckDirectX()) { return -1; } #endif int renderer = theApp.GetConfig("Renderer", 1); int threads = theApp.GetConfig("extrathreads", 0); switch(renderer) { default: #ifdef _WINDOWS case 0: s_gpu = new GPURendererSW(new GSDevice9(), threads); break; case 1: s_gpu = new GPURendererSW(new GSDevice11(), threads); break; #endif case 2: s_gpu = new GPURendererSW(new GSDeviceSDL(), threads); break; case 3: s_gpu = new GPURendererSW(new GSDeviceNull(), threads); break; //case 4: s_gpu = new GPURendererNull(new GSDeviceNull()); break; } if(!s_gpu->Create(hWnd)) { GPUclose(); return -1; } return 0; }
long CALLBACK ZN_GPUclose() { return GPUclose(); }