1
0
forked from 0ad/0ad

Adds debug labels to backend framebuffers.

This was SVN commit r26408.
This commit is contained in:
Vladislav Belov 2022-02-18 23:00:11 +00:00
parent b949f19875
commit 5eb21cbfbf
9 changed files with 73 additions and 38 deletions

View File

@ -225,12 +225,14 @@ void CLOSTexture::ConstructTexture(Renderer::Backend::GL::CDeviceCommandContext*
const size_t textureSize = round_up_to_pow2(round_up((size_t)m_MapSize + g_BlurSize - 1, g_SubTextureAlignment));
Renderer::Backend::GL::CDevice* backendDevice = deviceCommandContext->GetDevice();
const Renderer::Backend::Sampler::Desc defaultSamplerDesc =
Renderer::Backend::Sampler::MakeDefaultSampler(
Renderer::Backend::Sampler::Filter::LINEAR,
Renderer::Backend::Sampler::AddressMode::CLAMP_TO_EDGE);
m_Texture = deviceCommandContext->GetDevice()->CreateTexture2D("LOSTexture",
m_Texture = backendDevice->CreateTexture2D("LOSTexture",
Renderer::Backend::Format::A8, textureSize, textureSize, defaultSamplerDesc);
// Initialise texture with SoD color, for the areas we don't
@ -240,14 +242,14 @@ void CLOSTexture::ConstructTexture(Renderer::Backend::GL::CDeviceCommandContext*
if (CRenderer::IsInitialised() && g_RenderingOptions.GetSmoothLOS())
{
m_SmoothTextures[0] = deviceCommandContext->GetDevice()->CreateTexture2D("LOSSmoothTexture0",
m_SmoothTextures[0] = backendDevice->CreateTexture2D("LOSSmoothTexture0",
Renderer::Backend::Format::A8, textureSize, textureSize, defaultSamplerDesc);
m_SmoothTextures[1] = deviceCommandContext->GetDevice()->CreateTexture2D("LOSSmoothTexture1",
m_SmoothTextures[1] = backendDevice->CreateTexture2D("LOSSmoothTexture1",
Renderer::Backend::Format::A8, textureSize, textureSize, defaultSamplerDesc);
m_SmoothFramebuffers[0] = Renderer::Backend::GL::CFramebuffer::Create(
m_SmoothFramebuffers[0] = backendDevice->CreateFramebuffer("LOSSmoothFramebuffer0",
m_SmoothTextures[0].get(), nullptr);
m_SmoothFramebuffers[1] = Renderer::Backend::GL::CFramebuffer::Create(
m_SmoothFramebuffers[1] = backendDevice->CreateFramebuffer("LOSSmoothFramebuffer1",
m_SmoothTextures[1].get(), nullptr);
if (!m_SmoothFramebuffers[0] || !m_SmoothFramebuffers[1])
{

View File

@ -219,8 +219,10 @@ void CMiniMapTexture::CreateTextures(
Renderer::Backend::Sampler::Filter::LINEAR,
Renderer::Backend::Sampler::AddressMode::CLAMP_TO_EDGE);
Renderer::Backend::GL::CDevice* backendDevice = deviceCommandContext->GetDevice();
// Create terrain texture
m_TerrainTexture = deviceCommandContext->GetDevice()->CreateTexture2D("MiniMapTerrainTexture",
m_TerrainTexture = backendDevice->CreateTexture2D("MiniMapTerrainTexture",
Renderer::Backend::Format::R8G8B8A8, textureSize, textureSize, defaultSamplerDesc);
// Initialise texture with solid black, for the areas we don't
@ -235,10 +237,10 @@ void CMiniMapTexture::CreateTextures(
m_TerrainData = std::make_unique<u32[]>((m_MapSize - 1) * (m_MapSize - 1));
m_FinalTexture = deviceCommandContext->GetDevice()->CreateTexture2D("MiniMapFinalTexture",
m_FinalTexture = backendDevice->CreateTexture2D("MiniMapFinalTexture",
Renderer::Backend::Format::R8G8B8A8, FINAL_TEXTURE_SIZE, FINAL_TEXTURE_SIZE, defaultSamplerDesc);
m_FinalTextureFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_FinalTextureFramebuffer = backendDevice->CreateFramebuffer("MiniMapFinalFramebuffer",
m_FinalTexture.get(), nullptr);
ENSURE(m_FinalTextureFramebuffer);
}

View File

@ -122,8 +122,10 @@ void CPostprocManager::RecreateBuffers()
{
Cleanup();
Renderer::Backend::GL::CDevice* backendDevice = g_VideoMode.GetBackendDevice();
#define GEN_BUFFER_RGBA(name, w, h) \
name = g_VideoMode.GetBackendDevice()->CreateTexture2D( \
name = backendDevice->CreateTexture2D( \
"PostProc" #name, Renderer::Backend::Format::R8G8B8A8, w, h, \
Renderer::Backend::Sampler::MakeDefaultSampler( \
Renderer::Backend::Sampler::Filter::LINEAR, \
@ -143,7 +145,7 @@ void CPostprocManager::RecreateBuffers()
for (BlurScale::Step& step : scale.steps)
{
GEN_BUFFER_RGBA(step.texture, width, height);
step.framebuffer = Renderer::Backend::GL::CFramebuffer::Create(
step.framebuffer = backendDevice->CreateFramebuffer("BlurScaleSteoFramebuffer",
step.texture.get(), nullptr);
}
width /= 2;
@ -153,7 +155,7 @@ void CPostprocManager::RecreateBuffers()
#undef GEN_BUFFER_RGBA
// Allocate the Depth/Stencil texture.
m_DepthTex = g_VideoMode.GetBackendDevice()->CreateTexture2D("PostPRocDepthTexture",
m_DepthTex = backendDevice->CreateTexture2D("PostPRocDepthTexture",
Renderer::Backend::Format::D24_S8, m_Width, m_Height,
Renderer::Backend::Sampler::MakeDefaultSampler(
Renderer::Backend::Sampler::Filter::LINEAR,
@ -164,13 +166,13 @@ void CPostprocManager::RecreateBuffers()
g_Renderer.GetDeviceCommandContext()->BindTexture(0, GL_TEXTURE_2D, 0);
// Set up the framebuffers with some initial textures.
m_CaptureFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_CaptureFramebuffer = backendDevice->CreateFramebuffer("PostprocCaptureFramebuffer",
m_ColorTex1.get(), m_DepthTex.get(),
g_VideoMode.GetBackendDevice()->GetCurrentBackbuffer()->GetClearColor());
m_PingFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_PingFramebuffer = backendDevice->CreateFramebuffer("PostprocPingFramebuffer",
m_ColorTex1.get(), nullptr);
m_PongFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_PongFramebuffer = backendDevice->CreateFramebuffer("PostprocPongFramebuffer",
m_ColorTex2.get(), nullptr);
if (!m_CaptureFramebuffer || !m_PingFramebuffer || !m_PongFramebuffer)
@ -598,7 +600,9 @@ void CPostprocManager::CreateMultisampleBuffer()
{
glEnable(GL_MULTISAMPLE);
m_MultisampleColorTex = g_VideoMode.GetBackendDevice()->CreateTexture("PostProcColorMS",
Renderer::Backend::GL::CDevice* backendDevice = g_VideoMode.GetBackendDevice();
m_MultisampleColorTex = backendDevice->CreateTexture("PostProcColorMS",
Renderer::Backend::GL::CTexture::Type::TEXTURE_2D_MULTISAMPLE,
Renderer::Backend::Format::R8G8B8A8, m_Width, m_Height,
Renderer::Backend::Sampler::MakeDefaultSampler(
@ -606,7 +610,7 @@ void CPostprocManager::CreateMultisampleBuffer()
Renderer::Backend::Sampler::AddressMode::CLAMP_TO_EDGE), 1, m_MultisampleCount);
// Allocate the Depth/Stencil texture.
m_MultisampleDepthTex = g_VideoMode.GetBackendDevice()->CreateTexture("PostProcDepthMS",
m_MultisampleDepthTex = backendDevice->CreateTexture("PostProcDepthMS",
Renderer::Backend::GL::CTexture::Type::TEXTURE_2D_MULTISAMPLE,
Renderer::Backend::Format::D24_S8, m_Width, m_Height,
Renderer::Backend::Sampler::MakeDefaultSampler(
@ -614,7 +618,7 @@ void CPostprocManager::CreateMultisampleBuffer()
Renderer::Backend::Sampler::AddressMode::CLAMP_TO_EDGE), 1, m_MultisampleCount);
// Set up the framebuffers with some initial textures.
m_MultisampleFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_MultisampleFramebuffer = backendDevice->CreateFramebuffer("PostprocMultisampleFramebuffer",
m_MultisampleColorTex.get(), m_MultisampleDepthTex.get(),
g_VideoMode.GetBackendDevice()->GetCurrentBackbuffer()->GetClearColor());

View File

@ -525,16 +525,18 @@ void ShadowMapInternals::CreateTexture()
LOGMESSAGE("Creating shadow texture (size %dx%d) (format = %s)",
Width, Height, formatName);
Renderer::Backend::GL::CDevice* backendDevice = g_VideoMode.GetBackendDevice();
if (g_RenderingOptions.GetShadowAlphaFix())
{
DummyTexture = g_VideoMode.GetBackendDevice()->CreateTexture2D("ShadowMapDummy",
DummyTexture = backendDevice->CreateTexture2D("ShadowMapDummy",
Renderer::Backend::Format::R8G8B8A8, Width, Height,
Renderer::Backend::Sampler::MakeDefaultSampler(
Renderer::Backend::Sampler::Filter::NEAREST,
Renderer::Backend::Sampler::AddressMode::CLAMP_TO_EDGE));
}
Texture = g_VideoMode.GetBackendDevice()->CreateTexture2D("ShadowMapDepth",
Texture = backendDevice->CreateTexture2D("ShadowMapDepth",
backendFormat, Width, Height,
Renderer::Backend::Sampler::MakeDefaultSampler(
#if CONFIG2_GLES
@ -559,7 +561,7 @@ void ShadowMapInternals::CreateTexture()
ogl_WarnIfError();
Framebuffer = Renderer::Backend::GL::CFramebuffer::Create(
Framebuffer = backendDevice->CreateFramebuffer("ShadowMapFramebuffer",
g_RenderingOptions.GetShadowAlphaFix() ? DummyTexture.get() : nullptr, Texture.get());
if (!Framebuffer)

View File

@ -220,7 +220,7 @@ int WaterManager::LoadWaterTextures()
// Create the water framebuffers
m_ReflectionFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_ReflectionFramebuffer = backendDevice->CreateFramebuffer("ReflectionFramebuffer",
m_ReflectionTexture.get(), m_ReflFboDepthTexture.get(), CColor(0.5f, 0.5f, 1.0f, 0.0f));
if (!m_ReflectionFramebuffer)
{
@ -228,7 +228,7 @@ int WaterManager::LoadWaterTextures()
UpdateQuality();
}
m_RefractionFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_RefractionFramebuffer = backendDevice->CreateFramebuffer("RefractionFramebuffer",
m_RefractionTexture.get(), m_RefrFboDepthTexture.get(), CColor(1.0f, 0.0f, 0.0f, 0.0f));
if (!m_RefractionFramebuffer)
{
@ -236,7 +236,7 @@ int WaterManager::LoadWaterTextures()
UpdateQuality();
}
m_FancyEffectsFramebuffer = Renderer::Backend::GL::CFramebuffer::Create(
m_FancyEffectsFramebuffer = backendDevice->CreateFramebuffer("FancyEffectsFramebuffer",
m_FancyTexture.get(), m_FancyTextureDepth.get());
if (!m_FancyEffectsFramebuffer)
{

View File

@ -287,7 +287,7 @@ std::unique_ptr<CDevice> CDevice::Create(SDL_Window* window, const bool arb)
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
device->m_Backbuffer = CFramebuffer::CreateBackbuffer();
device->m_Backbuffer = CFramebuffer::CreateBackbuffer(device.get());
Capabilities& capabilities = device->m_Capabilities;
capabilities.ARBShaders = !ogl_HaveExtensions(0, "GL_ARB_vertex_program", "GL_ARB_fragment_program", nullptr);
@ -781,6 +781,20 @@ std::unique_ptr<CTexture> CDevice::CreateTexture2D(const char* name,
format, width, height, defaultSamplerDesc, MIPLevelCount, sampleCount);
}
std::unique_ptr<CFramebuffer> CDevice::CreateFramebuffer(
const char* name, CTexture* colorAttachment,
CTexture* depthStencilAttachment)
{
return CreateFramebuffer(name, colorAttachment, depthStencilAttachment, CColor(0.0f, 0.0f, 0.0f, 0.0f));
}
std::unique_ptr<CFramebuffer> CDevice::CreateFramebuffer(
const char* name, CTexture* colorAttachment,
CTexture* depthStencilAttachment, const CColor& clearColor)
{
return CFramebuffer::Create(this, name, colorAttachment, depthStencilAttachment, clearColor);
}
std::unique_ptr<CBuffer> CDevice::CreateBuffer(
const char* name, const CBuffer::Type type, const uint32_t size, const bool dynamic)
{

View File

@ -86,6 +86,14 @@ public:
const Format format, const uint32_t width, const uint32_t height,
const Sampler::Desc& defaultSamplerDesc, const uint32_t MIPLevelCount = 1, const uint32_t sampleCount = 1);
std::unique_ptr<CFramebuffer> CreateFramebuffer(
const char* name, CTexture* colorAttachment,
CTexture* depthStencilAttachment);
std::unique_ptr<CFramebuffer> CreateFramebuffer(
const char* name, CTexture* colorAttachment,
CTexture* depthStencilAttachment, const CColor& clearColor);
std::unique_ptr<CBuffer> CreateBuffer(
const char* name, const CBuffer::Type type, const uint32_t size, const bool dynamic);

View File

@ -37,19 +37,14 @@ namespace GL
// static
std::unique_ptr<CFramebuffer> CFramebuffer::Create(
CTexture* colorAttachment, CTexture* depthStencilAttachment)
{
return Create(colorAttachment, depthStencilAttachment, CColor(0.0f, 0.0f, 0.0f, 0.0f));
}
// static
std::unique_ptr<CFramebuffer> CFramebuffer::Create(
CDevice* device, const char* name,
CTexture* colorAttachment, CTexture* depthStencilAttachment,
const CColor& clearColor)
{
ENSURE(colorAttachment || depthStencilAttachment);
std::unique_ptr<CFramebuffer> framebuffer(new CFramebuffer());
framebuffer->m_Device = device;
framebuffer->m_ClearColor = clearColor;
glGenFramebuffersEXT(1, &framebuffer->m_Handle);
@ -126,6 +121,13 @@ std::unique_ptr<CFramebuffer> CFramebuffer::Create(
ogl_WarnIfError();
#if !CONFIG2_GLES
if (framebuffer->m_Device->GetCapabilities().debugLabels)
{
glObjectLabel(GL_FRAMEBUFFER, framebuffer->m_Handle, -1, name);
}
#endif
const GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
{
@ -142,10 +144,12 @@ std::unique_ptr<CFramebuffer> CFramebuffer::Create(
}
// static
std::unique_ptr<CFramebuffer> CFramebuffer::CreateBackbuffer()
std::unique_ptr<CFramebuffer> CFramebuffer::CreateBackbuffer(
CDevice* device)
{
// Backbuffer for GL is a special case with a zero framebuffer.
std::unique_ptr<CFramebuffer> framebuffer(new CFramebuffer());
framebuffer->m_Device = device;
framebuffer->m_AttachmentMask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;
CStr skyString = "0 0 0";
CFG_GET_VAL("skycolor", skyString);

View File

@ -39,11 +39,6 @@ class CDevice;
class CFramebuffer
{
public:
static std::unique_ptr<CFramebuffer> Create(
CTexture* colorAttachment, CTexture* depthStencilAttachment);
static std::unique_ptr<CFramebuffer> Create(
CTexture* colorAttachment, CTexture* depthStencilAttachment, const CColor& clearColor);
~CFramebuffer();
GLuint GetHandle() const { return m_Handle; }
@ -56,10 +51,14 @@ public:
private:
friend class CDevice;
static std::unique_ptr<CFramebuffer> CreateBackbuffer();
static std::unique_ptr<CFramebuffer> Create(
CDevice* device, const char* name,
CTexture* colorAttachment, CTexture* depthStencilAttachment, const CColor& clearColor);
static std::unique_ptr<CFramebuffer> CreateBackbuffer(CDevice* device);
CFramebuffer();
CDevice* m_Device = nullptr;
GLuint m_Handle = 0;
uint32_t m_Width = 0, m_Height = 0;
GLbitfield m_AttachmentMask = 0;