mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-13 07:57:51 +00:00
Fix frame buffer binding bug that caused PP textures to end up with bad data
This commit is contained in:
parent
4482ad2b78
commit
fcee021753
2 changed files with 21 additions and 11 deletions
|
@ -282,6 +282,8 @@ void FGLRenderBuffers::CreateEyeBuffers(int eye)
|
||||||
PPTexture FGLRenderBuffers::Create2DTexture(const char *name, GLuint format, int width, int height, const void *data)
|
PPTexture FGLRenderBuffers::Create2DTexture(const char *name, GLuint format, int width, int height, const void *data)
|
||||||
{
|
{
|
||||||
PPTexture tex;
|
PPTexture tex;
|
||||||
|
tex.Width = width;
|
||||||
|
tex.Height = height;
|
||||||
glGenTextures(1, &tex.handle);
|
glGenTextures(1, &tex.handle);
|
||||||
glBindTexture(GL_TEXTURE_2D, tex.handle);
|
glBindTexture(GL_TEXTURE_2D, tex.handle);
|
||||||
FGLDebug::LabelObject(GL_TEXTURE, tex.handle, name);
|
FGLDebug::LabelObject(GL_TEXTURE, tex.handle, name);
|
||||||
|
@ -316,6 +318,8 @@ PPTexture FGLRenderBuffers::Create2DTexture(const char *name, GLuint format, int
|
||||||
PPTexture FGLRenderBuffers::Create2DMultisampleTexture(const char *name, GLuint format, int width, int height, int samples, bool fixedSampleLocations)
|
PPTexture FGLRenderBuffers::Create2DMultisampleTexture(const char *name, GLuint format, int width, int height, int samples, bool fixedSampleLocations)
|
||||||
{
|
{
|
||||||
PPTexture tex;
|
PPTexture tex;
|
||||||
|
tex.Width = width;
|
||||||
|
tex.Height = height;
|
||||||
glGenTextures(1, &tex.handle);
|
glGenTextures(1, &tex.handle);
|
||||||
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex.handle);
|
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, tex.handle);
|
||||||
FGLDebug::LabelObject(GL_TEXTURE, tex.handle, name);
|
FGLDebug::LabelObject(GL_TEXTURE, tex.handle, name);
|
||||||
|
@ -752,6 +756,8 @@ bool FGLRenderBuffers::FailedCreate = false;
|
||||||
|
|
||||||
void FGLRenderBuffers::UpdateEffectTextures()
|
void FGLRenderBuffers::UpdateEffectTextures()
|
||||||
{
|
{
|
||||||
|
FGLPostProcessState savedState;
|
||||||
|
|
||||||
TMap<FString, PPTextureDesc>::Iterator it(hw_postprocess.Textures);
|
TMap<FString, PPTextureDesc>::Iterator it(hw_postprocess.Textures);
|
||||||
TMap<FString, PPTextureDesc>::Pair *pair;
|
TMap<FString, PPTextureDesc>::Pair *pair;
|
||||||
while (it.NextPair(pair))
|
while (it.NextPair(pair))
|
||||||
|
@ -772,23 +778,24 @@ void FGLRenderBuffers::UpdateEffectTextures()
|
||||||
|
|
||||||
if (gltexture && (gltexture.Width != pair->Value.Width || gltexture.Height != pair->Value.Height))
|
if (gltexture && (gltexture.Width != pair->Value.Width || gltexture.Height != pair->Value.Height))
|
||||||
{
|
{
|
||||||
glDeleteTextures(1, &gltexture.handle);
|
if (gltexture.handle != 0)
|
||||||
glDeleteFramebuffers(1, &glframebuffer.handle);
|
{
|
||||||
gltexture.handle = 0;
|
glDeleteTextures(1, &gltexture.handle);
|
||||||
glframebuffer.handle = 0;
|
gltexture.handle = 0;
|
||||||
|
}
|
||||||
|
if (glframebuffer.handle != 0)
|
||||||
|
{
|
||||||
|
glDeleteFramebuffers(1, &glframebuffer.handle);
|
||||||
|
glframebuffer.handle = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gltexture)
|
if (!gltexture)
|
||||||
{
|
{
|
||||||
FGLPostProcessState savedState;
|
|
||||||
|
|
||||||
if (pair->Value.Data)
|
if (pair->Value.Data)
|
||||||
gltexture = Create2DTexture(pair->Key.GetChars(), glformat, pair->Value.Width, pair->Value.Height, pair->Value.Data.get());
|
gltexture = Create2DTexture(pair->Key.GetChars(), glformat, pair->Value.Width, pair->Value.Height, pair->Value.Data.get());
|
||||||
else
|
else
|
||||||
gltexture = Create2DTexture(pair->Key.GetChars(), glformat, pair->Value.Width, pair->Value.Height);
|
gltexture = Create2DTexture(pair->Key.GetChars(), glformat, pair->Value.Width, pair->Value.Height);
|
||||||
gltexture.Width = pair->Value.Width;
|
|
||||||
gltexture.Height = pair->Value.Height;
|
|
||||||
glframebuffer = CreateFrameBuffer(pair->Key.GetChars(), gltexture);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -900,7 +907,10 @@ void FGLRenderBuffers::RenderEffect(const FString &name)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PPTextureType::PPTexture:
|
case PPTextureType::PPTexture:
|
||||||
GLTextureFBs[step.Output.Texture].Bind();
|
if (GLTextureFBs[step.Output.Texture])
|
||||||
|
GLTextureFBs[step.Output.Texture].Bind();
|
||||||
|
else
|
||||||
|
GLTextureFBs[step.Output.Texture] = CreateFrameBuffer(step.Output.Texture.GetChars(), GLTextures[step.Output.Texture]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PPTextureType::SceneColor:
|
case PPTextureType::SceneColor:
|
||||||
|
|
|
@ -442,7 +442,7 @@ void PPCameraExposure::UpdateTextures()
|
||||||
|
|
||||||
void PPCameraExposure::UpdateSteps()
|
void PPCameraExposure::UpdateSteps()
|
||||||
{
|
{
|
||||||
if (!gl_bloom && gl_tonemap == 0)
|
if (!gl_bloom)
|
||||||
{
|
{
|
||||||
hw_postprocess.Effects["UpdateCameraExposure"] = {};
|
hw_postprocess.Effects["UpdateCameraExposure"] = {};
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue