I'm a beginner in game programming and CG,and I'm reading Frank.Luna's Red Dragon book(DX10) these days...After I finished the first 4 units,especially the initialization of the Direct3D,
I still can't understand the word "view"...
What is a view ? a data format or structuct?
What is a view?
A view is a struct that has information about how to read a chunk of data on the memory. For example: A render target view is the input to a texture that is used to output the rendered scene together with a depth stencil view that will handle both input and output to the depth buffer of the same size.
This is a packet that I made to simplify use of textures that can be rendered to and from:
This is a packet that I made to simplify use of textures that can be rendered to and from:
struct DrawSurfaceItem { // Flags bool IsScreen; // Dimensions int CurrentWidth; int CurrentHeight; // Color buffer ID3D11RenderTargetView* ColorInput; // Input ID3D11Texture2D* ColorBuffer; // Buffer ID3D11ShaderResourceView* ColorOutput; // Output // Depth buffer ID3D11Texture2D* DepthBuffer; // Buffer ID3D11DepthStencilView* DepthInputAndOutput; // Input and output};void SetSizeOfDrawSurface(DrawSurfaceItem* Surface, int NewWidth, int NewHeight) { if (NewWidth < 1 || NewHeight < 1) { MessageBox(NULL, L"DrawSurfaceItem::SetSizeOfDrawSurface was called with non positive dimensions. Width and height may not be less than 1.", L"Error!", NULL); } else if (Surface->CurrentWidth != NewWidth || Surface->CurrentHeight != NewHeight) { // Release any old data to avoid memory leaks ReleaseDrawSurface(Surface); // Store dimensions Surface->CurrentWidth = NewWidth; Surface->CurrentHeight = NewHeight; // Color buffer D3D11_TEXTURE2D_DESC TextureDescription = { NewWidth,//UINT Width; NewHeight,//UINT Height; 1,//UINT MipLevels; 1,//UINT ArraySize; DXGI_FORMAT_R32G32B32A32_FLOAT,//DXGI_FORMAT Format; 1, 0,//DXGI_SAMPLE_DESC SampleDesc; D3D11_USAGE_DEFAULT,//D3D11_USAGE Usage; D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET,//UINT BindFlags; 0,//UINT CPUAccessFlags; 0//UINT MiscFlags; }; DXUTGetD3D11Device()->CreateTexture2D( &TextureDescription, NULL, &Surface->ColorBuffer ); // Depth buffer D3D11_TEXTURE2D_DESC DepthTextureDescription = TextureDescription; DepthTextureDescription.Format = DXGI_FORMAT_R32_TYPELESS; DepthTextureDescription.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; DXUTGetD3D11Device()->CreateTexture2D( &DepthTextureDescription, NULL, &Surface->DepthBuffer ); // Depth I/O D3D11_DEPTH_STENCIL_VIEW_DESC DepthIODescription = { DXGI_FORMAT_D32_FLOAT, D3D11_DSV_DIMENSION_TEXTURE2D, 0 }; DXUTGetD3D11Device()->CreateDepthStencilView( Surface->DepthBuffer, &DepthIODescription, &Surface->DepthInputAndOutput ); // Color output D3D11_SHADER_RESOURCE_VIEW_DESC TextureOutputDescription = { TextureDescription.Format, D3D11_SRV_DIMENSION_TEXTURE2D, 0, 0 }; TextureOutputDescription.Texture2D.MipLevels = 1; DXUTGetD3D11Device()->CreateShaderResourceView( Surface->ColorBuffer, &TextureOutputDescription, &Surface->ColorOutput ); // Color input D3D11_RENDER_TARGET_VIEW_DESC TextureInputDescription; TextureInputDescription.Format = TextureDescription.Format; TextureInputDescription.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; TextureInputDescription.Texture2D.MipSlice = 0; DXUTGetD3D11Device()->CreateRenderTargetView(Surface->ColorBuffer, &TextureInputDescription, &Surface->ColorInput ); }}void InitEmptyDrawSurface(DrawSurfaceItem* Surface) { Surface->IsScreen = false; Surface->CurrentWidth = -1; Surface->CurrentHeight = -1; Surface->ColorInput = NULL; Surface->ColorBuffer = NULL; Surface->ColorOutput = NULL; Surface->DepthBuffer = NULL; Surface->DepthInputAndOutput = NULL;}void GetScreenDrawSurface(DrawSurfaceItem* Surface) { Surface->IsScreen = true; Surface->CurrentWidth = g_Width; Surface->CurrentHeight = g_Height; Surface->ColorInput = DXUTGetD3D11RenderTargetView(); Surface->ColorBuffer = NULL; Surface->ColorOutput = NULL; Surface->DepthBuffer = NULL; Surface->DepthInputAndOutput = DXUTGetD3D11DepthStencilView();}void ReleaseDrawSurface(DrawSurfaceItem* Surface) { SAFE_RELEASE( Surface->ColorInput ); SAFE_RELEASE( Surface->ColorBuffer ); SAFE_RELEASE( Surface->ColorOutput ); SAFE_RELEASE( Surface->DepthBuffer ); SAFE_RELEASE( Surface->DepthInputAndOutput );}
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement