提交 6d1d7d30 编写于 作者: GamebabyRockSun_QQ's avatar GamebabyRockSun_QQ

修复Texture_loader中的bug,具体见修正日志

上级 e7abbbf9
......@@ -83,25 +83,25 @@ int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
HWND hWnd = nullptr;
MSG msg = {};
const UINT nFrameBackBufCount = 3u;
UINT nFrameIndex = 0;
DXGI_FORMAT emRenderTargetFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
const float faClearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
const UINT nFrameBackBufCount = 3u;
UINT nFrameIndex = 0;
DXGI_FORMAT emRenderTargetFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
const float faClearColor[] = { 0.17647f, 0.549f, 0.941176f, 1.0f };
UINT nRTVDescriptorSize = 0U;
UINT nSamplerDescriptorSize = 0;
UINT nCBVSRVDescriptorSize = 0;
D3D12_VIEWPORT stViewPort = { 0.0f, 0.0f, static_cast<float>( iWidth ), static_cast<float>( iHeight ), D3D12_MIN_DEPTH, D3D12_MAX_DEPTH };
D3D12_RECT stScissorRect = { 0, 0, static_cast<LONG>( iWidth ), static_cast<LONG>( iHeight ) };
D3D12_VIEWPORT stViewPort = { 0.0f, 0.0f, static_cast<float>( iWidth ), static_cast<float>( iHeight ), D3D12_MIN_DEPTH, D3D12_MAX_DEPTH };
D3D12_RECT stScissorRect = { 0, 0, static_cast<LONG>( iWidth ), static_cast<LONG>( iHeight ) };
D3D_FEATURE_LEVEL emFeatureLevel = D3D_FEATURE_LEVEL_12_1;
ComPtr<IDXGIFactory5> pIDXGIFactory5;
ComPtr<IDXGIFactory6> pIDXGIFactory6;
ComPtr<IDXGIAdapter1> pIAdapter1;
ComPtr<ID3D12Device4> pID3D12Device4;
ComPtr<IDXGIFactory5> pIDXGIFactory5;
ComPtr<IDXGIFactory6> pIDXGIFactory6;
ComPtr<IDXGIAdapter1> pIAdapter1;
ComPtr<ID3D12Device4> pID3D12Device4;
ComPtr<ID3D12CommandQueue> pIMainCMDQueue;
ComPtr<ID3D12CommandAllocator> pIMainCMDAlloc;
......@@ -111,11 +111,11 @@ int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
ComPtr<ID3D12CommandAllocator> pICopyCMDAlloc;
ComPtr<ID3D12GraphicsCommandList> pICopyCMDList;
ComPtr<ID3D12Fence> pIFence;
UINT64 n64FenceValue = 0ui64;
HANDLE hEventFence = nullptr;
D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {};
ComPtr<ID3D12Fence> pIFence;
UINT64 n64FenceValue = 0ui64;
HANDLE hEventFence = nullptr;
D3D12_RESOURCE_BARRIER stBeginResBarrier = {};
D3D12_RESOURCE_BARRIER stEneResBarrier = {};
ComPtr<IDXGISwapChain1> pISwapChain1;
ComPtr<IDXGISwapChain3> pISwapChain3;
......@@ -124,22 +124,20 @@ int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
ComPtr<ID3D12DescriptorHeap> pIDSVHeap;
ComPtr<ID3D12Resource> pIDepthStencilBuffer;
ComPtr<ID3DBlob> pIVSModel;
ComPtr<ID3DBlob> pIPSModel;
ComPtr<ID3D12RootSignature> pIRootSignature;
ComPtr<ID3DBlob> pIVSModel;
ComPtr<ID3DBlob> pIPSModel;
ComPtr<ID3D12RootSignature> pIRootSignature;
ComPtr<ID3D12PipelineState> pIPSOModel;
ComPtr<ID3D12PipelineState> pIPSOWireFrame;
ComPtr<ID3D12DescriptorHeap> pICBVSRVHeap;
ComPtr<ID3D12DescriptorHeap> pISamplerHeap;
ComPtr<ID3D12Heap> pIUploadHeapModel;
ComPtr<ID3D12Heap> pIDefaultHeapModel;
ComPtr<ID3D12Heap> pIUploadHeapModel;
ComPtr<ID3D12Heap> pIDefaultHeapModel;
ComPtr<ID3D12Heap> pIUploadHeapIndices;
ComPtr<ID3D12Heap> pIDefaultHeapIndices;
ComPtr<ID3D12Heap> pIUploadHeapIndices;
ComPtr<ID3D12Heap> pIDefaultHeapIndices;
ComPtr<ID3D12Resource> pIVBPositionsUp;
ComPtr<ID3D12Resource> pIVBNormalsUp;
......@@ -163,13 +161,8 @@ int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
ComPtr<ID3D12Resource> pICBMVP;
ComPtr<ID3D12Resource> pICBBones;
ST_GRS_CB_MVP* pstCBMVP = nullptr;
ST_GRS_CB_BONES* pstBones = nullptr;
ComPtr<IWICImagingFactory> pIWICFactory;
ComPtr<IWICBitmapDecoder> pIWICDecoder;
ComPtr<IWICBitmapFrameDecode> pIWICFrame;
ComPtr<IWICBitmapSource> pIBMP;
ST_GRS_CB_MVP* pstCBMVP = nullptr;
ST_GRS_CB_BONES* pstBones = nullptr;
CAtlArray<ComPtr<ID3D12Resource>> arTexture;
CAtlArray<ComPtr<ID3D12Resource>> arTextureUp;
......@@ -1285,7 +1278,6 @@ int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
stEneResBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
}
DWORD dwRet = 0;
BOOL bExit = FALSE;
D3D12_CPU_DESCRIPTOR_HANDLE stRTVHandle = pIRTVHeap->GetCPUDescriptorHandleForHeapStart();
......@@ -1558,28 +1550,48 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam
}
XMVECTOR vDelta = { 0.0f,0.0f,1.0f,0.0f };
if ( VK_UP == n16KeyCode )
// Z-轴
if ( VK_UP == n16KeyCode || 'w' == n16KeyCode || 'W' == n16KeyCode )
{
g_v4EyePos = XMVectorAdd( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorAdd( g_v4LookAt, vDelta );
}
if ( VK_DOWN == n16KeyCode )
if ( VK_DOWN == n16KeyCode || 's' == n16KeyCode || 'S' == n16KeyCode )
{
g_v4EyePos = XMVectorSubtract( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorSubtract( g_v4LookAt, vDelta );
}
// X-轴
vDelta = { 1.0f,0.0f,0.0f,0.0f };
if ( VK_LEFT == n16KeyCode )
if ( VK_LEFT == n16KeyCode || 'a' == n16KeyCode || 'A' == n16KeyCode )
{
g_v4EyePos = XMVectorAdd( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorAdd( g_v4LookAt, vDelta );
}
if ( VK_RIGHT == n16KeyCode )
if ( VK_RIGHT == n16KeyCode || 'd' == n16KeyCode || 'D' == n16KeyCode )
{
g_v4EyePos = XMVectorSubtract( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorSubtract( g_v4LookAt, vDelta );
}
// Y-轴
vDelta = { 0.0f,1.0f,0.0f,0.0f };
if ( VK_PRIOR == n16KeyCode || 'r' == n16KeyCode || 'R' == n16KeyCode )
{
g_v4EyePos = XMVectorAdd( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorAdd( g_v4LookAt, vDelta );
}
if ( VK_NEXT == n16KeyCode || 'f' == n16KeyCode || 'F' == n16KeyCode )
{
g_v4EyePos = XMVectorSubtract( g_v4EyePos, vDelta );
g_v4LookAt = XMVectorSubtract( g_v4LookAt, vDelta );
}
// 缩放
if ( VK_ADD == n16KeyCode || VK_OEM_PLUS == n16KeyCode )
{
g_fScaling += 1.0f;
......
......@@ -162,6 +162,11 @@
<ClInclude Include="..\Commons\GRS_Texture_Loader.h" />
<ClInclude Include="..\Commons\GRS_WIC_Utility.h" />
</ItemGroup>
<ItemGroup>
<None Include="Shader\simple_bones_animation_multitex.hlsl">
<FileType>Document</FileType>
</None>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
......
......@@ -13,6 +13,9 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Shader">
<UniqueIdentifier>{1a8435dd-5020-4b11-85fe-508e5932dc19}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="17-D3D12_Assimp_Animation.cpp">
......@@ -42,4 +45,9 @@
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="Shader\simple_bones_animation_multitex.hlsl">
<Filter>Shader</Filter>
</None>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -1273,8 +1273,8 @@ UINT __stdcall RenderThread(void* pParam)
stIBV.Format = DXGI_FORMAT_R32_UINT;
stIBV.SizeInBytes = nIndexCnt * sizeof(UINT);
::HeapFree(::GetProcessHeap(), 0, pstVertices);
::HeapFree(::GetProcessHeap(), 0, pnIndices);
GRS_SAFE_FREE( pstVertices);
GRS_SAFE_FREE( pnIndices);
}
//4、创建常量缓冲
......@@ -1643,12 +1643,8 @@ BOOL LoadMeshVertex(const CHAR*pszMeshFileName, UINT&nVertexCnt, ST_GRS_VERTEX*&
fin.get(input);
fin.get(input);
ppVertex = (ST_GRS_VERTEX*)HeapAlloc(::GetProcessHeap()
, HEAP_ZERO_MEMORY
, nVertexCnt * sizeof(ST_GRS_VERTEX));
ppIndices = (UINT*)HeapAlloc(::GetProcessHeap()
, HEAP_ZERO_MEMORY
, nVertexCnt * sizeof(UINT));
ppVertex = (ST_GRS_VERTEX*)GRS_CALLOC( nVertexCnt * sizeof(ST_GRS_VERTEX));
ppIndices = (UINT*) GRS_CALLOC( nVertexCnt * sizeof(UINT));
for (UINT i = 0; i < nVertexCnt; i++)
{
......
......@@ -55,9 +55,9 @@ __inline BOOL LoadTextureFromMem( ID3D12GraphicsCommandList* pCMDList
, IID_PPV_ARGS( &pITexture ) ) );
//获取需要的上传堆资源缓冲的大小,这个尺寸通常大于实际图片的尺寸
D3D12_RESOURCE_DESC Desc = pITexture->GetDesc();
D3D12_RESOURCE_DESC stDestDesc = pITexture->GetDesc();
UINT64 n64UploadBufferSize = 0;
pID3D12Device->GetCopyableFootprints( &Desc, 0, 1, 0, nullptr, nullptr, nullptr, &n64UploadBufferSize );
pID3D12Device->GetCopyableFootprints( &stDestDesc, 0, 1, 0, nullptr, nullptr, nullptr, &n64UploadBufferSize );
stTextureHeapProp.Type = D3D12_HEAP_TYPE_UPLOAD;
......@@ -85,15 +85,12 @@ __inline BOOL LoadTextureFromMem( ID3D12GraphicsCommandList* pCMDList
//获取向上传堆拷贝纹理数据的一些纹理转换尺寸信息
//对于复杂的DDS纹理这是非常必要的过程
UINT nNumSubresources = 1u; //我们只有一副图片,即子资源个数为1
UINT nTextureRowNum = 0u;
UINT64 n64TextureRowSizes = 0u;
UINT64 n64RequiredSize = 0u;
D3D12_PLACED_SUBRESOURCE_FOOTPRINT stTxtLayouts = {};
D3D12_RESOURCE_DESC stDestDesc = pITexture->GetDesc();
pID3D12Device->GetCopyableFootprints( &stDestDesc
, 0
, nNumSubresources
......@@ -182,13 +179,15 @@ __inline BOOL LoadTextureFromFile(
UINT nTextureH = 0;
UINT nPicRowPitch = 0;
if ( WICLoadImageFromFile( pszTextureFile
bRet = WICLoadImageFromFile( pszTextureFile
, emTextureFormat
, nTextureW
, nTextureH
, nPicRowPitch
, pbImageData
, szImageBufferSize ) )
, szImageBufferSize );
if ( bRet )
{
bRet = LoadTextureFromMem( pCMDList
, pbImageData
......
......@@ -68,3 +68,17 @@ D3D12 ERROR: ID3D12CommandQueue::Present: Resource state (0x800: D3D12_RESOURCE_
2021-6-10
1、添加了Assimp导入3D模型,并运行3D骨骼动画的第17号示例;
2021-6-13
1、修正了GRS_Texture_Loader.h中用WIC库加载纹理的BUG,之前在WIC加载失败时,Load函数任然会返回TRUE,并且在判断是否需要图片格式兼容性转换时逻辑也是错的,现在改为首先判断能否直接加载,然后再判断是否可以做兼容性转换,然后再去转换加载。
2、添加并修正了简单的摄像机控制逻辑,这个目前还不是介绍的重点,所以没有做严格的控制。
2021-6-14
1、将17号例子中的背景色改成了天空蓝,看上去舒服一些;
2021-6-16
1、调整了16号例子中的输出格式,并且追加了显示metadata的代码;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册