fix(RHI): 添加 OpenGL 源文件到 CMakeLists 并修复编译错误
- 添加 OpenGL RHI 所有源文件到 engine/CMakeLists.txt - 修复 OpenGLPipelineState 结构体重定义问题 - 修复 BufferDesc/TextureDesc/ShaderCompileDesc API 不匹配 - 添加 OpenGLShader 缺少的基类纯虚函数实现 - 修复 HashMap 迭代器支持和 ResourceManager API 调用
This commit is contained in:
@@ -168,11 +168,11 @@ RHIBuffer* OpenGLDevice::CreateBuffer(const BufferDesc& desc) {
|
||||
auto* buffer = new OpenGLBuffer();
|
||||
OpenGLBufferType bufferType = OpenGLBufferType::Vertex;
|
||||
|
||||
switch (desc.usage) {
|
||||
case ResourceUsage::IndexBuffer:
|
||||
switch (desc.bufferType) {
|
||||
case 1: // Index buffer
|
||||
bufferType = OpenGLBufferType::Index;
|
||||
break;
|
||||
case ResourceUsage::ConstantBuffer:
|
||||
case 2: // Constant buffer
|
||||
bufferType = OpenGLBufferType::Uniform;
|
||||
break;
|
||||
default:
|
||||
@@ -180,7 +180,7 @@ RHIBuffer* OpenGLDevice::CreateBuffer(const BufferDesc& desc) {
|
||||
break;
|
||||
}
|
||||
|
||||
buffer->Initialize(bufferType, desc.size, nullptr, desc.cpuAccess == CPUAccess::Write);
|
||||
buffer->Initialize(bufferType, desc.size, nullptr, false);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -188,14 +188,14 @@ RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc) {
|
||||
auto* texture = new OpenGLTexture();
|
||||
|
||||
OpenGLTextureType type = OpenGLTextureType::Texture2D;
|
||||
switch (desc.type) {
|
||||
case TextureType::Texture1D:
|
||||
switch (desc.textureType) {
|
||||
case 0:
|
||||
type = OpenGLTextureType::Texture1D;
|
||||
break;
|
||||
case TextureType::Texture3D:
|
||||
case 2:
|
||||
type = OpenGLTextureType::Texture3D;
|
||||
break;
|
||||
case TextureType::TextureCube:
|
||||
case 3:
|
||||
type = OpenGLTextureType::TextureCube;
|
||||
break;
|
||||
default:
|
||||
@@ -228,10 +228,11 @@ RHICommandQueue* OpenGLDevice::CreateCommandQueue(const CommandQueueDesc& desc)
|
||||
|
||||
RHIShader* OpenGLDevice::CompileShader(const ShaderCompileDesc& desc) {
|
||||
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);
|
||||
std::wstring filePath = desc.fileName;
|
||||
std::string entryPoint(desc.entryPoint.begin(), desc.entryPoint.end());
|
||||
std::string profile(desc.profile.begin(), desc.profile.end());
|
||||
if (!filePath.empty()) {
|
||||
shader->CompileFromFile(filePath.c_str(), entryPoint.c_str(), profile.c_str());
|
||||
}
|
||||
return shader;
|
||||
}
|
||||
|
||||
@@ -100,15 +100,15 @@ OpenGLPipelineState::OpenGLPipelineState()
|
||||
OpenGLPipelineState::~OpenGLPipelineState() {
|
||||
}
|
||||
|
||||
void OpenGLPipelineState::SetDepthStencilState(const DepthStencilState& state) {
|
||||
void OpenGLPipelineState::SetDepthStencilState(const OpenGLDepthStencilState& state) {
|
||||
m_depthStencilState = state;
|
||||
}
|
||||
|
||||
void OpenGLPipelineState::SetBlendState(const BlendState& state) {
|
||||
void OpenGLPipelineState::SetBlendState(const OpenGLBlendState& state) {
|
||||
m_blendState = state;
|
||||
}
|
||||
|
||||
void OpenGLPipelineState::SetRasterizerState(const RasterizerState& state) {
|
||||
void OpenGLPipelineState::SetRasterizerState(const OpenGLRasterizerState& state) {
|
||||
m_rasterizerState = state;
|
||||
}
|
||||
|
||||
|
||||
@@ -202,6 +202,19 @@ bool OpenGLShader::Compile(const char* source, ShaderType type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OpenGLShader::CompileFromFile(const wchar_t* filePath, const char* entryPoint, const char* target) {
|
||||
std::wstring ws(filePath);
|
||||
std::string path(ws.begin(), ws.end());
|
||||
return CompileFromFile(path.c_str(), nullptr);
|
||||
}
|
||||
|
||||
bool OpenGLShader::Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target) {
|
||||
if (!sourceData || sourceSize == 0) {
|
||||
return false;
|
||||
}
|
||||
return Compile(static_cast<const char*>(sourceData), ShaderType::Fragment);
|
||||
}
|
||||
|
||||
void OpenGLShader::Shutdown() {
|
||||
if (m_program) {
|
||||
glDeleteProgram(m_program);
|
||||
|
||||
Reference in New Issue
Block a user