XML test
C
code posted
created at 17 Jun 13:56, updated at 21 Aug 16:05
Edit
|
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
class DepthOfField { // Autofocus ID3D10Texture1D *autofocus_texture_; // Viewport and texture dimensions UINT width_; UINT height_; }; HRESULT DepthOfField::OnDeviceCreated(ID3D10Device *device) { HRESULT hr; D3D10_TEXTURE1D_DESC tex1d_desc; tex1d_desc.Width = 1; tex1d_desc.MipLevels = 1; tex1d_desc.ArraySize = 1; tex1d_desc.Format = DXGI_FORMAT_R32_TYPELESS; tex1d_desc.Usage = D3D10_USAGE_STAGING; tex1d_desc.BindFlags = 0; tex1d_desc.CPUAccessFlags = D3D10_CPU_ACCESS_READ; tex1d_desc.MiscFlags = 0; V(device->CreateTexture1D(&tex1d_desc, NULL, &autofocus_texture_)); return S_OK; } void DepthOfField3::OnWindowResized(ID3D10Device *device, UINT width, UINT height) { width_ = width; height_ = height; } void DepthOfField3::OnDeviceDestroyed(void) { SAFE_RELEASE(autofocus_texture_); } void DepthOfField3::Draw(ID3D10Device *device) { // Autofocus D3D10_BOX box; box.left = width_ / 2; box.right = box.left + 1; box.top = height_ / 2; box.bottom = box.top + 1; box.front = 0; box.back = 1; device->CopySubresourceRegion(autofocus_texture_, 0, 0, 0, 0, depth_texture_, 0, &box); float *data; if (SUCCEEDED(autofocus_texture_->Map(0, D3D10_MAP_READ, 0, (void**)&data))) { focal_plane_depth_ = near_clip*far_clip / ((*data)*(near_clip - far_clip) + far_clip); autofocus_texture_->Unmap(0); } autofocus_ = false; } |
1.42 KB in 3 ms with coderay