Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendevice.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS ReactX 00004 * FILE: dll/directx/d3d9/device.c 00005 * PURPOSE: Direct3D9's device creation 00006 * PROGRAMERS: Gregor Gullwi <gbrunmar (dot) ros (at) gmail (dot) com> 00007 */ 00008 00009 #include "device.h" 00010 #include <debug.h> 00011 #include "d3d9_helpers.h" 00012 #include "d3d9_create.h" 00013 00014 static HRESULT InitD3D9ResourceManager(D3D9ResourceManager* pThisResourceManager, LPDIRECT3DDEVICE9_INT pDirect3DDevice9) 00015 { 00016 DWORD MaxSimultaneousTextures; 00017 00018 MaxSimultaneousTextures = max(1, pDirect3DDevice9->DeviceData[0].DriverCaps.DriverCaps9.MaxSimultaneousTextures); 00019 00020 if (FAILED(AlignedAlloc((LPVOID *)&pThisResourceManager->pTextureHeap, sizeof(DWORD) + MaxSimultaneousTextures * sizeof(int) * 3))) 00021 { 00022 DPRINT1("Could not allocate texture heap"); 00023 return DDERR_OUTOFMEMORY; 00024 } 00025 00026 // TODO: Init texture heap 00027 00028 pThisResourceManager->MaxSimultaneousTextures = MaxSimultaneousTextures; 00029 pThisResourceManager->pBaseDevice = pDirect3DDevice9; 00030 00031 return D3D_OK; 00032 } 00033 00034 HRESULT InitD3D9BaseDevice(LPDIRECT3DDEVICE9_INT pThisBaseDevice, LPDIRECT3D9_INT pDirect3D9, 00035 UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviourFlags, 00036 D3DPRESENT_PARAMETERS* pPresentationParameters, DWORD NumAdaptersToCreate) 00037 { 00038 D3D9ResourceManager* pResourceManager; 00039 DWORD i; 00040 00041 // Insert Reset/Ctor here 00042 00043 if (FAILED(AlignedAlloc((LPVOID *)&pResourceManager, sizeof(D3D9ResourceManager))) || 00044 FAILED(InitD3D9ResourceManager(pResourceManager, pThisBaseDevice))) 00045 { 00046 DPRINT1("Could not create resource manager"); 00047 return DDERR_OUTOFMEMORY; 00048 } 00049 00050 pThisBaseDevice->pResourceManager = pResourceManager; 00051 00052 pThisBaseDevice->lpVtbl = &Direct3DDevice9HAL_Vtbl; 00053 pThisBaseDevice->lRefCnt = 1; 00054 pThisBaseDevice->dwProcessId = GetCurrentThreadId(); 00055 pThisBaseDevice->pUnknown = (IUnknown*) &pThisBaseDevice->lpVtbl; 00056 InitializeCriticalSection(&pThisBaseDevice->CriticalSection); 00057 00058 pThisBaseDevice->pDirect3D9 = pDirect3D9; 00059 pThisBaseDevice->DeviceType = DeviceType; 00060 pThisBaseDevice->hWnd = hFocusWindow; 00061 pThisBaseDevice->AdjustedBehaviourFlags = BehaviourFlags; 00062 pThisBaseDevice->BehaviourFlags = BehaviourFlags; 00063 pThisBaseDevice->NumAdaptersInDevice = NumAdaptersToCreate; 00064 00065 // TODO: Query driver for correct DX version 00066 pThisBaseDevice->dwDXVersion = 9; 00067 00068 for (i = 0; i < NumAdaptersToCreate; i++) 00069 { 00070 if (FALSE == CreateD3D9DeviceData(&pDirect3D9->DisplayAdapters[i], &pThisBaseDevice->DeviceData[i])) 00071 { 00072 DPRINT1("Failed to get device data for adapter: %d", i); 00073 return DDERR_GENERIC; 00074 } 00075 00076 pThisBaseDevice->AdapterIndexInGroup[i] = i; 00077 pThisBaseDevice->CurrentDisplayMode[i].Width = pDirect3D9->DisplayAdapters[i].DriverCaps.dwDisplayWidth; 00078 pThisBaseDevice->CurrentDisplayMode[i].Height = pDirect3D9->DisplayAdapters[i].DriverCaps.dwDisplayHeight; 00079 pThisBaseDevice->CurrentDisplayMode[i].RefreshRate = pDirect3D9->DisplayAdapters[i].DriverCaps.dwRefreshRate; 00080 pThisBaseDevice->CurrentDisplayMode[i].Format = pDirect3D9->DisplayAdapters[i].DriverCaps.RawDisplayFormat; 00081 00082 pThisBaseDevice->pSwapChains[i] = CreateDirect3DSwapChain9(RT_BUILTIN, pThisBaseDevice, i); 00083 pThisBaseDevice->pSwapChains2[i] = pThisBaseDevice->pSwapChains[i]; 00084 00085 if (FAILED(Direct3DSwapChain9_Init(pThisBaseDevice->pSwapChains[i], pPresentationParameters))) 00086 { 00087 DPRINT1("Failed to init swap chain: %d", i); 00088 return DDERR_GENERIC; 00089 } 00090 } 00091 00092 return D3D_OK; 00093 } 00094 00095 HRESULT CreateD3D9HalDevice(LPDIRECT3D9_INT pDirect3D9, UINT Adapter, 00096 HWND hFocusWindow, DWORD BehaviourFlags, 00097 D3DPRESENT_PARAMETERS* pPresentationParameters, 00098 DWORD NumAdaptersToCreate, 00099 struct IDirect3DDevice9** ppReturnedDeviceInterface) 00100 { 00101 HRESULT Ret; 00102 00103 if (FAILED(AlignedAlloc((LPVOID *)ppReturnedDeviceInterface, sizeof(D3D9HALDEVICE)))) 00104 { 00105 DPRINT1("Not enough memory to create HAL device"); 00106 return DDERR_OUTOFMEMORY; 00107 } 00108 00109 Ret = InitD3D9BaseDevice((LPDIRECT3DDEVICE9_INT)*ppReturnedDeviceInterface, pDirect3D9, Adapter, 00110 D3DDEVTYPE_HAL, hFocusWindow, BehaviourFlags, 00111 pPresentationParameters, NumAdaptersToCreate); 00112 00113 if (FAILED(Ret)) 00114 { 00115 AlignedFree((LPVOID)*ppReturnedDeviceInterface); 00116 return Ret; 00117 } 00118 00119 return D3D_OK; 00120 } Generated on Sat May 26 2012 04:19:53 for ReactOS by
1.7.6.1
|