Example #1
0
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,
                                               &parameters, &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);
}
Example #2
0
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();
	
}
Example #3
0
void UIDirect3D9Window::HandleDeviceReset(void)
{
    D3DPRESENT_PARAMETERS parameters;
    GetPresentParameters(parameters);

    {
        HRESULT reset = m_d3dDevice->Reset(&parameters);
        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);
        }
    }
}