Formalize cubemap skybox pipeline across backends
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLPipelineLayout.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLTextureUnitAllocator.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLResourceView.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLEnums.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLTexture.h"
|
||||
#include "XCEngine/RHI/OpenGL/OpenGLSampler.h"
|
||||
#include <glad/glad.h>
|
||||
|
||||
@@ -81,6 +83,7 @@ bool OpenGLDescriptorSet::Initialize(OpenGLTextureUnitAllocator* allocator, uint
|
||||
m_bindings[i].count = layout.bindings[i].count;
|
||||
m_bindings[i].textureUnits.resize(layout.bindings[i].count);
|
||||
m_bindings[i].textureIds.resize(layout.bindings[i].count, 0);
|
||||
m_bindings[i].textureTargets.resize(layout.bindings[i].count, GL_TEXTURE_2D);
|
||||
m_bindings[i].samplerIds.resize(layout.bindings[i].count, 0);
|
||||
|
||||
if (m_bindings[i].type != DescriptorType::SRV &&
|
||||
@@ -159,6 +162,9 @@ void OpenGLDescriptorSet::Update(uint32_t offset, RHIResourceView* view) {
|
||||
|
||||
OpenGLResourceView* glView = static_cast<OpenGLResourceView*>(view);
|
||||
binding->textureIds[0] = glView->GetTexture();
|
||||
if (const OpenGLTexture* texture = glView->GetTextureResource()) {
|
||||
binding->textureTargets[0] = static_cast<uint32_t>(ToOpenGL(texture->GetOpenGLType()));
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLDescriptorSet::UpdateSampler(uint32_t offset, RHISampler* sampler) {
|
||||
@@ -200,7 +206,9 @@ void OpenGLDescriptorSet::Bind() {
|
||||
|
||||
if (textureId != 0 && binding.type != DescriptorType::Sampler) {
|
||||
glActiveTexture(GL_TEXTURE0 + unit);
|
||||
glBindTexture(GL_TEXTURE_2D, textureId);
|
||||
glBindTexture(
|
||||
j < binding.textureTargets.size() ? binding.textureTargets[j] : GL_TEXTURE_2D,
|
||||
textureId);
|
||||
}
|
||||
|
||||
if (samplerId != 0) {
|
||||
@@ -246,7 +254,9 @@ void OpenGLDescriptorSet::BindWithPipelineLayout(const OpenGLPipelineLayout* pip
|
||||
glBindImageTexture(bindingPoint, textureId, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA8);
|
||||
} else if (binding.type != DescriptorType::Sampler) {
|
||||
glActiveTexture(GL_TEXTURE0 + bindingPoint);
|
||||
glBindTexture(GL_TEXTURE_2D, textureId);
|
||||
glBindTexture(
|
||||
i < binding.textureTargets.size() ? binding.textureTargets[i] : GL_TEXTURE_2D,
|
||||
textureId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,7 +286,9 @@ void OpenGLDescriptorSet::Unbind() {
|
||||
uint32_t unit = binding.textureUnits[j];
|
||||
|
||||
glActiveTexture(GL_TEXTURE0 + unit);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
glBindTexture(
|
||||
j < binding.textureTargets.size() ? binding.textureTargets[j] : GL_TEXTURE_2D,
|
||||
0);
|
||||
glBindSampler(unit, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user