Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Clark Lin
PracticeDx
Commits
d86a04d1
Commit
d86a04d1
authored
Dec 26, 2022
by
Administrator
Browse files
Re-structure code
parent
732beb28
Changes
1
Show whitespace changes
Inline
Side-by-side
PracticeDx/WinMain.cpp
View file @
d86a04d1
...
@@ -4,12 +4,10 @@
...
@@ -4,12 +4,10 @@
#include <d3d11.h>
#include <d3d11.h>
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3d11.lib")
#include <d3dcompiler.h>
#include <d3dcompiler.h>
#pragma comment (lib, "d3dcompiler.lib")
#pragma comment (lib, "d3dcompiler.lib")
#include <wrl.h>
#include <wrl.h>
#include <DirectXMath.h>
#include <DirectXMath.h>
namespace
dx
=
DirectX
;
namespace
dx
=
DirectX
;
...
@@ -19,20 +17,36 @@ namespace dx = DirectX;
...
@@ -19,20 +17,36 @@ namespace dx = DirectX;
#include "Timer.h" // to use timer
#include "Timer.h" // to use timer
Timer
timer
;
Timer
timer
;
/************************************
* 1.1 CreateDeviceAndSwapChain
************************************/
// global declarations
// global declarations
Microsoft
::
WRL
::
ComPtr
<
IDXGISwapChain
>
swapchain
;
// the pointer to the swap chain interface
Microsoft
::
WRL
::
ComPtr
<
IDXGISwapChain
>
swapchain
;
// the pointer to the swap chain interface
Microsoft
::
WRL
::
ComPtr
<
ID3D11Device
>
dev
;
// the pointer to our Direct3D device interface
Microsoft
::
WRL
::
ComPtr
<
ID3D11Device
>
dev
;
// the pointer to our Direct3D device interface
Microsoft
::
WRL
::
ComPtr
<
ID3D11DeviceContext
>
devcon
;
// the pointer to our Direct3D device context
Microsoft
::
WRL
::
ComPtr
<
ID3D11DeviceContext
>
devcon
;
// the pointer to our Direct3D device context
/************************************
* 1.2 DefineRenderTargetView
************************************/
Microsoft
::
WRL
::
ComPtr
<
ID3D11Texture2D
>
pBackBuffer
;
// 定义Targe View
// 定义Targe View
Microsoft
::
WRL
::
ComPtr
<
ID3D11RenderTargetView
>
targetView
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11RenderTargetView
>
targetView
;
// Define Shader
/************************************
Microsoft
::
WRL
::
ComPtr
<
ID3D11PixelShader
>
pPixelShader
;
* 1.3 DefineDepthStencilView
Microsoft
::
WRL
::
ComPtr
<
ID3DBlob
>
pCompiledPixelBlob
;
************************************/
Microsoft
::
WRL
::
ComPtr
<
ID3D11VertexShader
>
pVertexShader
;
// Define depth stencil buffer
Microsoft
::
WRL
::
ComPtr
<
ID3DBlob
>
pCompiledVertexBlob
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11DepthStencilState
>
pDepthStencilState
;
// Define depth stencil texture
Microsoft
::
WRL
::
ComPtr
<
ID3D11Texture2D
>
depthStencilTexture
;
// Define depth stencil view
Microsoft
::
WRL
::
ComPtr
<
ID3D11DepthStencilView
>
pDSView
;
/************************************
* 2.3 DefineVertexBuffer
************************************/
// Define vertex buffer
// Define vertex buffer
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pVertexBuffer
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pVertexBuffer
;
// Create buffer description
// Create buffer description
...
@@ -68,6 +82,9 @@ const Vertex vertices[] =
...
@@ -68,6 +82,9 @@ const Vertex vertices[] =
{
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
},
{
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
},
};
};
/************************************
* 2.4 DefineIndexBuffer
************************************/
// Define index buffer
// Define index buffer
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pIndexBuffer
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pIndexBuffer
;
// Create index buffer
// Create index buffer
...
@@ -87,17 +104,20 @@ const unsigned short indices[] =
...
@@ -87,17 +104,20 @@ const unsigned short indices[] =
0
,
1
,
4
,
1
,
5
,
4
,
0
,
1
,
4
,
1
,
5
,
4
,
};
};
// Define constant buffer
/************************************
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pConstantBuffer
;
* 2.5 DefineTransConstBuffer
// Create constant buffer struct
************************************/
struct
ConstantBuffer
// Define transformation constant buffer
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pTransConstBuffer
;
// Create transformation constant buffer struct
struct
TransConstBuffer
{
{
dx
::
XMMATRIX
transform
;
dx
::
XMMATRIX
transform
;
};
};
// create constant buffer
// create constant buffer
const
float
heightWidthRatio
=
0.3
f
/
0.4
f
;
const
float
heightWidthRatio
=
0.3
f
/
0.4
f
;
float
angle
=
0.0
f
;
float
angle
=
0.0
f
;
Const
ant
Buffer
cb
=
Trans
ConstBuffer
t
cb
=
{
{
// transpose the matrix to change from row_major to column_major
// transpose the matrix to change from row_major to column_major
dx
::
XMMatrixTranspose
(
dx
::
XMMatrixTranspose
(
...
@@ -110,12 +130,15 @@ ConstantBuffer cb =
...
@@ -110,12 +130,15 @@ ConstantBuffer cb =
// translation
// translation
*
dx
::
XMMatrixTranslation
(
0.0
f
,
0.0
f
,
4.0
f
)
*
dx
::
XMMatrixTranslation
(
0.0
f
,
0.0
f
,
4.0
f
)
// projection
// projection
*
dx
::
XMMatrixPerspectiveLH
(
1.0
f
,
heightWidthRatio
,
0.1
f
,
10.0
f
)
*
dx
::
XMMatrixPerspectiveLH
(
1.0
f
,
heightWidthRatio
,
0.1
f
,
10.0
f
)
)
)
};
};
/************************************
* 2.6 DefineColorConstBuffer
************************************/
// Define color constant buffer
// Define color constant buffer
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pColorConst
ant
Buffer
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11Buffer
>
pColorConstBuffer
;
// Create constant buffer for color
// Create constant buffer for color
struct
ColorConstantBuffer
struct
ColorConstantBuffer
{
{
...
@@ -140,35 +163,30 @@ const ColorConstantBuffer ccb =
...
@@ -140,35 +163,30 @@ const ColorConstantBuffer ccb =
}
}
};
};
// Define depth stencil buffer
/************************************
Microsoft
::
WRL
::
ComPtr
<
ID3D11DepthStencilState
>
pDepthStencilState
;
* 2.7 DefineVertexShader
************************************/
// Define depth stencil texture
// Define Vertex Shader
Microsoft
::
WRL
::
ComPtr
<
ID3D11Texture2D
>
depthStencilTexture
;
Microsoft
::
WRL
::
ComPtr
<
ID3DBlob
>
pCompiledVertexBlob
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11VertexShader
>
pVertexShader
;
// Define depth stencil view
Microsoft
::
WRL
::
ComPtr
<
ID3D11DepthStencilView
>
pDSView
;
/************************************
* 2.8 DefinePixelShader
************************************/
// Define Pixel Shader
Microsoft
::
WRL
::
ComPtr
<
ID3DBlob
>
pCompiledPixelBlob
;
Microsoft
::
WRL
::
ComPtr
<
ID3D11PixelShader
>
pPixelShader
;
/************************************
* 2.9 DefineInputLayout
************************************/
// Define input layout
// Define input layout
ID3D11InputLayout
*
pInputLayout
;
ID3D11InputLayout
*
pInputLayout
;
void
DefineShader
()
{
// Load vertex shader file into BLOB, and create COM object of pixel shader
D3DReadFileToBlob
(
L"PixelShader.cso"
,
&
pCompiledPixelBlob
);
dev
->
CreatePixelShader
(
pCompiledPixelBlob
->
GetBufferPointer
(),
pCompiledPixelBlob
->
GetBufferSize
(),
nullptr
,
&
pPixelShader
);
// Load pixel shader file into BLOB, and create COM object of vertex shader
D3DReadFileToBlob
(
L"VertexShader.cso"
,
&
pCompiledVertexBlob
);
dev
->
CreateVertexShader
(
pCompiledVertexBlob
->
GetBufferPointer
(),
pCompiledVertexBlob
->
GetBufferSize
(),
nullptr
,
&
pVertexShader
);
// bind pixel shader
devcon
->
PSSetShader
(
pPixelShader
.
Get
(),
nullptr
,
0u
);
// bind vertex shader
devcon
->
VSSetShader
(
pVertexShader
.
Get
(),
nullptr
,
0u
);
}
/************************************
* 2.3 DefineVertexBuffer
************************************/
void
DefineVertexBuffer
()
void
DefineVertexBuffer
()
{
{
D3D11_BUFFER_DESC
bd
=
{};
D3D11_BUFFER_DESC
bd
=
{};
...
@@ -184,8 +202,16 @@ void DefineVertexBuffer()
...
@@ -184,8 +202,16 @@ void DefineVertexBuffer()
// Create vertex buffer
// Create vertex buffer
dev
->
CreateBuffer
(
&
bd
,
&
sd
,
&
pVertexBuffer
);
dev
->
CreateBuffer
(
&
bd
,
&
sd
,
&
pVertexBuffer
);
// Bind vertex buffer to pipeline
const
UINT
stride
=
sizeof
(
Vertex
);
const
UINT
offset
=
0u
;
devcon
->
IASetVertexBuffers
(
0u
,
1u
,
pVertexBuffer
.
GetAddressOf
(),
&
stride
,
&
offset
);
}
}
/************************************
* 2.4 DefineIndexBuffer
************************************/
void
DefineIndexBuffer
()
void
DefineIndexBuffer
()
{
{
D3D11_BUFFER_DESC
ibd
=
{};
D3D11_BUFFER_DESC
ibd
=
{};
...
@@ -206,9 +232,12 @@ void DefineIndexBuffer()
...
@@ -206,9 +232,12 @@ void DefineIndexBuffer()
devcon
->
IASetIndexBuffer
(
pIndexBuffer
.
Get
(),
DXGI_FORMAT_R16_UINT
,
0u
);
devcon
->
IASetIndexBuffer
(
pIndexBuffer
.
Get
(),
DXGI_FORMAT_R16_UINT
,
0u
);
}
}
void
DefineConstantBuffer
(
float
angle
,
float
z
)
/************************************
* 2.5 DefineTransConstBuffer
************************************/
void
DefineTransConstBuffer
(
float
angle
,
float
z
)
{
{
cb
=
t
cb
=
{
{
// transpose the matrix to change from row_major to column_major
// transpose the matrix to change from row_major to column_major
dx
::
XMMatrixTranspose
(
dx
::
XMMatrixTranspose
(
...
@@ -230,19 +259,22 @@ void DefineConstantBuffer(float angle, float z)
...
@@ -230,19 +259,22 @@ void DefineConstantBuffer(float angle, float z)
cbd
.
Usage
=
D3D11_USAGE_DYNAMIC
;
cbd
.
Usage
=
D3D11_USAGE_DYNAMIC
;
cbd
.
CPUAccessFlags
=
D3D11_CPU_ACCESS_WRITE
;
cbd
.
CPUAccessFlags
=
D3D11_CPU_ACCESS_WRITE
;
cbd
.
MiscFlags
=
0u
;
cbd
.
MiscFlags
=
0u
;
cbd
.
ByteWidth
=
sizeof
(
cb
);
cbd
.
ByteWidth
=
sizeof
(
t
cb
);
cbd
.
StructureByteStride
=
0u
;
cbd
.
StructureByteStride
=
0u
;
D3D11_SUBRESOURCE_DATA
csd
=
{};
D3D11_SUBRESOURCE_DATA
csd
=
{};
csd
.
pSysMem
=
&
cb
;
csd
.
pSysMem
=
&
t
cb
;
// Create constant buffer
// Create constant buffer
dev
->
CreateBuffer
(
&
cbd
,
&
csd
,
&
pConst
ant
Buffer
);
dev
->
CreateBuffer
(
&
cbd
,
&
csd
,
&
p
Trans
ConstBuffer
);
// Bind constant buffer to vertex buffer
// Bind constant buffer to vertex buffer
devcon
->
VSSetConstantBuffers
(
0u
,
1u
,
pConst
ant
Buffer
.
GetAddressOf
());
devcon
->
VSSetConstantBuffers
(
0u
,
1u
,
p
Trans
ConstBuffer
.
GetAddressOf
());
}
}
void
DefineColorConstantBuffer
()
/************************************
* 2.6 DefineColorConstBuffer
************************************/
void
DefineColorConstBuffer
()
{
{
D3D11_BUFFER_DESC
ccbd
=
{};
D3D11_BUFFER_DESC
ccbd
=
{};
ccbd
.
BindFlags
=
D3D11_BIND_CONSTANT_BUFFER
;
ccbd
.
BindFlags
=
D3D11_BIND_CONSTANT_BUFFER
;
...
@@ -254,53 +286,41 @@ void DefineColorConstantBuffer()
...
@@ -254,53 +286,41 @@ void DefineColorConstantBuffer()
D3D11_SUBRESOURCE_DATA
ccsd
=
{};
D3D11_SUBRESOURCE_DATA
ccsd
=
{};
ccsd
.
pSysMem
=
&
ccb
;
ccsd
.
pSysMem
=
&
ccb
;
dev
->
CreateBuffer
(
&
ccbd
,
&
ccsd
,
&
pColorConst
ant
Buffer
);
dev
->
CreateBuffer
(
&
ccbd
,
&
ccsd
,
&
pColorConstBuffer
);
// Bind constant buffer to vertex
// Bind constant buffer to vertex
devcon
->
PSSetConstantBuffers
(
0u
,
1u
,
pColorConst
ant
Buffer
.
GetAddressOf
());
devcon
->
PSSetConstantBuffers
(
0u
,
1u
,
pColorConstBuffer
.
GetAddressOf
());
}
}
void
DefineDepthStencilBuffer
()
/************************************
* 2.7 DefineVertexShader
************************************/
void
DefineVertexShader
()
{
{
// Create depth stencil state
// Load pixel shader file into BLOB, and create COM object of vertex shader
D3D11_DEPTH_STENCIL_DESC
depthStencilDesc
=
{};
D3DReadFileToBlob
(
L"VertexShader.cso"
,
&
pCompiledVertexBlob
);
depthStencilDesc
.
DepthEnable
=
TRUE
;
dev
->
CreateVertexShader
(
pCompiledVertexBlob
->
GetBufferPointer
(),
pCompiledVertexBlob
->
GetBufferSize
(),
nullptr
,
&
pVertexShader
);
depthStencilDesc
.
DepthWriteMask
=
D3D11_DEPTH_WRITE_MASK_ALL
;
depthStencilDesc
.
DepthFunc
=
D3D11_COMPARISON_LESS
;
// Create depth stencil state
dev
->
CreateDepthStencilState
(
&
depthStencilDesc
,
&
pDepthStencilState
);
// bind depth state
devcon
->
OMSetDepthStencilState
(
pDepthStencilState
.
Get
(),
1u
);
// Create the depth stencil texture
D3D11_TEXTURE2D_DESC
depthStencilTextureDesc
=
{};
depthStencilTextureDesc
.
Width
=
800
;
depthStencilTextureDesc
.
Height
=
600
;
depthStencilTextureDesc
.
MipLevels
=
1u
;
depthStencilTextureDesc
.
ArraySize
=
1u
;
depthStencilTextureDesc
.
Format
=
DXGI_FORMAT_D32_FLOAT
;
depthStencilTextureDesc
.
SampleDesc
.
Count
=
1u
;
depthStencilTextureDesc
.
SampleDesc
.
Quality
=
0u
;
depthStencilTextureDesc
.
Usage
=
D3D11_USAGE_DEFAULT
;
depthStencilTextureDesc
.
BindFlags
=
D3D11_BIND_DEPTH_STENCIL
;
// Create texture
dev
->
CreateTexture2D
(
&
depthStencilTextureDesc
,
nullptr
,
&
depthStencilTexture
);
// Create the depth stencil view
// bind vertex shader
D3D11_DEPTH_STENCIL_VIEW_DESC
depthStencilViewDesc
=
{};
devcon
->
VSSetShader
(
pVertexShader
.
Get
(),
nullptr
,
0u
);
depthStencilViewDesc
.
Format
=
DXGI_FORMAT_D32_FLOAT
;
}
depthStencilViewDesc
.
ViewDimension
=
D3D11_DSV_DIMENSION_TEXTURE2D
;
depthStencilViewDesc
.
Texture2D
.
MipSlice
=
0u
;
dev
->
CreateDepthStencilView
(
depthStencilTexture
.
Get
(),
&
depthStencilViewDesc
,
&
pDSView
);
// Bind depth stencil view to out put merger
/************************************
//devcon->OMSetRenderTargets(1u, targetView.GetAddressOf(), pDSView.Get());
* 2.8 DefinePixelShader
************************************/
void
DefinePixelShader
()
{
// Load vertex shader file into BLOB, and create COM object of pixel shader
D3DReadFileToBlob
(
L"PixelShader.cso"
,
&
pCompiledPixelBlob
);
dev
->
CreatePixelShader
(
pCompiledPixelBlob
->
GetBufferPointer
(),
pCompiledPixelBlob
->
GetBufferSize
(),
nullptr
,
&
pPixelShader
);
// bind pixel shader
devcon
->
PSSetShader
(
pPixelShader
.
Get
(),
nullptr
,
0u
);
}
}
/************************************
* 2.9 DefineInputLayout
************************************/
void
DefineInputLayout
()
void
DefineInputLayout
()
{
{
// Create input elements description, choosing whatever need to send to GPU
// Create input elements description, choosing whatever need to send to GPU
...
@@ -324,23 +344,42 @@ void DefineInputLayout()
...
@@ -324,23 +344,42 @@ void DefineInputLayout()
// Bind layout to pipeline
// Bind layout to pipeline
// bind vertex layout
// bind vertex layout
devcon
->
IASetInputLayout
(
pInputLayout
);
devcon
->
IASetInputLayout
(
pInputLayout
);
// bind render target
//devcon->OMSetRenderTargets(1u, targetView.GetAddressOf(), nullptr);
}
}
void
DrawPrimitive
()
/************************************
* 2.10 DefinePrimitiveTopology
************************************/
void
DefinePrimitiveTopology
()
{
{
// Set the vertex buffer to use. Pick up the vertex buffer created in previous step.
// Bind vertex buffer to pipeline
const
UINT
stride
=
sizeof
(
Vertex
);
const
UINT
offset
=
0u
;
devcon
->
IASetVertexBuffers
(
0u
,
1u
,
pVertexBuffer
.
GetAddressOf
(),
&
stride
,
&
offset
);
// Set the primitive type to use
// Set the primitive type to use
// Set primitive topology to triangle list (groups of 3 vertices)
// Set primitive topology to triangle list (groups of 3 vertices)
devcon
->
IASetPrimitiveTopology
(
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST
);
devcon
->
IASetPrimitiveTopology
(
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST
);
}
/************************************
* 2.11 DefineViewPorts
************************************/
void
DefineViewPorts
()
{
// 指定View Port
D3D11_VIEWPORT
viewport
;
ZeroMemory
(
&
viewport
,
sizeof
(
D3D11_VIEWPORT
));
// 控制View port的位置
viewport
.
TopLeftX
=
0
;
viewport
.
TopLeftY
=
0
;
viewport
.
Width
=
800
;
viewport
.
Height
=
600
;
viewport
.
MinDepth
=
0
;
viewport
.
MaxDepth
=
1
;
devcon
->
RSSetViewports
(
1
,
&
viewport
);
}
/************************************
* 2.11 DrawPrimitive
************************************/
void
DrawPrimitive
()
{
// Draw the triangle.
// Draw the triangle.
// devcon->Draw((UINT)sizeof(vertices), 0u);
// devcon->Draw((UINT)sizeof(vertices), 0u);
devcon
->
DrawIndexed
((
UINT
)
std
::
size
(
indices
),
0u
,
0u
);
devcon
->
DrawIndexed
((
UINT
)
std
::
size
(
indices
),
0u
,
0u
);
...
@@ -348,12 +387,54 @@ void DrawPrimitive()
...
@@ -348,12 +387,54 @@ void DrawPrimitive()
void
drawSingleTriangle
(
float
angle
,
float
z
)
void
drawSingleTriangle
(
float
angle
,
float
z
)
{
{
DefineShader
();
/************************************
* 2.3 DefineVertexBuffer
************************************/
DefineVertexBuffer
();
DefineVertexBuffer
();
/************************************
* 2.4 DefineIndexBuffer
************************************/
DefineIndexBuffer
();
DefineIndexBuffer
();
DefineConstantBuffer
(
angle
,
z
);
DefineColorConstantBuffer
();
/************************************
* 2.5 DefineTransConstBuffer
************************************/
DefineTransConstBuffer
(
angle
,
z
);
/************************************
* 2.6 DefineColorConstBuffer
************************************/
DefineColorConstBuffer
();
/************************************
* 2.7 DefineVertexShader
************************************/
DefineVertexShader
();
/************************************
* 2.8 DefinePixelShader
************************************/
DefinePixelShader
();
/************************************
* 2.9 DefineInputLayout
************************************/
DefineInputLayout
();
DefineInputLayout
();
/************************************
* 2.10 DefinePrimitiveTopology
************************************/
DefinePrimitiveTopology
();
/************************************
* 2.11 DefineViewPorts
************************************/
DefineViewPorts
();
/************************************
* 2.12 DrawPrimitive
************************************/
DrawPrimitive
();
DrawPrimitive
();
}
}
...
@@ -363,8 +444,10 @@ void drawTriangle()
...
@@ -363,8 +444,10 @@ void drawTriangle()
drawSingleTriangle
(
-
timer
.
Peek
(),
4.5
f
);
drawSingleTriangle
(
-
timer
.
Peek
(),
4.5
f
);
}
}
// this function initializes and prepares Direct3D for use
/************************************
void
InitD3D
(
HWND
hWnd
)
* 1.1 CreateDeviceAndSwapChain
************************************/
void
CreateDeviceAndSwapChain
(
HWND
hWnd
)
{
{
// create a struct to hold information about the swap chain
// create a struct to hold information about the swap chain
DXGI_SWAP_CHAIN_DESC
scd
;
DXGI_SWAP_CHAIN_DESC
scd
;
...
@@ -393,47 +476,119 @@ void InitD3D(HWND hWnd)
...
@@ -393,47 +476,119 @@ void InitD3D(HWND hWnd)
&
dev
,
// ID3D11Device **ppDevice
&
dev
,
// ID3D11Device **ppDevice
NULL
,
// D3D_FEATURE_LEVEL *FeatureLevel
NULL
,
// D3D_FEATURE_LEVEL *FeatureLevel
&
devcon
);
// ID3D11DeviceContext **ppImmediateContext
&
devcon
);
// ID3D11DeviceContext **ppImmediateContext
}
/************************************
* 1.2 DefineRenderTargetView
************************************/
void
DefineRenderTargetView
()
{
// 从SwapChain中取得back buffer
// 从SwapChain中取得back buffer
Microsoft
::
WRL
::
ComPtr
<
ID3D11Texture2D
>
pBackBuffer
;
swapchain
->
GetBuffer
(
0
,
__uuidof
(
ID3D11Texture2D
),
(
LPVOID
*
)
&
pBackBuffer
);
swapchain
->
GetBuffer
(
0
,
__uuidof
(
ID3D11Texture2D
),
(
LPVOID
*
)
&
pBackBuffer
);
// 根据back buffer,创建新的View Target
// 根据back buffer,创建新的View Target
dev
->
CreateRenderTargetView
(
pBackBuffer
.
Get
(),
NULL
,
&
targetView
);
dev
->
CreateRenderTargetView
(
pBackBuffer
.
Get
(),
NULL
,
&
targetView
);
}
/************************************
* 1.3 DefineDepthStencilView
************************************/
void
DefineDepthStencilView
()
{
// Create depth stencil state
D3D11_DEPTH_STENCIL_DESC
depthStencilDesc
=
{};
depthStencilDesc
.
DepthEnable
=
TRUE
;
depthStencilDesc
.
DepthWriteMask
=
D3D11_DEPTH_WRITE_MASK_ALL
;
depthStencilDesc
.
DepthFunc
=
D3D11_COMPARISON_LESS
;
// Create depth stencil state
dev
->
CreateDepthStencilState
(
&
depthStencilDesc
,
&
pDepthStencilState
);
// bind depth state
devcon
->
OMSetDepthStencilState
(
pDepthStencilState
.
Get
(),
1u
);
// Create the depth stencil texture
D3D11_TEXTURE2D_DESC
depthStencilTextureDesc
=
{};
depthStencilTextureDesc
.
Width
=
800
;
depthStencilTextureDesc
.
Height
=
600
;
depthStencilTextureDesc
.
MipLevels
=
1u
;
depthStencilTextureDesc
.
ArraySize
=
1u
;
depthStencilTextureDesc
.
Format
=
DXGI_FORMAT_D32_FLOAT
;
depthStencilTextureDesc
.
SampleDesc
.
Count
=
1u
;
depthStencilTextureDesc
.
SampleDesc
.
Quality
=
0u
;
depthStencilTextureDesc
.
Usage
=
D3D11_USAGE_DEFAULT
;
depthStencilTextureDesc
.
BindFlags
=
D3D11_BIND_DEPTH_STENCIL
;
DefineDepthStencilBuffer
();
// Create texture
dev
->
CreateTexture2D
(
&
depthStencilTextureDesc
,
nullptr
,
&
depthStencilTexture
);
// Create the depth stencil view
D3D11_DEPTH_STENCIL_VIEW_DESC
depthStencilViewDesc
=
{};
depthStencilViewDesc
.
Format
=
DXGI_FORMAT_D32_FLOAT
;
depthStencilViewDesc
.
ViewDimension
=
D3D11_DSV_DIMENSION_TEXTURE2D
;
depthStencilViewDesc
.
Texture2D
.
MipSlice
=
0u
;
dev
->
CreateDepthStencilView
(
depthStencilTexture
.
Get
(),
&
depthStencilViewDesc
,
&
pDSView
);
}
/************************************
* 1.4 DefineRenderTarget
************************************/
void
DefineRenderTarget
()
{
// 将渲染目标设置成我们新创建的View Target
// 将渲染目标设置成我们新创建的View Target
//devcon->OMSetRenderTargets(1u, targetView.GetAddressOf(), NULL);
//devcon->OMSetRenderTargets(1u, targetView.GetAddressOf(), NULL);
devcon
->
OMSetRenderTargets
(
1u
,
targetView
.
GetAddressOf
(),
pDSView
.
Get
());
devcon
->
OMSetRenderTargets
(
1u
,
targetView
.
GetAddressOf
(),
pDSView
.
Get
());
}
// 指定View Port
// this function initializes and prepares Direct3D for use
D3D11_VIEWPORT
viewport
;
void
InitD3D
(
HWND
hWnd
)
ZeroMemory
(
&
viewport
,
sizeof
(
D3D11_VIEWPORT
));
{
// 控制View port的位置
/************************************
viewport
.
TopLeftX
=
0
;
* 1.1 CreateDeviceAndSwapChain
viewport
.
TopLeftY
=
0
;
************************************/
viewport
.
Width
=
800
;
CreateDeviceAndSwapChain
(
hWnd
);
viewport
.
Height
=
600
;
viewport
.
MinDepth
=
0
;
/************************************
viewport
.
MaxDepth
=
1
;
* 1.2 DefineRenderTargetView
************************************/
devcon
->
RSSetViewports
(
1
,
&
viewport
);
DefineRenderTargetView
();
/************************************
* 1.3 DefineDepthStencilView
************************************/
DefineDepthStencilView
();
/************************************
* 1.4 DefineRenderTarget
************************************/
DefineRenderTarget
();
}
}
// this is the function used to render a single frame
// this is the function used to render a single frame
void
RenderFrame
(
void
)
void
RenderFrame
(
void
)
{
{
/************************************
* 2.1 ClearRenderTargetView
************************************/
// clear the back buffer to a deep blue
// clear the back buffer to a deep blue
const
float
color
[]
=
{
0.0
f
,
0.2
f
,
0.4
f
,
1.0
f
};
const
float
color
[]
=
{
0.0
f
,
0.2
f
,
0.4
f
,
1.0
f
};
devcon
->
ClearRenderTargetView
(
targetView
.
Get
(),
color
);
devcon
->
ClearRenderTargetView
(
targetView
.
Get
(),
color
);
/************************************
* 2.2 ClearDepthStencilView
************************************/
// clear the depth stencil view
// clear the depth stencil view
devcon
->
ClearDepthStencilView
(
pDSView
.
Get
(),
D3D11_CLEAR_DEPTH
,
1.0
f
,
0u
);
devcon
->
ClearDepthStencilView
(
pDSView
.
Get
(),
D3D11_CLEAR_DEPTH
,
1.0
f
,
0u
);
/************************************
* 2.3 - 2.12 Repeat graphic objects
************************************/
// do 3D rendering on the back buffer here
// do 3D rendering on the back buffer here
drawTriangle
();
drawTriangle
();
/************************************
* 3 DrawPrimitive
************************************/
// switch the back buffer and the front buffer
// switch the back buffer and the front buffer
// 切换显示,将back buffer的内容交换到front buffer
// 切换显示,将back buffer的内容交换到front buffer
swapchain
->
Present
(
0
,
0
);
swapchain
->
Present
(
0
,
0
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment