Add support for GL_EXT_discard_framebuffer extension

This commit is contained in:
Janos Pantos
2017-07-13 18:22:36 +02:00
committed by Baldur Karlsson
parent 94efd7bf0c
commit a8840c6728
5 changed files with 38 additions and 2 deletions
+1
View File
@@ -736,6 +736,7 @@ void WrappedOpenGL::BuildGLESExtensions()
m_GLESExtensions.push_back("GL_EXT_copy_image");
m_GLESExtensions.push_back("GL_EXT_debug_label");
m_GLESExtensions.push_back("GL_EXT_debug_marker");
m_GLESExtensions.push_back("GL_EXT_discard_framebuffer");
m_GLESExtensions.push_back("GL_EXT_disjoint_timer_query");
m_GLESExtensions.push_back("GL_EXT_draw_buffers");
m_GLESExtensions.push_back("GL_EXT_draw_buffers_indexed");
+3
View File
@@ -1056,6 +1056,9 @@ public:
GLint yoffset, GLint zoffset, GLsizei width,
GLsizei height, GLsizei depth));
IMPLEMENT_FUNCTION_SERIALISED(void, glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
const GLenum *attachments));
enum AttribType
{
Attrib_GLdouble = 0x01,
+3
View File
@@ -609,6 +609,9 @@ struct GLHookSet
// GLES: EXT_multisampled_render_to_texture
PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glFramebufferTexture2DMultisampleEXT;
// GLES: EXT_discard_framebuffer
PFNGLDISCARDFRAMEBUFFEREXTPROC glDiscardFramebufferEXT;
// ARB_shading_language_include
PFNGLNAMEDSTRINGARBPROC glNamedStringARB;
PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB;
+2 -2
View File
@@ -1159,6 +1159,7 @@
HookExtension(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox); \
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxEXT); \
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXOESPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxOES); \
HookExtension(PFNGLDISCARDFRAMEBUFFEREXTPROC, glDiscardFramebufferEXT); \
HookExtension(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC, glFramebufferTexture2DMultisampleEXT); \
HookExtension(PFNWGLDXSETRESOURCESHAREHANDLENVPROC, wglDXSetResourceShareHandleNV); \
HookExtension(PFNWGLDXOPENDEVICENVPROC, wglDXOpenDeviceNV); \
@@ -2013,6 +2014,7 @@
HookWrapper0(void, glFrameTerminatorGREMEDY); \
HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \
HookWrapper8(void, glPrimitiveBoundingBox, GLfloat, minX, GLfloat, minY, GLfloat, minZ, GLfloat, minW, GLfloat, maxX, GLfloat, maxY, GLfloat, maxZ, GLfloat, maxW); \
HookWrapper3(void, glDiscardFramebufferEXT, GLenum, target, GLsizei, numAttachments, const GLenum *, attachments); \
HookWrapper6(void, glFramebufferTexture2DMultisampleEXT, GLenum, target, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level, GLsizei, samples); \
HookWrapper2(BOOL, wglDXSetResourceShareHandleNV, void *, dxObject, HANDLE, shareHandle); \
HookWrapper1(HANDLE, wglDXOpenDeviceNV, void *, dxDevice); \
@@ -3612,7 +3614,6 @@
HookWrapper4(void, glbufferstorageext, GLenum, target, GLsizeiptr, size, const void *, data, GLbitfield, flags); \
HookWrapper5(void, glclearteximageext, GLuint, texture, GLint, level, GLenum, format, GLenum, type, const void *, data); \
HookWrapper11(void, glcleartexsubimageext, GLuint, texture, GLint, level, GLint, xoffset, GLint, yoffset, GLint, zoffset, GLsizei, width, GLsizei, height, GLsizei, depth, GLenum, format, GLenum, type, const void *, data); \
HookWrapper3(void, gldiscardframebufferext, GLenum, target, GLsizei, numAttachments, const GLenum *, attachments); \
HookWrapper2(void, gldrawtransformfeedbackext, GLenum, mode, GLuint, id); \
HookWrapper3(void, gldrawtransformfeedbackinstancedext, GLenum, mode, GLuint, id, GLsizei, instancecount); \
HookWrapper2(void, glvertexattribdivisorext, GLuint, index, GLuint, divisor); \
@@ -5578,7 +5579,6 @@
HandleUnsupported(PFNGLBUFFERSTORAGEEXTPROC, glbufferstorageext); \
HandleUnsupported(PFNGLCLEARTEXIMAGEEXTPROC, glclearteximageext); \
HandleUnsupported(PFNGLCLEARTEXSUBIMAGEEXTPROC, glcleartexsubimageext); \
HandleUnsupported(PFNGLDISCARDFRAMEBUFFEREXTPROC, gldiscardframebufferext); \
HandleUnsupported(PFNGLDRAWTRANSFORMFEEDBACKEXTPROC, gldrawtransformfeedbackext); \
HandleUnsupported(PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC, gldrawtransformfeedbackinstancedext); \
HandleUnsupported(PFNGLVERTEXATTRIBDIVISOREXTPROC, glvertexattribdivisorext); \
@@ -1473,6 +1473,35 @@ void WrappedOpenGL::glInvalidateFramebuffer(GLenum target, GLsizei numAttachment
}
}
// note: glDiscardFramebufferEXT looks the same as glInvalidateFramebuffer. Could this be a plain
// alias?
void WrappedOpenGL::glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
const GLenum *attachments)
{
m_Real.glDiscardFramebufferEXT(target, numAttachments, attachments);
if(m_State == WRITING_IDLE)
{
GLResourceRecord *record = NULL;
if(target == eGL_DRAW_FRAMEBUFFER || target == eGL_FRAMEBUFFER)
{
if(GetCtxData().m_DrawFramebufferRecord)
record = GetCtxData().m_DrawFramebufferRecord;
}
else
{
if(GetCtxData().m_ReadFramebufferRecord)
record = GetCtxData().m_ReadFramebufferRecord;
}
if(record)
{
record->MarkParentsDirty(GetResourceManager());
}
}
}
void WrappedOpenGL::glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments,
const GLenum *attachments)
{