mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
Explicitly disable color FBO attachments where possible for depth/stencil canvases. Potentially fixes issue #1470
This commit is contained in:
@@ -41,6 +41,17 @@ static GLenum createFBO(GLuint &framebuffer, TextureType texType, PixelFormat fo
|
|||||||
|
|
||||||
if (texture != 0)
|
if (texture != 0)
|
||||||
{
|
{
|
||||||
|
if (isPixelFormatDepthStencil(format) && (GLAD_ES_VERSION_3_0 || !GLAD_ES_VERSION_2_0))
|
||||||
|
{
|
||||||
|
// glDrawBuffers is an ext in GL2. glDrawBuffer doesn't exist in ES3.
|
||||||
|
GLenum none = GL_NONE;
|
||||||
|
if (GLAD_ES_VERSION_3_0)
|
||||||
|
glDrawBuffers(1, &none);
|
||||||
|
else
|
||||||
|
glDrawBuffer(GL_NONE);
|
||||||
|
glReadBuffer(GL_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
bool unusedSRGB = false;
|
bool unusedSRGB = false;
|
||||||
OpenGL::TextureFormat fmt = OpenGL::convertPixelFormat(format, false, unusedSRGB);
|
OpenGL::TextureFormat fmt = OpenGL::convertPixelFormat(format, false, unusedSRGB);
|
||||||
|
|
||||||
@@ -109,6 +120,17 @@ static bool createRenderbuffer(int width, int height, int &samples, PixelFormat
|
|||||||
glGenFramebuffers(1, &fbo);
|
glGenFramebuffers(1, &fbo);
|
||||||
gl.bindFramebuffer(OpenGL::FRAMEBUFFER_ALL, fbo);
|
gl.bindFramebuffer(OpenGL::FRAMEBUFFER_ALL, fbo);
|
||||||
|
|
||||||
|
if (isPixelFormatDepthStencil(pixelformat) && (GLAD_ES_VERSION_3_0 || !GLAD_ES_VERSION_2_0))
|
||||||
|
{
|
||||||
|
// glDrawBuffers is an ext in GL2. glDrawBuffer doesn't exist in ES3.
|
||||||
|
GLenum none = GL_NONE;
|
||||||
|
if (GLAD_ES_VERSION_3_0)
|
||||||
|
glDrawBuffers(1, &none);
|
||||||
|
else
|
||||||
|
glDrawBuffer(GL_NONE);
|
||||||
|
glReadBuffer(GL_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
glGenRenderbuffers(1, &buffer);
|
glGenRenderbuffers(1, &buffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, buffer);
|
glBindRenderbuffer(GL_RENDERBUFFER, buffer);
|
||||||
|
|
||||||
|
|||||||
@@ -821,6 +821,7 @@ void Graphics::bindCachedFBO(const RenderTargets &targets)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int msaa = targets.getFirstTarget().canvas->getMSAA();
|
int msaa = targets.getFirstTarget().canvas->getMSAA();
|
||||||
|
bool hasDS = targets.depthStencil.canvas != nullptr;
|
||||||
|
|
||||||
glGenFramebuffers(1, &fbo);
|
glGenFramebuffers(1, &fbo);
|
||||||
gl.bindFramebuffer(OpenGL::FRAMEBUFFER_ALL, fbo);
|
gl.bindFramebuffer(OpenGL::FRAMEBUFFER_ALL, fbo);
|
||||||
@@ -865,11 +866,21 @@ void Graphics::bindCachedFBO(const RenderTargets &targets)
|
|||||||
for (const auto &rt : targets.colors)
|
for (const auto &rt : targets.colors)
|
||||||
attachCanvas(rt);
|
attachCanvas(rt);
|
||||||
|
|
||||||
if (targets.depthStencil.canvas != nullptr)
|
if (hasDS)
|
||||||
attachCanvas(targets.depthStencil);
|
attachCanvas(targets.depthStencil);
|
||||||
|
|
||||||
if (ncolortargets > 1)
|
if (ncolortargets > 1)
|
||||||
glDrawBuffers(ncolortargets, drawbuffers);
|
glDrawBuffers(ncolortargets, drawbuffers);
|
||||||
|
else if (ncolortargets == 0 && hasDS && (GLAD_ES_VERSION_3_0 || !GLAD_ES_VERSION_2_0))
|
||||||
|
{
|
||||||
|
// glDrawBuffers is an ext in GL2. glDrawBuffer doesn't exist in ES3.
|
||||||
|
GLenum none = GL_NONE;
|
||||||
|
if (GLAD_ES_VERSION_3_0)
|
||||||
|
glDrawBuffers(1, &none);
|
||||||
|
else
|
||||||
|
glDrawBuffer(GL_NONE);
|
||||||
|
glReadBuffer(GL_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user