|
//------------------------------------------------------------------------------------ // Create direct3D interface and direct3D device. //------------------------------------------------------------------------------------ bool TRANSPARENT_BLEND::Create_D3D_Device(HWND hwnd, bool full_screen) {
// Create a IDirect3D9 object and returns an interace to it. _d3d = Direct3DCreate9(D3D_SDK_VERSION);
if(_d3d == NULL)
return
false;
// retrieve adapter capability D3DCAPS9 d3d_caps; _d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3d_caps);
bool hardware_process_enable = (d3d_caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ? true : false);
// Retrieves the current display mode of the adapter. D3DDISPLAYMODE display_mode;
if(FAILED(_d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &display_mode)))
return
false;
// set present parameter for direct3D device D3DPRESENT_PARAMETERS present_param;
ZeroMemory(&present_param, sizeof(present_param));
present_param.BackBufferWidth = WINDOW_WIDTH; present_param.BackBufferHeight = WINDOW_HEIGHT; present_param.BackBufferFormat = display_mode.Format; present_param.BackBufferCount = 1; present_param.hDeviceWindow = hwnd; present_param.Windowed = !full_screen; present_param.SwapEffect = D3DSWAPEFFECT_FLIP; present_param.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
// Creates a device to represent the display adapter. DWORD behavior_flags;
behavior_flags = hardware_process_enable ? D3DCREATE_HARDWARE_VERTEXPROCESSING : D3DCREATE_SOFTWARE_VERTEXPROCESSING;
if(FAILED(_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, behavior_flags, &present_param, &_d3d_device))) {
return
false; }
// create successfully
return
true; }
//------------------------------------------------------------------------------------ // Initialize vertex buffer for tiger image. //------------------------------------------------------------------------------------ bool TRANSPARENT_BLEND::Init_Tiger_Vertex_Buffer() { CUSTOM_VERTEX tiger_vertex[] = { {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, {800.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f}, {0.0f, 600.0f, 0.0f, 1.0f, 0.0f, 1.0f}, {800.0f, 600.0f, 0.0f, 1.0f, 1.0f, 1.0f} };
BYTE* vertex_data;
// create vertex buffer
if(FAILED(_d3d_device->CreateVertexBuffer(4 * sizeof(CUSTOM_VERTEX), 0, CUSTOM_VERTEX_FVF, D3DPOOL_MANAGED, &_tiger_vertex_buffer, NULL))) {
return
false; }
// get data pointer to vertex buffer
if(FAILED(_tiger_vertex_buffer->Lock(0, 0, (void **) &vertex_data, 0)))
return
false;
// copy custom vertex data into vertex buffer memcpy(vertex_data, tiger_vertex, sizeof(tiger_vertex));
// unlock vertex buffer _tiger_vertex_buffer->Unlock();
return
true; }
//------------------------------------------------------------------------------------ // Initialize vertex buffer for gun image. //------------------------------------------------------------------------------------ bool TRANSPARENT_BLEND::Init_Gun_Vertex_Buffer() { CUSTOM_VERTEX gun_vertex[] = { {m_gun_pos_x, m_gun_pos_y, 0.0f, 1.0f, 0.0f, 0.0f}, {m_gun_pos_x+130.0f, m_gun_pos_y, 0.0f, 1.0f, 1.0f, 0.0f}, {m_gun_pos_x, m_gun_pos_y+130.0f, 0.0f, 1.0f, 0.0f, 1.0f}, {m_gun_pos_x+130.0f, m_gun_pos_y+130.0f, 0.0f, 1.0f, 1.0f, 1.0f} };
BYTE* vertex_data;
// create vertex buffer
if(FAILED(_d3d_device->CreateVertexBuffer(4 * sizeof(CUSTOM_VERTEX), 0, CUSTOM_VERTEX_FVF, D3DPOOL_MANAGED, &_gun_vertex_buffer, NULL))) {
return
false; }
// get data pointer to vertex buffer
if(FAILED(_gun_vertex_buffer->Lock(0, 0, (void **) &vertex_data, 0)))
return
false;
// copy custom vertex data into vertex buffer memcpy(vertex_data, gun_vertex, sizeof(gun_vertex));
// unlock vertex buffer _gun_vertex_buffer->Unlock();
return
true;
}
|
|