Add RHI vertex and index buffer views
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "XCEngine/RHI/D3D12/D3D12Framebuffer.h"
|
||||
#include <stdio.h>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#include <dxgidebug.h>
|
||||
@@ -27,6 +28,19 @@
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
namespace {
|
||||
|
||||
std::string NarrowAscii(const std::wstring& value) {
|
||||
std::string result;
|
||||
result.reserve(value.size());
|
||||
for (wchar_t ch : value) {
|
||||
result.push_back(static_cast<char>(ch));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
D3D12Device::D3D12Device()
|
||||
: m_isDeviceRemoved(false)
|
||||
, m_initialized(false)
|
||||
@@ -293,14 +307,16 @@ RHITexture* D3D12Device::CreateTexture(const TextureDesc& desc) {
|
||||
|
||||
RHIShader* D3D12Device::CreateShader(const ShaderCompileDesc& desc) {
|
||||
auto* shader = new D3D12Shader();
|
||||
const char* entryPoint = desc.entryPoint.empty() ? nullptr : reinterpret_cast<const char*>(desc.entryPoint.c_str());
|
||||
const char* profile = desc.profile.empty() ? nullptr : reinterpret_cast<const char*>(desc.profile.c_str());
|
||||
const std::string entryPoint = NarrowAscii(desc.entryPoint);
|
||||
const std::string profile = NarrowAscii(desc.profile);
|
||||
const char* entryPointPtr = entryPoint.empty() ? nullptr : entryPoint.c_str();
|
||||
const char* profilePtr = profile.empty() ? nullptr : profile.c_str();
|
||||
|
||||
bool success = false;
|
||||
if (!desc.source.empty()) {
|
||||
success = shader->Compile(desc.source.data(), desc.source.size(), entryPoint, profile);
|
||||
success = shader->Compile(desc.source.data(), desc.source.size(), entryPointPtr, profilePtr);
|
||||
} else if (!desc.fileName.empty()) {
|
||||
success = shader->CompileFromFile(desc.fileName.c_str(), entryPoint, profile);
|
||||
success = shader->CompileFromFile(desc.fileName.c_str(), entryPointPtr, profilePtr);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
@@ -386,6 +402,36 @@ RHIFence* D3D12Device::CreateFence(const FenceDesc& desc) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RHIResourceView* D3D12Device::CreateVertexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) {
|
||||
if (!buffer) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* view = new D3D12ResourceView();
|
||||
view->InitializeAsVertexBuffer(static_cast<D3D12Buffer*>(buffer), desc);
|
||||
if (!view->IsValid()) {
|
||||
delete view;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
RHIResourceView* D3D12Device::CreateIndexBufferView(RHIBuffer* buffer, const ResourceViewDesc& desc) {
|
||||
if (!buffer) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* view = new D3D12ResourceView();
|
||||
view->InitializeAsIndexBuffer(static_cast<D3D12Buffer*>(buffer), desc);
|
||||
if (!view->IsValid()) {
|
||||
delete view;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
RHISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) {
|
||||
if (presentQueue == nullptr) {
|
||||
return nullptr;
|
||||
|
||||
Reference in New Issue
Block a user