#include"Dx11DemoBase.h"
#include<D3Dcompiler.h>
Dx11DemoBase::Dx11DemoBase( ) : driverType_( D3D_DRIVER_TYPE_NULL ), featureLevel_( D3D_FEATURE_LEVEL_11_0 ),
d3dDevice_( 0 ), d3dContext_( 0 ), swapChain_( 0 ), backBufferTarget_( 0 )
{
}
Dx11DemoBase::~Dx11DemoBase( )
{
Shutdown( );
}
bool Dx11DemoBase::Initialize( HINSTANCE hInstance, HWND hwnd )
{
hInstance_ = hInstance;
hwnd_ = hwnd;
RECT dimensions;
GetClientRect( hwnd, &dimensions );
unsigned int width = dimensions.right - dimensions.left;
unsigned int height = dimensions.bottom - dimensions.top;
D3D_DRIVER_TYPE driverTypes[] =
{
D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP,
D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_SOFTWARE
};
unsigned int totalDriverTypes = ARRAYSIZE( driverTypes );
D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0
};
unsigned int totalFeatureLevels = ARRAYSIZE( featureLevels );
DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory( &swapChainDesc, sizeof( swapChainDesc ) );
swapChainDesc.BufferCount = 1;
swapChainDesc.BufferDesc.Width = width;
swapChainDesc.BufferDesc.Height = height;
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.OutputWindow = hwnd;
swapChainDesc.Windowed = true;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0;
unsigned int creationFlags = 0;
#ifdef _DEBUG
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
HRESULT result;
unsigned int driver = 0;
for( driver = 0; driver < totalDriverTypes; ++driver )
{
result = D3D11CreateDeviceAndSwapChain( 0, driverTypes[driver], 0, creationFlags,
featureLevels, totalFeatureLevels,
D3D11_SDK_VERSION, &swapChainDesc, &swapChain_,
&d3dDevice_, &featureLevel_, &d3dContext_ );
if( SUCCEEDED( result ) )
{
driverType_ = driverTypes[driver];
break;
}
}
if( FAILED( result ) )
{
DXTRACE_MSG( "创建D3D设备失败!" );
return false;
}
ID3D11Texture2D* backBufferTexture;
result = swapChain_->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&backBufferTexture );
if( FAILED( result ) )
{
DXTRACE_MSG( "获取交换链后台缓存失败!" );
return false;
}
result = d3dDevice_->CreateRenderTargetView( backBufferTexture, 0, &backBufferTarget_ );
if( backBufferTexture )
backBufferTexture->Release( );
if( FAILED( result ) )
{
DXTRACE_MSG( "创建渲染目标视图失败!" );
return false;
}
d3dContext_->OMSetRenderTargets( 1, &backBufferTarget_, 0 );
D3D11_VIEWPORT viewport;
viewport.Width = static_cast<float>(width);
viewport.Height = static_cast<float>(height);
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
viewport.TopLeftX = 0.0f;
viewport.TopLeftY = 0.0f;
d3dContext_->RSSetViewports( 1, &viewport );
return LoadContent( );
}
bool Dx11DemoBase::CompileD3DShader( char* filePath, char* entry, char* shaderModel, ID3DBlob** buffer )
{
DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
shaderFlags |= D3DCOMPILE_DEBUG;
#endif
ID3DBlob* errorBuffer = 0;
HRESULT result;
result = D3DX11CompileFromFile( filePath, 0, 0, entry, shaderModel,
shaderFlags, 0, 0, buffer, &errorBuffer, 0 );
if( FAILED( result ) )
{
if( errorBuffer != 0 )
{
OutputDebugStringA( ( char* )errorBuffer->GetBufferPointer( ) );
errorBuffer->Release( );
}
return false;
}
if( errorBuffer != 0 )
errorBuffer->Release( );
return true;
}
bool Dx11DemoBase::LoadContent( )
{
// 进行相关重载
return true;
}
void Dx11DemoBase::UnloadContent( )
{
// 进行相关重载
}
void Dx11DemoBase::Shutdown( )
{
UnloadContent( );
if( backBufferTarget_ ) backBufferTarget_->Release( );
if( swapChain_ ) swapChain_->Release( );
if( d3dContext_ ) d3dContext_->Release( );
if( d3dDevice_ ) d3dDevice_->Release( );
backBufferTarget_ = 0;
swapChain_ = 0;
d3dContext_ = 0;
d3dDevice_ = 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
用Direct3D11绘制三角形演示demo
共33个文件
tlog:9个
obj:3个
cpp:3个
5星 · 超过95%的资源 需积分: 50 1.1k 下载量 77 浏览量
2012-07-23
13:59:10
上传
评论 17
收藏 16.14MB RAR 举报
温馨提示
博文的配套源码 《 【Visual C++】游戏开发笔记二十九 一步一步教你用优雅的Direct3D11代码画一个三角形 》 ,配套博文地址为http://blog.csdn.net/zhmxy555/article/details/7774929, 为了更好的理解和提高,建议和配套博文一起学习理解 此为VS2010版。 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 当然,必须是0资源分下载~~~~~~~~ 希望能和大家一起交流,共同学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
【Visual C++】Note_Code_29.rar (33个子文件)
【Visual C++】Note_Code_29
TriangleDx11.suo 19KB
TriangleDx11.sln 908B
TriangleDx11
TriangleDx11.vcxproj.filters 1KB
TriangleDemo.cpp 4KB
TriangleDemo.h 533B
Dx11DemoBase.h 933B
SolidGreenColor.fx 313B
TriangleDx11.vcxproj.user 143B
main.cpp 3KB
TriangleDx11.vcxproj 5KB
Debug
TriangleDx11.log 2KB
vc100.idb 787KB
TriangleDemo.obj 183KB
CL.write.1.tlog 2KB
CL.read.1.tlog 53KB
TriangleDx11.exe.intermediate.manifest 381B
mt.read.1.tlog 718B
mt.command.1.tlog 444B
cl.command.1.tlog 2KB
main.obj 142KB
link.write.1.tlog 776B
link.command.1.tlog 2KB
link.read.1.tlog 3KB
Dx11DemoBase.obj 140KB
mt.write.1.tlog 258B
TriangleDx11.lastbuildstate 57B
vc100.pdb 548KB
Dx11DemoBase.cpp 5KB
ipch
triangledx11-99c5f146
triangledx11-1efecc20.ipch 47.25MB
Debug
TriangleDx11.ilk 1.08MB
TriangleDx11.exe 309KB
TriangleDx11.pdb 1.78MB
TriangleDx11.sdf 32.58MB
共 33 条
- 1
浅墨_毛星云
- 粉丝: 4w+
- 资源: 80
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页