mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 04:50:35 +00:00
gles multi-view support
This commit is contained in:
committed by
Baldur Karlsson
parent
8476be2300
commit
310ada841a
@@ -665,6 +665,8 @@ enum GLChunkType
|
|||||||
FRAMEBUFFER_TEX3D,
|
FRAMEBUFFER_TEX3D,
|
||||||
FRAMEBUFFER_RENDBUF,
|
FRAMEBUFFER_RENDBUF,
|
||||||
FRAMEBUFFER_TEXLAYER,
|
FRAMEBUFFER_TEXLAYER,
|
||||||
|
FRAMEBUFFER_MULTIVIEW,
|
||||||
|
FRAMEBUFFER_MULTIVIEWMS,
|
||||||
FRAMEBUFFER_PARAM,
|
FRAMEBUFFER_PARAM,
|
||||||
READ_BUFFER,
|
READ_BUFFER,
|
||||||
BIND_FRAMEBUFFER,
|
BIND_FRAMEBUFFER,
|
||||||
|
|||||||
@@ -252,6 +252,8 @@ const char *GLChunkNames[] = {
|
|||||||
"glFramebufferTexture3D",
|
"glFramebufferTexture3D",
|
||||||
"glFramebufferRenderbuffer",
|
"glFramebufferRenderbuffer",
|
||||||
"glFramebufferTextureLayer",
|
"glFramebufferTextureLayer",
|
||||||
|
"glFramebufferTextureMultiviewOVR",
|
||||||
|
"glFramebufferTextureMultisampleMultiviewOVR",
|
||||||
"glFramebufferParameteri",
|
"glFramebufferParameteri",
|
||||||
"glReadBuffer",
|
"glReadBuffer",
|
||||||
"glBindFramebuffer",
|
"glBindFramebuffer",
|
||||||
@@ -815,6 +817,9 @@ void WrappedOpenGL::BuildGLESExtensions()
|
|||||||
m_GLESExtensions.push_back("GL_OES_texture_storage_multisample_2d_array");
|
m_GLESExtensions.push_back("GL_OES_texture_storage_multisample_2d_array");
|
||||||
m_GLESExtensions.push_back("GL_OES_vertex_array_object");
|
m_GLESExtensions.push_back("GL_OES_vertex_array_object");
|
||||||
m_GLESExtensions.push_back("GL_OES_vertex_half_float");
|
m_GLESExtensions.push_back("GL_OES_vertex_half_float");
|
||||||
|
m_GLESExtensions.push_back("GL_OVR_multiview");
|
||||||
|
m_GLESExtensions.push_back("GL_OVR_multiview2");
|
||||||
|
m_GLESExtensions.push_back("GL_OVR_multiview_multisampled_render_to_texture");
|
||||||
|
|
||||||
// advertise EGL extensions in the gl ext string, just in case anyone is checking it for
|
// advertise EGL extensions in the gl ext string, just in case anyone is checking it for
|
||||||
// this way.
|
// this way.
|
||||||
@@ -2562,7 +2567,7 @@ void WrappedOpenGL::CreateVRAPITextureSwapChain(GLuint tex, GLenum textureType,
|
|||||||
|
|
||||||
if(textureType == eGL_TEXTURE_2D_ARRAY)
|
if(textureType == eGL_TEXTURE_2D_ARRAY)
|
||||||
{
|
{
|
||||||
Common_glTextureImage3DEXT(id, eGL_TEXTURE_2D, 0, internalformat, width, height, 2, 0, eGL_RGBA,
|
Common_glTextureImage3DEXT(id, eGL_TEXTURE_2D_ARRAY, 0, internalformat, width, height, 2, 0, eGL_RGBA,
|
||||||
eGL_UNSIGNED_BYTE, NULL);
|
eGL_UNSIGNED_BYTE, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -3765,6 +3770,12 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
|||||||
case FRAMEBUFFER_TEXLAYER:
|
case FRAMEBUFFER_TEXLAYER:
|
||||||
Serialise_glNamedFramebufferTextureLayerEXT(0, eGL_NONE, 0, 0, 0);
|
Serialise_glNamedFramebufferTextureLayerEXT(0, eGL_NONE, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
case FRAMEBUFFER_MULTIVIEW:
|
||||||
|
Serialise_glFramebufferTextureMultiviewOVR(eGL_NONE, eGL_NONE, 0, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case FRAMEBUFFER_MULTIVIEWMS:
|
||||||
|
Serialise_glFramebufferTextureMultisampleMultiviewOVR(eGL_NONE, eGL_NONE, 0, 0, 0, 0, 0);
|
||||||
|
break;
|
||||||
case FRAMEBUFFER_PARAM: Serialise_glNamedFramebufferParameteriEXT(0, eGL_NONE, 0); break;
|
case FRAMEBUFFER_PARAM: Serialise_glNamedFramebufferParameteriEXT(0, eGL_NONE, 0); break;
|
||||||
case READ_BUFFER: Serialise_glFramebufferReadBufferEXT(0, eGL_NONE); break;
|
case READ_BUFFER: Serialise_glFramebufferReadBufferEXT(0, eGL_NONE); break;
|
||||||
case BIND_FRAMEBUFFER: Serialise_glBindFramebuffer(eGL_NONE, 0); break;
|
case BIND_FRAMEBUFFER: Serialise_glBindFramebuffer(eGL_NONE, 0); break;
|
||||||
|
|||||||
@@ -780,6 +780,16 @@ public:
|
|||||||
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferTextureLayer(GLenum target, GLenum attachment,
|
IMPLEMENT_FUNCTION_SERIALISED(void, glFramebufferTextureLayer(GLenum target, GLenum attachment,
|
||||||
GLuint texture, GLint level,
|
GLuint texture, GLint level,
|
||||||
GLint layer));
|
GLint layer));
|
||||||
|
|
||||||
|
IMPLEMENT_FUNCTION_SERIALISED(
|
||||||
|
void, glFramebufferTextureMultiviewOVR(GLenum target, GLenum attachment, GLuint texture,
|
||||||
|
GLint level, GLint baseViewIndex, GLsizei numViews));
|
||||||
|
|
||||||
|
IMPLEMENT_FUNCTION_SERIALISED(
|
||||||
|
void, glFramebufferTextureMultisampleMultiviewOVR(GLenum target, GLenum attachment,
|
||||||
|
GLuint texture, GLint level, GLsizei samples,
|
||||||
|
GLint baseViewIndex, GLsizei numViews));
|
||||||
|
|
||||||
IMPLEMENT_FUNCTION_SERIALISED(void,
|
IMPLEMENT_FUNCTION_SERIALISED(void,
|
||||||
glFramebufferParameteri(GLenum target, GLenum pname, GLint param));
|
glFramebufferParameteri(GLenum target, GLenum pname, GLint param));
|
||||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers));
|
IMPLEMENT_FUNCTION_SERIALISED(void, glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers));
|
||||||
|
|||||||
@@ -648,6 +648,12 @@ struct GLHookSet
|
|||||||
// GREMEDY_string_marker
|
// GREMEDY_string_marker
|
||||||
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY;
|
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY;
|
||||||
|
|
||||||
|
// OVR_multiview
|
||||||
|
PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glFramebufferTextureMultiviewOVR;
|
||||||
|
|
||||||
|
// OVR_multiview_multisampled_render_to_texture
|
||||||
|
PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC glFramebufferTextureMultisampleMultiviewOVR;
|
||||||
|
|
||||||
// EXT_direct_state_access below here. We only include the functions relevant for core 3.2+ GL,
|
// EXT_direct_state_access below here. We only include the functions relevant for core 3.2+ GL,
|
||||||
// not any
|
// not any
|
||||||
// functions for legacy functionality.
|
// functions for legacy functionality.
|
||||||
|
|||||||
@@ -1156,12 +1156,14 @@
|
|||||||
HookExtension(PFNGLRASTERSAMPLESEXTPROC, glRasterSamplesEXT); \
|
HookExtension(PFNGLRASTERSAMPLESEXTPROC, glRasterSamplesEXT); \
|
||||||
HookExtension(PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTerminatorGREMEDY); \
|
HookExtension(PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTerminatorGREMEDY); \
|
||||||
HookExtension(PFNGLSTRINGMARKERGREMEDYPROC, glStringMarkerGREMEDY); \
|
HookExtension(PFNGLSTRINGMARKERGREMEDYPROC, glStringMarkerGREMEDY); \
|
||||||
|
HookExtension(PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC, glFramebufferTextureMultiviewOVR); \
|
||||||
HookExtension(PFNGLBLENDBARRIERPROC, glBlendBarrier); \
|
HookExtension(PFNGLBLENDBARRIERPROC, glBlendBarrier); \
|
||||||
HookExtension(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox); \
|
HookExtension(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox); \
|
||||||
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxEXT); \
|
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxEXT); \
|
||||||
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxOES); \
|
HookExtensionAlias(PFNGLPRIMITIVEBOUNDINGBOXPROC, glPrimitiveBoundingBox, glPrimitiveBoundingBoxOES); \
|
||||||
HookExtension(PFNGLDISCARDFRAMEBUFFEREXTPROC, glDiscardFramebufferEXT); \
|
HookExtension(PFNGLDISCARDFRAMEBUFFEREXTPROC, glDiscardFramebufferEXT); \
|
||||||
HookExtension(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC, glFramebufferTexture2DMultisampleEXT); \
|
HookExtension(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC, glFramebufferTexture2DMultisampleEXT); \
|
||||||
|
HookExtension(PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC, glFramebufferTextureMultisampleMultiviewOVR); \
|
||||||
HookExtension(PFNWGLDXSETRESOURCESHAREHANDLENVPROC, wglDXSetResourceShareHandleNV); \
|
HookExtension(PFNWGLDXSETRESOURCESHAREHANDLENVPROC, wglDXSetResourceShareHandleNV); \
|
||||||
HookExtension(PFNWGLDXOPENDEVICENVPROC, wglDXOpenDeviceNV); \
|
HookExtension(PFNWGLDXOPENDEVICENVPROC, wglDXOpenDeviceNV); \
|
||||||
HookExtension(PFNWGLDXCLOSEDEVICENVPROC, wglDXCloseDeviceNV); \
|
HookExtension(PFNWGLDXCLOSEDEVICENVPROC, wglDXCloseDeviceNV); \
|
||||||
@@ -2014,10 +2016,12 @@
|
|||||||
HookWrapper2(void, glRasterSamplesEXT, GLuint, samples, GLboolean, fixedsamplelocations); \
|
HookWrapper2(void, glRasterSamplesEXT, GLuint, samples, GLboolean, fixedsamplelocations); \
|
||||||
HookWrapper0(void, glFrameTerminatorGREMEDY); \
|
HookWrapper0(void, glFrameTerminatorGREMEDY); \
|
||||||
HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \
|
HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \
|
||||||
|
HookWrapper6(void, glFramebufferTextureMultiviewOVR, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLint, baseViewIndex, GLsizei, numViews); \
|
||||||
HookWrapper0(void, glBlendBarrier); \
|
HookWrapper0(void, glBlendBarrier); \
|
||||||
HookWrapper8(void, glPrimitiveBoundingBox, GLfloat, minX, GLfloat, minY, GLfloat, minZ, GLfloat, minW, GLfloat, maxX, GLfloat, maxY, GLfloat, maxZ, GLfloat, maxW); \
|
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); \
|
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); \
|
HookWrapper6(void, glFramebufferTexture2DMultisampleEXT, GLenum, target, GLenum, attachment, GLenum, textarget, GLuint, texture, GLint, level, GLsizei, samples); \
|
||||||
|
HookWrapper7(void, glFramebufferTextureMultisampleMultiviewOVR, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLsizei, samples, GLint, baseViewIndex, GLsizei, numViews); \
|
||||||
HookWrapper2(BOOL, wglDXSetResourceShareHandleNV, void *, dxObject, HANDLE, shareHandle); \
|
HookWrapper2(BOOL, wglDXSetResourceShareHandleNV, void *, dxObject, HANDLE, shareHandle); \
|
||||||
HookWrapper1(HANDLE, wglDXOpenDeviceNV, void *, dxDevice); \
|
HookWrapper1(HANDLE, wglDXOpenDeviceNV, void *, dxDevice); \
|
||||||
HookWrapper1(BOOL, wglDXCloseDeviceNV, HANDLE, hDevice); \
|
HookWrapper1(BOOL, wglDXCloseDeviceNV, HANDLE, hDevice); \
|
||||||
@@ -3428,7 +3432,6 @@
|
|||||||
HookWrapper4(void, glvideocapturestreamparameterivnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLint *, params); \
|
HookWrapper4(void, glvideocapturestreamparameterivnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLint *, params); \
|
||||||
HookWrapper4(void, glvideocapturestreamparameterfvnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLfloat *, params); \
|
HookWrapper4(void, glvideocapturestreamparameterfvnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLfloat *, params); \
|
||||||
HookWrapper4(void, glvideocapturestreamparameterdvnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLdouble *, params); \
|
HookWrapper4(void, glvideocapturestreamparameterdvnv, GLuint, video_capture_slot, GLuint, stream, GLenum, pname, const GLdouble *, params); \
|
||||||
HookWrapper6(void, glframebuffertexturemultiviewovr, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLint, baseViewIndex, GLsizei, numViews); \
|
|
||||||
HookWrapper2(void, glhintpgi, GLenum, target, GLint, mode); \
|
HookWrapper2(void, glhintpgi, GLenum, target, GLint, mode); \
|
||||||
HookWrapper3(void, gldetailtexfuncsgis, GLenum, target, GLsizei, n, const GLfloat *, points); \
|
HookWrapper3(void, gldetailtexfuncsgis, GLenum, target, GLsizei, n, const GLfloat *, points); \
|
||||||
HookWrapper2(void, glgetdetailtexfuncsgis, GLenum, target, GLfloat *, points); \
|
HookWrapper2(void, glgetdetailtexfuncsgis, GLenum, target, GLfloat *, points); \
|
||||||
@@ -3695,7 +3698,6 @@
|
|||||||
HookWrapper2(void, gldisableinv, GLenum, target, GLuint, index); \
|
HookWrapper2(void, gldisableinv, GLenum, target, GLuint, index); \
|
||||||
HookWrapper2(GLboolean, glisenabledinv, GLenum, target, GLuint, index); \
|
HookWrapper2(GLboolean, glisenabledinv, GLenum, target, GLuint, index); \
|
||||||
HookWrapper5(void, glviewportswizzlenv, GLuint, index, GLenum, swizzlex, GLenum, swizzley, GLenum, swizzlez, GLenum, swizzlew); \
|
HookWrapper5(void, glviewportswizzlenv, GLuint, index, GLenum, swizzlex, GLenum, swizzley, GLenum, swizzlez, GLenum, swizzlew); \
|
||||||
HookWrapper7(void, glframebuffertexturemultisamplemultiviewovr, GLenum, target, GLenum, attachment, GLuint, texture, GLint, level, GLsizei, samples, GLint, baseViewIndex, GLsizei, numViews); \
|
|
||||||
HookWrapper2(void, glalphafuncqcom, GLenum, func, GLclampf, ref); \
|
HookWrapper2(void, glalphafuncqcom, GLenum, func, GLclampf, ref); \
|
||||||
HookWrapper3(void, glgetdrivercontrolsqcom, GLint *, num, GLsizei, size, GLuint *, driverControls); \
|
HookWrapper3(void, glgetdrivercontrolsqcom, GLint *, num, GLsizei, size, GLuint *, driverControls); \
|
||||||
HookWrapper4(void, glgetdrivercontrolstringqcom, GLuint, driverControl, GLsizei, bufSize, GLsizei *, length, GLchar *, driverControlString); \
|
HookWrapper4(void, glgetdrivercontrolstringqcom, GLuint, driverControl, GLsizei, bufSize, GLsizei *, length, GLchar *, driverControlString); \
|
||||||
@@ -5393,7 +5395,6 @@
|
|||||||
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC, glvideocapturestreamparameterivnv); \
|
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC, glvideocapturestreamparameterivnv); \
|
||||||
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC, glvideocapturestreamparameterfvnv); \
|
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC, glvideocapturestreamparameterfvnv); \
|
||||||
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC, glvideocapturestreamparameterdvnv); \
|
HandleUnsupported(PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC, glvideocapturestreamparameterdvnv); \
|
||||||
HandleUnsupported(PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC, glframebuffertexturemultiviewovr); \
|
|
||||||
HandleUnsupported(PFNGLHINTPGIPROC, glhintpgi); \
|
HandleUnsupported(PFNGLHINTPGIPROC, glhintpgi); \
|
||||||
HandleUnsupported(PFNGLDETAILTEXFUNCSGISPROC, gldetailtexfuncsgis); \
|
HandleUnsupported(PFNGLDETAILTEXFUNCSGISPROC, gldetailtexfuncsgis); \
|
||||||
HandleUnsupported(PFNGLGETDETAILTEXFUNCSGISPROC, glgetdetailtexfuncsgis); \
|
HandleUnsupported(PFNGLGETDETAILTEXFUNCSGISPROC, glgetdetailtexfuncsgis); \
|
||||||
@@ -5660,7 +5661,6 @@
|
|||||||
HandleUnsupported(PFNGLDISABLEINVPROC, gldisableinv); \
|
HandleUnsupported(PFNGLDISABLEINVPROC, gldisableinv); \
|
||||||
HandleUnsupported(PFNGLISENABLEDINVPROC, glisenabledinv); \
|
HandleUnsupported(PFNGLISENABLEDINVPROC, glisenabledinv); \
|
||||||
HandleUnsupported(PFNGLVIEWPORTSWIZZLENVPROC, glviewportswizzlenv); \
|
HandleUnsupported(PFNGLVIEWPORTSWIZZLENVPROC, glviewportswizzlenv); \
|
||||||
HandleUnsupported(PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC, glframebuffertexturemultisamplemultiviewovr); \
|
|
||||||
HandleUnsupported(PFNGLALPHAFUNCQCOMPROC, glalphafuncqcom); \
|
HandleUnsupported(PFNGLALPHAFUNCQCOMPROC, glalphafuncqcom); \
|
||||||
HandleUnsupported(PFNGLGETDRIVERCONTROLSQCOMPROC, glgetdrivercontrolsqcom); \
|
HandleUnsupported(PFNGLGETDRIVERCONTROLSQCOMPROC, glgetdrivercontrolsqcom); \
|
||||||
HandleUnsupported(PFNGLGETDRIVERCONTROLSTRINGQCOMPROC, glgetdrivercontrolstringqcom); \
|
HandleUnsupported(PFNGLGETDRIVERCONTROLSTRINGQCOMPROC, glgetdrivercontrolstringqcom); \
|
||||||
|
|||||||
@@ -1100,6 +1100,201 @@ void WrappedOpenGL::glFramebufferTextureLayer(GLenum target, GLenum attachment,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WrappedOpenGL::Serialise_glFramebufferTextureMultiviewOVR(GLenum target, GLenum attachment,
|
||||||
|
GLuint texture, GLint level,
|
||||||
|
GLint baseViewIndex, GLsizei numViews)
|
||||||
|
{
|
||||||
|
SERIALISE_ELEMENT(GLenum, Target, target);
|
||||||
|
SERIALISE_ELEMENT(GLenum, Attach, attachment);
|
||||||
|
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(TextureRes(GetCtx(), texture)));
|
||||||
|
SERIALISE_ELEMENT(int32_t, Level, level);
|
||||||
|
SERIALISE_ELEMENT(int32_t, BaseViewIndex, baseViewIndex);
|
||||||
|
SERIALISE_ELEMENT(uint32_t, NumViews, numViews);
|
||||||
|
|
||||||
|
if(m_State < WRITING)
|
||||||
|
{
|
||||||
|
GLuint tex = (id == ResourceId() || !GetResourceManager()->HasLiveResource(id))
|
||||||
|
? 0
|
||||||
|
: GetResourceManager()->GetLiveResource(id).name;
|
||||||
|
|
||||||
|
m_Real.glFramebufferTextureMultiviewOVR(Target, Attach, tex, Level, BaseViewIndex, NumViews);
|
||||||
|
|
||||||
|
if(m_State == READING && tex)
|
||||||
|
{
|
||||||
|
if(Attach == eGL_DEPTH_ATTACHMENT || Attach == eGL_DEPTH_STENCIL_ATTACHMENT)
|
||||||
|
m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= TextureCategory::DepthTarget;
|
||||||
|
else
|
||||||
|
m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= TextureCategory::ColorTarget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WrappedOpenGL::glFramebufferTextureMultiviewOVR(GLenum target, GLenum attachment,
|
||||||
|
GLuint texture, GLint level,
|
||||||
|
GLint baseViewIndex, GLsizei numViews)
|
||||||
|
{
|
||||||
|
m_Real.glFramebufferTextureMultiviewOVR(target, attachment, texture, level, baseViewIndex,
|
||||||
|
numViews);
|
||||||
|
|
||||||
|
if(m_State >= WRITING)
|
||||||
|
{
|
||||||
|
GLResourceRecord *record = m_DeviceRecord;
|
||||||
|
|
||||||
|
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(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||||
|
{
|
||||||
|
ResourceRecord *texrecord =
|
||||||
|
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
|
||||||
|
if(m_State == WRITING_IDLE)
|
||||||
|
GetResourceManager()->MarkDirtyResource(texrecord->GetResourceID());
|
||||||
|
else
|
||||||
|
m_MissingTracks.insert(texrecord->GetResourceID());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_HighTrafficResources.find(record->GetResourceID()) != m_HighTrafficResources.end() &&
|
||||||
|
m_State != WRITING_CAPFRAME)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SCOPED_SERIALISE_CONTEXT(FRAMEBUFFER_MULTIVIEW);
|
||||||
|
Serialise_glFramebufferTextureMultiviewOVR(target, attachment, texture, level, baseViewIndex,
|
||||||
|
numViews);
|
||||||
|
|
||||||
|
if(m_State == WRITING_IDLE)
|
||||||
|
{
|
||||||
|
record->AddChunk(scope.Get());
|
||||||
|
|
||||||
|
if(record != m_DeviceRecord)
|
||||||
|
{
|
||||||
|
record->UpdateCount++;
|
||||||
|
|
||||||
|
if(record->UpdateCount > 10)
|
||||||
|
{
|
||||||
|
m_HighTrafficResources.insert(record->GetResourceID());
|
||||||
|
GetResourceManager()->MarkDirtyResource(record->GetResourceID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_ContextRecord->AddChunk(scope.Get());
|
||||||
|
GetResourceManager()->MarkFBOReferenced(record->Resource, eFrameRef_ReadBeforeWrite);
|
||||||
|
GetResourceManager()->MarkResourceFrameReferenced(TextureRes(GetCtx(), texture),
|
||||||
|
eFrameRef_Read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WrappedOpenGL::Serialise_glFramebufferTextureMultisampleMultiviewOVR(
|
||||||
|
GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples,
|
||||||
|
GLint baseViewIndex, GLsizei numViews)
|
||||||
|
{
|
||||||
|
SERIALISE_ELEMENT(GLenum, Target, target);
|
||||||
|
SERIALISE_ELEMENT(GLenum, Attach, attachment);
|
||||||
|
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(TextureRes(GetCtx(), texture)));
|
||||||
|
SERIALISE_ELEMENT(int32_t, Level, level);
|
||||||
|
SERIALISE_ELEMENT(uint32_t, Samples, samples);
|
||||||
|
SERIALISE_ELEMENT(int32_t, BaseViewIndex, baseViewIndex);
|
||||||
|
SERIALISE_ELEMENT(uint32_t, NumViews, numViews);
|
||||||
|
|
||||||
|
if(m_State < WRITING)
|
||||||
|
{
|
||||||
|
GLuint tex = (id == ResourceId() || !GetResourceManager()->HasLiveResource(id))
|
||||||
|
? 0
|
||||||
|
: GetResourceManager()->GetLiveResource(id).name;
|
||||||
|
|
||||||
|
m_Real.glFramebufferTextureMultisampleMultiviewOVR(Target, Attach, tex, Level, Samples,
|
||||||
|
BaseViewIndex, NumViews);
|
||||||
|
|
||||||
|
if(m_State == READING && tex)
|
||||||
|
{
|
||||||
|
if(Attach == eGL_DEPTH_ATTACHMENT || Attach == eGL_DEPTH_STENCIL_ATTACHMENT)
|
||||||
|
m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= TextureCategory::DepthTarget;
|
||||||
|
else
|
||||||
|
m_Textures[GetResourceManager()->GetLiveID(id)].creationFlags |= TextureCategory::ColorTarget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WrappedOpenGL::glFramebufferTextureMultisampleMultiviewOVR(GLenum target, GLenum attachment,
|
||||||
|
GLuint texture, GLint level,
|
||||||
|
GLsizei samples, GLint baseViewIndex,
|
||||||
|
GLsizei numViews)
|
||||||
|
{
|
||||||
|
m_Real.glFramebufferTextureMultisampleMultiviewOVR(target, attachment, texture, level, samples,
|
||||||
|
baseViewIndex, numViews);
|
||||||
|
|
||||||
|
if(m_State >= WRITING)
|
||||||
|
{
|
||||||
|
GLResourceRecord *record = m_DeviceRecord;
|
||||||
|
|
||||||
|
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(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||||
|
{
|
||||||
|
ResourceRecord *texrecord =
|
||||||
|
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
|
||||||
|
if(m_State == WRITING_IDLE)
|
||||||
|
GetResourceManager()->MarkDirtyResource(texrecord->GetResourceID());
|
||||||
|
else
|
||||||
|
m_MissingTracks.insert(texrecord->GetResourceID());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_HighTrafficResources.find(record->GetResourceID()) != m_HighTrafficResources.end() &&
|
||||||
|
m_State != WRITING_CAPFRAME)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SCOPED_SERIALISE_CONTEXT(FRAMEBUFFER_MULTIVIEWMS);
|
||||||
|
Serialise_glFramebufferTextureMultisampleMultiviewOVR(target, attachment, texture, level,
|
||||||
|
samples, baseViewIndex, numViews);
|
||||||
|
|
||||||
|
if(m_State == WRITING_IDLE)
|
||||||
|
{
|
||||||
|
record->AddChunk(scope.Get());
|
||||||
|
|
||||||
|
if(record != m_DeviceRecord)
|
||||||
|
{
|
||||||
|
record->UpdateCount++;
|
||||||
|
|
||||||
|
if(record->UpdateCount > 10)
|
||||||
|
{
|
||||||
|
m_HighTrafficResources.insert(record->GetResourceID());
|
||||||
|
GetResourceManager()->MarkDirtyResource(record->GetResourceID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_ContextRecord->AddChunk(scope.Get());
|
||||||
|
GetResourceManager()->MarkFBOReferenced(record->Resource, eFrameRef_ReadBeforeWrite);
|
||||||
|
GetResourceManager()->MarkResourceFrameReferenced(TextureRes(GetCtx(), texture),
|
||||||
|
eFrameRef_Read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool WrappedOpenGL::Serialise_glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname,
|
bool WrappedOpenGL::Serialise_glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname,
|
||||||
GLint param)
|
GLint param)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user