What is a view?

Started by
0 comments, last by Dawoodoz 13 years, 6 months ago
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?

Advertisement
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:
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