86 lines
2.3 KiB
C++

#pragma once
#include <string>
#include <wrl.h>
#include <d3dcompiler.h>
#include <d3d12.h>
#include <fstream>
#include <locale>
#include <codecvt>
#include "Logger.h"
#include "d3dx12.h"
#define ERRBOX(msg) MessageBoxA(nullptr, std::string(msg).c_str(), "Error!", MB_OK)
#define MSGBOX(msg) MessageBoxA(nullptr, std::string(msg).c_str(), "Info", MB_OK)
template<typename T>
using ComPtr = Microsoft::WRL::ComPtr<T>;
void printCurrentDirectory(); // aktuális környezet elérésének kiírása
// GLOBÁLIS WinApi paraméterek
struct EntryArgs {
HINSTANCE hThisInstance;
LPSTR lpszArgs;
int nWinMode;
void fill(HINSTANCE hThisInstance, LPSTR lpszArgs, int nWinMode); // mezõk kitöltése
};
extern EntryArgs gEntryArgs;
// bináris fájl betöltése egy blobba
ComPtr<ID3DBlob> loadBlob(const std::string& fileName);
// kiszámítja a mérethez tartozó legkisebb 256-bájtos blokkból álló memóriablokk méretét
size_t calc256AlignedSize(size_t origSize);
inline std::wstring AnsiToWString(const std::string& str)
{
WCHAR buffer[512];
MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, buffer, 512);
return std::wstring(buffer);
}
inline std::string WStringToAnsi(const std::wstring& wstr)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
return converter.to_bytes(wstr);
}
// buffer létrehozása az upload heapen
inline ComPtr<ID3D12Resource> createBuffer_UH(ComPtr<ID3D12Device> device, size_t bufferSize)
{
ComPtr<ID3D12Resource> buffer = nullptr;
if (FAILED(device->CreateCommittedResource(&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD),
D3D12_HEAP_FLAG_NONE,
&CD3DX12_RESOURCE_DESC::Buffer(bufferSize),
D3D12_RESOURCE_STATE_GENERIC_READ,
nullptr,
IID_PPV_ARGS(buffer.GetAddressOf()))))
ERRBOX("Failed to create buffer on upload heap!");
return buffer;
}
// upload heapen elhelyezkedõ buffer feltöltése adattal a rendszermemóriából
inline void bufferMapCopy(ComPtr<ID3D12Resource> bufferResource, void * data, size_t size)
{
BYTE * mappedData;
bufferResource->Map(0, nullptr, reinterpret_cast<void**>(&mappedData));
memcpy(mappedData, data, size);
bufferResource->Unmap(0, nullptr);
}
// feltételes transzponálás (ha definiálva van, akkor automatikusan transzponál minden mátrixot)
#ifdef MT_ON
#define MT(m) XMMatrixTranspose(m)
#endif
#ifndef MT_ON
#define MT(m) (m)
#endif