Direct3D 11 API 改编自Intro_to_Direct3D10
来源:互联网 发布:淘宝太坑了女主角视频 编辑:程序博客网 时间:2024/05/19 05:41
函数名前缀反映出处于管道的哪个阶段。
IA = Input Assembler
VS = Vertex Shader
GS = Geometry Shader
SO = Stream Out
RS = Rasterizer Stage
PS = Pixel Shader
OM = OutputMerger
Direct3D9 VS Direct3D11
IDirect3DDevice9 ID3D11DeviceIDirect3D9IDXGIFactory, IDXGIAdapter, IDXGIDeviceIDirect3DDevice9::PresentIDXGISwapChain::PresentIDirect3DDevice9::TestCooperativeLevelIDXGISwapChain::Present with PRESENT_TEST
IDXGIAdapter 描述显卡,显存,列举IDXGIOutput 等。
IDXGIOutput 描述显示器
IDXGISwapChain::SetFullScreenState转换全屏或窗口模式::ResizeTarget改变全屏或窗口的视频模式::ResizeBuffers调整后备缓存的大小
IDirect3DIndexBuffer9,
IDirect3DVertexBuffer9ID3D11Textrue3D
大部分资源为ID3DBuffers,由ID3D11Device::CreateBuffer()创建。
纹理资源为ID3D11Texture(1-3)D,由ID3D11Device::CreateTexture(1-3)D创建。
IDirect3DVertexShader9ID3D11VertexShaderIDirect3DPixelShader9 ID3D11PixelShader,
ID3D11GeometryShaderIDirect3DVertexDeclaration9ID3D11InputLayout
ID3D11GeometryShaderIDirect3DVertexDeclaration9ID3D11InputLayout
着色器由ID3D11Device::CreateVertexShader()或者::CreateGeometry()Shader或者::CreatePixelShader()创建
输入层由ID3D11Device::CreateInputLayout()创建。
从资源数据类型中分离出来ID3D11ShaderResourceView (纹理和原始缓存视图绑定到VS,GS或者PS)允许相同数据重新解释成多重类型ID3D11RenderTargetView 或者ID3D11DepthStencilView(绑定到OM阶段)
视图由CreateRenderTargetView()或者CreateShaderResourceView()或者CreateDepthStencilView()创建。
着色器资源绑定到管道着色阶段由ID3D11DeviceContext::(V,G,P)SSetShaderResources()设置。
常量缓存通过绑定到着色阶段由ID3D11DeviceContext::(V,G,P)SSetConstantBuffers()设置。
IDirect3DDevice9::SetRenderStateID3D11BlendState,
ID3D11DepthStencilState,
ID3D11RasterizerStateIDirect3DDevice9::SetTextureStageStateID3D11SamplerState
ID3D11DepthStencilState,
ID3D11RasterizerStateIDirect3DDevice9::SetTextureStageStateID3D11SamplerState
状态对象由ID3D11Device::CreateBlednState(),::CreateDepthStecilState(),::CreateRasterizerState()::CreateSamplerState()创建。一旦创建就不能改变。
Blend和DepthStencil状态绑定到OM阶段由ID3D11DeviceContext::OMSetBlendState(),::OMSetDepthStencilState()设置。光栅器状态绑定到RS阶段由ID3D11DeviceContext::RSSetState()设置。
采样阶段绑定到各个管道着色阶段由ID3D11DeviceContext::(V,G,P)SSetSamplers()设置。IDirect3DDevice9
::DrawPrimitive,
::DrawIndexedPrimitiveID3D11DeviceContext
::Draw(),
::DrawAuto(),
::DrawIndexed(),
::DrawIndexedInstanced(),
::DrawInstanced(),
::IASetPrimitiveTopology()
::DrawPrimitive,
::DrawIndexedPrimitiveID3D11DeviceContext
::Draw(),
::DrawAuto(),
::DrawIndexed(),
::DrawIndexedInstanced(),
::DrawInstanced(),
::IASetPrimitiveTopology()
创建参考设备
1.初始化交换链
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory( &sd, sizeof( sd ) );
sd.BufferCount = 1;
sd.BufferDesc.Width = 640;
sd.BufferDesc.Height = 480;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = g_hWnd;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
2.申明D3D11特征层。
D3D_FEATURE_LEVEL FeatureLevels = D3D_FEATURE_LEVEL_11_0;
3.创建设备
HRESULT hr = S_OK;
hr = D3D11CreateDeviceAndSwapChain(NULL,
D3D_DRIVER_TYPE_REFERENCE, NULL, 0, &feature_levels, 1,
D3D11_SDK_VERSION, &sd, &swap_chain_, &d3d_device_,
&feature_level, &immediate_context_);
return hr;
绑定渲染目标
HRESULT hr = S_OK;ID3D11Resource* back_buffer;
if (FAILED(swap_chain_->GetBuffer(0, __uuidof(ID3D11Resource), (LPVOID*)&back_buffer)))
hr = S_FALSE;
hr = d3d_device_->CreateRenderTargetView(back_buffer, NULL, &render_target_view_);
back_buffer->Release();
immediate_context_->OMSetRenderTargets(1, &render_target_view_, NULL);
return hr;
其中ID3D11RenderTargetView* render_target_view_;设置为全局或类变量。
初始化视口
D3D11_VIEWPORT vp;
vp.Width = (FLOAT)640;
vp.Height = (FLOAT)480;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
immediate_context_->RSSetViewports(1, &vp);
vp.Width = (FLOAT)640;
vp.Height = (FLOAT)480;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
immediate_context_->RSSetViewports(1, &vp);
渲染
float clear_color[4] = {0.0f, 0.125f, 0.3f, 1.0f};
immediate_context_->ClearRenderTargetView(render_target_view_, clear_color);
swap_chain_->Present(0,0);
swap_chain_->Present(0,0);
- Direct3D 11 API 改编自Intro_to_Direct3D10
- Direct3D 11 API 改编自Intro_to_Direct3D10
- Accurately Profiling Direct3D API Calls (Direct3D 9)
- Direct3D 11
- 拓扑(Topology)----改编自百度百科
- Unity3D 灰度shader(改编自NGUI)
- Accurately profiling direct3d api calls
- Accurately Profiling Direct3D API Calls (Direct3D 9) 翻译笔记
- Direct3D 9,Direct3D 10,Direct3D 11渲染流水线
- Direct3D 11 教程1:Direct3D 11基础
- Direct3D 10 & Direct3D 11 Pipeline Stages
- 关于怎么学习API (OpenGL/Direct3D等)
- Accurately Profiling Direct3D API Calls 笔记
- 精确测量Direct3D API调用(一)
- 精确测量Direct3D API调用(二)
- C语言:马踏棋盘,改编自《数据结构与算法》.
- Android开发:Parallax效果的ScrollerView,改编自ParallaxListView
- 程序参数解析函数使用getopt_long()函数,改编自webbench
- JQuery源码
- TCP状态图
- 惊爆眼球!视频解读游戏中DX9与DX11画质差别
- hr数据库
- i++与++i经典分析
- Direct3D 11 API 改编自Intro_to_Direct3D10
- Node(2) First Code
- Direc3D设备对象
- Direct3D 11设备介绍
- DX11多线程学习与思考
- "http://android.git.kernel.org/repo 打不开"问题解决
- HR代码
- 微博 0auth2.0 验证
- 2012 -7-25 周三 计划