86 lines
2.3 KiB
C++
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 |