Commit d86a04d1 authored by Administrator's avatar Administrator
Browse files

Re-structure code

parent 732beb28
...@@ -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.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f },
}; };
/************************************
* 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.3f / 0.4f; const float heightWidthRatio = 0.3f / 0.4f;
float angle = 0.0f; float angle = 0.0f;
ConstantBuffer cb = TransConstBuffer tcb =
{ {
// 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.0f, 0.0f, 4.0f) * dx::XMMatrixTranslation(0.0f, 0.0f, 4.0f)
// projection // projection
* dx::XMMatrixPerspectiveLH( 1.0f, heightWidthRatio, 0.1f, 10.0f) * dx::XMMatrixPerspectiveLH(1.0f, heightWidthRatio, 0.1f, 10.0f)
) )
}; };
/************************************
* 2.6 DefineColorConstBuffer
************************************/
// Define color constant buffer // Define color constant buffer
Microsoft::WRL::ComPtr<ID3D11Buffer> pColorConstantBuffer; 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 = tcb =
{ {
// 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(tcb);
cbd.StructureByteStride = 0u; cbd.StructureByteStride = 0u;
D3D11_SUBRESOURCE_DATA csd = {}; D3D11_SUBRESOURCE_DATA csd = {};
csd.pSysMem = &cb; csd.pSysMem = &tcb;
// Create constant buffer // Create constant buffer
dev->CreateBuffer(&cbd, &csd, &pConstantBuffer); dev->CreateBuffer(&cbd, &csd, &pTransConstBuffer);
// Bind constant buffer to vertex buffer // Bind constant buffer to vertex buffer
devcon->VSSetConstantBuffers(0u, 1u, pConstantBuffer.GetAddressOf()); devcon->VSSetConstantBuffers(0u, 1u, pTransConstBuffer.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, &pColorConstantBuffer); dev->CreateBuffer(&ccbd, &ccsd, &pColorConstBuffer);
// Bind constant buffer to vertex // Bind constant buffer to vertex
devcon->PSSetConstantBuffers(0u, 1u, pColorConstantBuffer.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.5f); drawSingleTriangle(-timer.Peek(), 4.5f);
} }
// 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.0f, 0.2f, 0.4f, 1.0f }; const float color[] = { 0.0f, 0.2f, 0.4f, 1.0f };
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.0f, 0u); devcon->ClearDepthStencilView(pDSView.Get(), D3D11_CLEAR_DEPTH, 1.0f, 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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment