hsG3DDeviceModeRecord plUpdatableClient::ILoadDevMode(const char* devModeFile) { // Get the usual devmode hsG3DDeviceModeRecord dmr = plClient::ILoadDevMode(devModeFile); // Override the mode with a windowed one hsG3DDeviceMode *mode = (hsG3DDeviceMode*)dmr.GetMode(); mode->SetColorDepth(0); return hsG3DDeviceModeRecord(*dmr.GetDevice(), *mode); }
bool hsG3DDeviceSelector::GetDefault (hsG3DDeviceModeRecord *dmr) { int32_t iTnL, iD3D, iOpenGL, device, mode, i; device = iTnL = iD3D = iOpenGL = mode = -1; if (device == -1) { // Get an index for any 3D devices for (i = 0; i < fRecords.GetCount(); i++) { switch (fRecords[i].GetG3DDeviceType()) { case kDevTypeDirect3D: if (fRecords[i].GetG3DHALorHEL() == kHHD3DTnLHalDev) { if (iTnL == -1 #ifndef PLASMA_EXTERNAL_RELEASE || plPipeline::fInitialPipeParams.ForceSecondMonitor #endif // PLASMA_EXTERNAL_RELEASE ) { iTnL = i; } } else if (fRecords[i].GetG3DHALorHEL() == kHHD3DHALDev) { if (iD3D == -1 #ifndef PLASMA_EXTERNAL_RELEASE || plPipeline::fInitialPipeParams.ForceSecondMonitor #endif // PLASMA_EXTERNAL_RELEASE ) { iD3D = i; } } break; case kDevTypeOpenGL: if (iOpenGL == -1 #ifndef PLASMA_EXTERNAL_RELEASE || plPipeline::fInitialPipeParams.ForceSecondMonitor #endif // PLASMA_EXTERNAL_RELEASE ) { iOpenGL = i; } break; } } // Pick a default device (Priority D3D T&L, D3D HAL, OpenGL) if (iTnL != -1) device = iTnL; else if (iD3D != -1) device = iD3D; else if (iOpenGL != -1) device = iOpenGL; else return false; } // // Try and find the default mode // hsTArray<hsG3DDeviceMode>& modes = fRecords[device].GetModes(); // If there are no modes (for some insane reason), fail if (modes.GetCount() == 0) return false; for (i = 0; i < modes.GetCount(); i++) { if ((modes[i].GetWidth() == kDefaultWidth) && (modes[i].GetHeight() == kDefaultHeight) && (modes[i].GetNumZStencilDepths() > 0)) { // Don't be too picky about the depth, use what's available if the // default isn't found. if (mode == -1 || modes[mode].GetColorDepth() != kDefaultDepth) mode = i; } } // Default mode not found, what kind of card is this?! // Regardless, just use the first mode since this isn't a fatal error. if (mode == -1) mode = 0; *dmr = hsG3DDeviceModeRecord(fRecords[device], modes[mode]); return true; }