fix(RHI): 修复 OpenGL/D3D12 后端编译问题
- 修复 OpenGLCommandList 方法签名匹配 RHI 抽象接口 - 修复 OpenGLSwapChain Present/Resize 方法签名 - 添加 OpenGL 特有方法重载支持后端测试(底层逃逸) - 暂时禁用不兼容的 Resources 模块 - 更新 OpenGL 测试 CMakeLists
This commit is contained in:
@@ -199,7 +199,15 @@ const RHIDeviceInfo& D3D12Device::GetDeviceInfo() const {
|
||||
|
||||
RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) {
|
||||
auto* buffer = new D3D12Buffer();
|
||||
if (buffer->Initialize(m_device.Get(), desc.size, desc.stride, desc.bufferType)) {
|
||||
D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT;
|
||||
if (desc.bufferType == static_cast<uint32_t>(BufferType::ReadBack)) {
|
||||
heapType = D3D12_HEAP_TYPE_READBACK;
|
||||
} else if (desc.bufferType == static_cast<uint32_t>(BufferType::Constant)) {
|
||||
heapType = D3D12_HEAP_TYPE_UPLOAD;
|
||||
}
|
||||
if (buffer->Initialize(m_device.Get(), desc.size, D3D12_RESOURCE_STATE_COMMON, heapType)) {
|
||||
buffer->SetStride(desc.stride);
|
||||
buffer->SetBufferType(static_cast<BufferType>(desc.bufferType));
|
||||
return buffer;
|
||||
}
|
||||
delete buffer;
|
||||
@@ -208,7 +216,18 @@ RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) {
|
||||
|
||||
RHITexture* D3D12Device::CreateTexture(const TextureDesc& desc) {
|
||||
auto* texture = new D3D12Texture();
|
||||
if (texture->Initialize(m_device.Get(), desc)) {
|
||||
D3D12_RESOURCE_DESC d3d12Desc = {};
|
||||
d3d12Desc.Dimension = static_cast<D3D12_RESOURCE_DIMENSION>(desc.textureType);
|
||||
d3d12Desc.Width = desc.width;
|
||||
d3d12Desc.Height = desc.height;
|
||||
d3d12Desc.DepthOrArraySize = desc.depth;
|
||||
d3d12Desc.MipLevels = desc.mipLevels;
|
||||
d3d12Desc.Format = static_cast<DXGI_FORMAT>(desc.format);
|
||||
d3d12Desc.SampleDesc.Count = desc.sampleCount;
|
||||
d3d12Desc.SampleDesc.Quality = desc.sampleQuality;
|
||||
d3d12Desc.Flags = static_cast<D3D12_RESOURCE_FLAGS>(desc.flags);
|
||||
d3d12Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
|
||||
if (texture->Initialize(m_device.Get(), d3d12Desc)) {
|
||||
return texture;
|
||||
}
|
||||
delete texture;
|
||||
@@ -217,7 +236,9 @@ RHITexture* D3D12Device::CreateTexture(const TextureDesc& desc) {
|
||||
|
||||
RHIShader* D3D12Device::CompileShader(const ShaderCompileDesc& desc) {
|
||||
auto* shader = new D3D12Shader();
|
||||
if (shader->CompileFromFile(desc.fileName.c_str(), desc.entryPoint.c_str(), desc.profile.c_str())) {
|
||||
if (shader->CompileFromFile(desc.fileName.c_str(),
|
||||
reinterpret_cast<const char*>(desc.entryPoint.c_str()),
|
||||
reinterpret_cast<const char*>(desc.profile.c_str()))) {
|
||||
return shader;
|
||||
}
|
||||
delete shader;
|
||||
@@ -226,7 +247,21 @@ RHIShader* D3D12Device::CompileShader(const ShaderCompileDesc& desc) {
|
||||
|
||||
RHISampler* D3D12Device::CreateSampler(const SamplerDesc& desc) {
|
||||
auto* sampler = new D3D12Sampler();
|
||||
if (sampler->Initialize(m_device.Get(), desc)) {
|
||||
D3D12_SAMPLER_DESC d3d12Desc = {};
|
||||
d3d12Desc.Filter = static_cast<D3D12_FILTER>(desc.filter);
|
||||
d3d12Desc.AddressU = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(desc.addressU);
|
||||
d3d12Desc.AddressV = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(desc.addressV);
|
||||
d3d12Desc.AddressW = static_cast<D3D12_TEXTURE_ADDRESS_MODE>(desc.addressW);
|
||||
d3d12Desc.MipLODBias = desc.mipLodBias;
|
||||
d3d12Desc.MaxAnisotropy = desc.maxAnisotropy;
|
||||
d3d12Desc.ComparisonFunc = static_cast<D3D12_COMPARISON_FUNC>(desc.comparisonFunc);
|
||||
d3d12Desc.BorderColor[0] = desc.borderColorR;
|
||||
d3d12Desc.BorderColor[1] = desc.borderColorG;
|
||||
d3d12Desc.BorderColor[2] = desc.borderColorB;
|
||||
d3d12Desc.BorderColor[3] = desc.borderColorA;
|
||||
d3d12Desc.MinLOD = desc.minLod;
|
||||
d3d12Desc.MaxLOD = desc.maxLod;
|
||||
if (sampler->Initialize(m_device.Get(), d3d12Desc)) {
|
||||
return sampler;
|
||||
}
|
||||
delete sampler;
|
||||
|
||||
Reference in New Issue
Block a user