2011-01-02 3 views
1

Возможно ли создать приложение device/directx, когда pc использует режим vgasave?
Это моя функция инициализации:Устройство D3D в vgasave

d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface 

    D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information 

    ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use 
    d3dpp.Windowed = TRUE; // program windowed, not fullscreen 
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // discard old frames 
    d3dpp.hDeviceWindow = hWnd; // set the window to be used by Direct3D 


    // create a device class using this information and the info from the d3dpp stuct 
    d3d->CreateDevice(D3DADAPTER_DEFAULT, 
         D3DDEVTYPE_HAL, 
         hWnd, 
         D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
         &d3dpp, 
         &d3ddev); 

Однако, когда я перезвоните позже

d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0); 

сбоев программы, сообщая о необработанном нарушении. Или, может быть, речь идет не о vga, просто я делаю что-то неправильно?


CreateDevice возвращает D3DERR_NOTAVAILABLE

+0

Странный вопрос. Ошибка возврата does * not * означает «использовать указатель в любом случае». –

ответ

2

Вы заполнили слишком много параметров в D3DPRESENT_PARAMETERS. У вас наверняка есть плохие настройки для заднего буфера и такого рода вещи. Если CreateDevice возвращает D3DERR_NOTAVAILABLE, то указатель d3ddev имеет значение NULL, что приводит к нарушению доступа при попытке очистить задний буфер, поскольку нет устройства.

D3DDeviceParameters.Windowed = true; 
D3DDeviceParameters.BackBufferHeight = 0; 
D3DDeviceParameters.BackBufferWidth = 0; 
D3DDeviceParameters.BackBufferCount = 1; 
D3DDeviceParameters.BackBufferFormat = D3DFMT_X8R8G8B8; 
D3DDeviceParameters.MultiSampleQuality = 0; 
D3DDeviceParameters.MultiSampleType = D3DMULTISAMPLE_NONE; 
D3DDeviceParameters.SwapEffect = D3DSWAPEFFECT_DISCARD; 
D3DDeviceParameters.hDeviceWindow = OS->GetHWND(); 
D3DDeviceParameters.EnableAutoDepthStencil = true; 
D3DDeviceParameters.AutoDepthStencilFormat = D3DFMT_D24S8; 
D3DDeviceParameters.Flags = 0; 
D3DDeviceParameters.FullScreen_RefreshRateInHz = 0; 
D3DDeviceParameters.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Vsync. 

Это мой D3DPRESENT_PARAMETERS.

+0

С аналогичным, как указано выше, он по-прежнему не доступен. – Neomex

+1

@Neomex: Затем вам нужно выяснить, какие устройства доступны. D3D9 может быть очень затруднительным - устройствам, например, не нужно поддерживать все форматы backbuffer. Вам нужно использовать другие методы в интерфейсе IDirect3D9, чтобы узнать, какие устройства доступны. – Puppy

+0

Работы на D3DDEVTYPE_REF, спасибо! – Neomex

Смежные вопросы