bool UIDirect3D9Window::InitialiseDirect3D9(void) { static LPFND3DC direct3Dcreate9 = NULL; // retrieve function pointer if (!direct3Dcreate9) { direct3Dcreate9 = (LPFND3DC)QLibrary::resolve("d3d9", "Direct3DCreate9"); if (!direct3Dcreate9) { LOG(VB_GENERAL, LOG_ERR, "Failed to find Direct3D9 library"); return false; } } // create D3D object m_d3dObject = direct3Dcreate9(D3D_SDK_VERSION); if (!m_d3dObject) { LOG(VB_GENERAL, LOG_ERR, "Failed to created D3D9 object"); return false; } LOG(VB_GENERAL, LOG_INFO, "Created D3D9 object"); // determine the adaptor unsigned int adaptor = GetAdapterNumber(); // retrieve the device capabilities D3DCAPS9 capabilities; memset(&capabilities, 0, sizeof(capabilities)); m_d3dObject->GetDeviceCaps(adaptor, D3DDEVTYPE_HAL, &capabilities); m_adaptorFormat = D3DFMT_X8R8G8B8; D3DDISPLAYMODE d3ddm; if (D3D_OK == m_d3dObject->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)) m_adaptorFormat = d3ddm.Format; // hardware/software vertex processing DWORD vertexflag = capabilities.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ? D3DCREATE_HARDWARE_VERTEXPROCESSING : D3DCREATE_SOFTWARE_VERTEXPROCESSING; // determine presentation parameters D3DPRESENT_PARAMETERS parameters; GetPresentParameters(parameters); // create the device HRESULT result = m_d3dObject->CreateDevice(adaptor, D3DDEVTYPE_HAL, winId(), vertexflag | D3DCREATE_MULTITHREADED, ¶meters, &m_d3dDevice); if (result != D3D_OK) { LOG(VB_GENERAL, LOG_ERR, "Failed to create D3D9 device"); return false; } D3DADAPTER_IDENTIFIER9 identifier; if (D3D_OK == m_d3dObject->GetAdapterIdentifier(adaptor, 0, &identifier)) { LOG(VB_GENERAL, LOG_INFO, QString("Device : %1").arg(identifier.Description)); LOG(VB_GENERAL, LOG_INFO, QString("Driver : %1").arg(identifier.Driver));; LOG(VB_GENERAL, LOG_INFO, QString("Version : %1.%2.%3.%4") .arg(HIWORD(identifier.DriverVersion.HighPart)) .arg(LOWORD(identifier.DriverVersion.HighPart)) .arg(HIWORD(identifier.DriverVersion.LowPart)) .arg(LOWORD(identifier.DriverVersion.LowPart))); LOG(VB_GUI, LOG_INFO, QString("VendorID: 0x%1").arg(identifier.VendorId, 0, 16)); LOG(VB_GUI, LOG_INFO, QString("DeviceID: 0x%1").arg(identifier.DeviceId, 0, 16)); } LOG(VB_GENERAL, LOG_INFO, "Created D3D9 device"); return Initialise2DState() && InitialiseView(m_d3dDevice, geometry()) && InitialiseTextures(m_d3dObject, m_d3dDevice, adaptor, m_adaptorFormat) && InitialiseShaders(m_d3dDevice); }
void InitCharacter() { /*** RWH cleans up the character initialisation it would be nice if this can be called when we load up a game of a different character ***/ // load charcater specific rif and sounds if(player_rif != INVALID_RIFFHANDLE) { // we already have a player loaded - delete the bastard avp_undo_rif_load(player_rif); } if(alien_weapon_rif != INVALID_RIFFHANDLE) { // we already have a player loaded - delete the bastard avp_undo_rif_load(alien_weapon_rif); } if(marine_weapon_rif != INVALID_RIFFHANDLE) { // we already have a player loaded - delete the bastard avp_undo_rif_load(marine_weapon_rif); } if(predator_weapon_rif != INVALID_RIFFHANDLE) { // we already have a player loaded - delete the bastard avp_undo_rif_load(predator_weapon_rif); } #if MaxImageGroups==1 InitialiseTextures(); #else SetCurrentImageGroup(0); DeallocateCurrentImages(); #endif //Start_Progress_Bar(); //Set_Progress_Bar_Position(PBAR_HUD_START); switch(AvP.Network) { case I_No_Network: { // set up the standard single player game switch(AvP.PlayerType) { case I_Marine: { marine_weapon_rif = avp_load_rif("avp_huds/marwep.rif"); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.25); player_rif = avp_load_rif("avp_huds/marine.rif"); break; } case I_Predator: { predator_weapon_rif = avp_load_rif("avp_huds/pred_hud.rif"); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.25); player_rif = avp_load_rif("avp_huds/predator.rif"); break; } case I_Alien: { #if ALIEN_DEMO alien_weapon_rif = avp_load_rif("alienavp_huds/alien_hud.rif"); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.25); player_rif = avp_load_rif("alienavp_huds/alien.rif"); #else alien_weapon_rif = avp_load_rif("avp_huds/alien_hud.rif"); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.25); player_rif = avp_load_rif("avp_huds/alien.rif"); #endif break; } default: { GLOBALASSERT(2<1); } } break; } default: { // set up a multiplayer game - here becuse we might end // up with a cooperative game //load all weapon rifs marine_weapon_rif = avp_load_rif("avp_huds/marwep.rif"); predator_weapon_rif = avp_load_rif("avp_huds/pred_hud.rif"); alien_weapon_rif = avp_load_rif("avp_huds/alien_hud.rif"); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.25); player_rif = avp_load_rif("avp_huds/multip.rif"); } } //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.5); #if MaxImageGroups>1 SetCurrentImageGroup(0); #endif copy_rif_data(player_rif,CCF_IMAGEGROUPSET,PBAR_HUD_START+PBAR_HUD_INTERVAL*.5,PBAR_HUD_INTERVAL*.25); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL*.75); if(alien_weapon_rif!=INVALID_RIFFHANDLE) copy_rif_data(alien_weapon_rif,CCF_LOAD_AS_HIERARCHY_IF_EXISTS|CCF_IMAGEGROUPSET|CCF_DONT_INITIALISE_TEXTURES,PBAR_HUD_START+PBAR_HUD_INTERVAL*.5,PBAR_HUD_INTERVAL*.25); if(marine_weapon_rif!=INVALID_RIFFHANDLE) copy_rif_data(marine_weapon_rif,CCF_LOAD_AS_HIERARCHY_IF_EXISTS|CCF_IMAGEGROUPSET|CCF_DONT_INITIALISE_TEXTURES,PBAR_HUD_START+PBAR_HUD_INTERVAL*.5,PBAR_HUD_INTERVAL*.25); if(predator_weapon_rif!=INVALID_RIFFHANDLE) copy_rif_data(predator_weapon_rif,CCF_LOAD_AS_HIERARCHY_IF_EXISTS|CCF_IMAGEGROUPSET|CCF_DONT_INITIALISE_TEXTURES,PBAR_HUD_START+PBAR_HUD_INTERVAL*.5,PBAR_HUD_INTERVAL*.25); //Set_Progress_Bar_Position(PBAR_HUD_START+PBAR_HUD_INTERVAL); copy_chunks_from_environment(0); /*KJL************************************* * Setup generic data for weapons etc * *************************************KJL*/ InitialiseEquipment(); InitHUD(); }
void UIDirect3D9Window::HandleDeviceReset(void) { D3DPRESENT_PARAMETERS parameters; GetPresentParameters(parameters); { HRESULT reset = m_d3dDevice->Reset(¶meters); switch (reset) { case D3D_OK: LOG(VB_GENERAL, LOG_INFO, "Device successfully reset"); m_deviceState = D3D_OK; // force some state changes m_blend = !m_blend; if (m_defaultRenderTarget) { m_defaultRenderTarget->Release(); m_defaultRenderTarget = NULL; } Initialise2DState(); InitialiseTextures(m_d3dObject, m_d3dDevice, GetAdapterNumber(), m_adaptorFormat); InitialiseView(m_d3dDevice, geometry()); InitialiseShaders(m_d3dDevice); break; case D3DERR_DEVICENOTRESET: LOG(VB_GUI, LOG_INFO, "Device still not reset"); break; case D3DERR_DEVICELOST: LOG(VB_GUI, LOG_INFO, "Device lost"); break; case D3DERR_DRIVERINTERNALERROR: LOG(VB_GUI, LOG_INFO, "Driver error"); break; case D3DERR_OUTOFVIDEOMEMORY: LOG(VB_GUI, LOG_INFO, "Out of video memory"); break; case D3DERR_INVALIDDEVICE: LOG(VB_GUI, LOG_INFO, "Invalid device"); break; case D3DERR_INVALIDCALL: LOG(VB_GUI, LOG_INFO, "Invalid call"); break; case D3DERR_DRIVERINVALIDCALL: LOG(VB_GUI, LOG_INFO, "Driver invalid call"); break; case D3DERR_NOTAVAILABLE: LOG(VB_GUI, LOG_INFO, "Not available"); break; default: LOG(VB_GUI, LOG_INFO, QString("Unknown Reset result %1").arg(reset)); } if (FAILED(reset)) { LOG(VB_GENERAL, LOG_INFO, "Releasing all direct3d resources"); if (m_defaultRenderTarget) { m_defaultRenderTarget->Release(); m_defaultRenderTarget = NULL; } if (m_currentRenderTarget) { m_currentRenderTarget->Release(); m_currentRenderTarget = NULL; } ReleaseAllTextures(); gLocalContext->NotifyEvent(Torc::DisplayDeviceReset); } } }