Adds debug labels to backend framebuffers.
This was SVN commit r26408.
This commit is contained in:
parent
b949f19875
commit
5eb21cbfbf
@ -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])
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user