fix(OpenGL): 修复工厂方法返回 nullptr 的问题
- OpenGLDevice::CreateBuffer 现在创建并返回 OpenGLBuffer 对象 - OpenGLDevice::CreateTexture 现在创建并返回 OpenGLTexture 对象 - OpenGLDevice::CreateSwapChain 现在创建并返回 OpenGLSwapChain 对象 - OpenGLDevice::CreateCommandList 现在创建并返回 OpenGLCommandList 对象 - OpenGLDevice::CreateCommandQueue 现在创建并返回 OpenGLCommandQueue 对象 - OpenGLDevice::CompileShader 现在创建并返回 OpenGLShader 对象 - OpenGLDevice::CreatePipelineState 现在创建并返回 OpenGLPipelineState 对象 - OpenGLDevice::CreateFence 现在创建并返回 OpenGLFence 对象 - OpenGLDevice::CreateSampler 现在创建并返回 OpenGLSampler 对象
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
#define GLFW_INCLUDE_NONE
|
#define GLFW_INCLUDE_NONE
|
||||||
#include "XCEngine/RHI/OpenGL/OpenGLDevice.h"
|
#include "XCEngine/RHI/OpenGL/OpenGLDevice.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLBuffer.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLTexture.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLShader.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLPipelineState.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLFence.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLSampler.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLCommandList.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLCommandQueue.h"
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLSwapChain.h"
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@@ -124,39 +133,93 @@ bool OpenGLDevice::ShouldClose() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RHIBuffer* OpenGLDevice::CreateBuffer(const BufferDesc& desc) {
|
RHIBuffer* OpenGLDevice::CreateBuffer(const BufferDesc& desc) {
|
||||||
return nullptr;
|
auto* buffer = new OpenGLBuffer();
|
||||||
|
OpenGLBufferType bufferType = OpenGLBufferType::Vertex;
|
||||||
|
|
||||||
|
switch (desc.usage) {
|
||||||
|
case ResourceUsage::IndexBuffer:
|
||||||
|
bufferType = OpenGLBufferType::Index;
|
||||||
|
break;
|
||||||
|
case ResourceUsage::ConstantBuffer:
|
||||||
|
bufferType = OpenGLBufferType::Uniform;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
bufferType = OpenGLBufferType::Vertex;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer->Initialize(bufferType, desc.size, nullptr, desc.cpuAccess == CPUAccess::Write);
|
||||||
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc) {
|
RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc) {
|
||||||
return nullptr;
|
auto* texture = new OpenGLTexture();
|
||||||
|
|
||||||
|
OpenGLTextureType type = OpenGLTextureType::Texture2D;
|
||||||
|
switch (desc.type) {
|
||||||
|
case TextureType::Texture1D:
|
||||||
|
type = OpenGLTextureType::Texture1D;
|
||||||
|
break;
|
||||||
|
case TextureType::Texture3D:
|
||||||
|
type = OpenGLTextureType::Texture3D;
|
||||||
|
break;
|
||||||
|
case TextureType::TextureCube:
|
||||||
|
type = OpenGLTextureType::TextureCube;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
type = OpenGLTextureType::Texture2D;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLFormat format = OpenGLFormat::RGBA8;
|
||||||
|
texture->Initialize(type, desc.width, desc.height, desc.depth, desc.mipLevels, format, nullptr);
|
||||||
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHISwapChain* OpenGLDevice::CreateSwapChain(const SwapChainDesc& desc) {
|
RHISwapChain* OpenGLDevice::CreateSwapChain(const SwapChainDesc& desc) {
|
||||||
return nullptr;
|
auto* swapChain = new OpenGLSwapChain();
|
||||||
|
if (m_window) {
|
||||||
|
swapChain->Initialize(m_window, desc.width, desc.height);
|
||||||
|
}
|
||||||
|
return swapChain;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHICommandList* OpenGLDevice::CreateCommandList(const CommandListDesc& desc) {
|
RHICommandList* OpenGLDevice::CreateCommandList(const CommandListDesc& desc) {
|
||||||
return nullptr;
|
auto* cmdList = new OpenGLCommandList();
|
||||||
|
return cmdList;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHICommandQueue* OpenGLDevice::CreateCommandQueue(const CommandQueueDesc& desc) {
|
RHICommandQueue* OpenGLDevice::CreateCommandQueue(const CommandQueueDesc& desc) {
|
||||||
return nullptr;
|
auto* queue = new OpenGLCommandQueue();
|
||||||
|
return queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHIShader* OpenGLDevice::CompileShader(const ShaderCompileDesc& desc) {
|
RHIShader* OpenGLDevice::CompileShader(const ShaderCompileDesc& desc) {
|
||||||
return nullptr;
|
auto* shader = new OpenGLShader();
|
||||||
|
if (desc.sourceData && desc.sourceSize > 0) {
|
||||||
|
shader->Compile(static_cast<const char*>(desc.sourceData), desc.sourceSize);
|
||||||
|
} else if (desc.filePath) {
|
||||||
|
shader->CompileFromFile(desc.filePath);
|
||||||
|
}
|
||||||
|
return shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHIPipelineState* OpenGLDevice::CreatePipelineState(const PipelineStateDesc& desc) {
|
RHIPipelineState* OpenGLDevice::CreatePipelineState(const PipelineStateDesc& desc) {
|
||||||
return nullptr;
|
auto* pso = new OpenGLPipelineState();
|
||||||
|
return pso;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHIFence* OpenGLDevice::CreateFence(const FenceDesc& desc) {
|
RHIFence* OpenGLDevice::CreateFence(const FenceDesc& desc) {
|
||||||
return nullptr;
|
auto* fence = new OpenGLFence();
|
||||||
|
fence->Initialize(desc.initialValue > 0);
|
||||||
|
return fence;
|
||||||
}
|
}
|
||||||
|
|
||||||
RHISampler* OpenGLDevice::CreateSampler(const SamplerDesc& desc) {
|
RHISampler* OpenGLDevice::CreateSampler(const SamplerDesc& desc) {
|
||||||
return nullptr;
|
auto* sampler = new OpenGLSampler();
|
||||||
|
OpenGLSamplerDesc samplerDesc = {};
|
||||||
|
sampler->Initialize(samplerDesc);
|
||||||
|
return sampler;
|
||||||
}
|
}
|
||||||
|
|
||||||
const RHICapabilities& OpenGLDevice::GetCapabilities() const {
|
const RHICapabilities& OpenGLDevice::GetCapabilities() const {
|
||||||
|
|||||||
Reference in New Issue
Block a user