diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-09-19 14:57:36 +0300 |
---|---|---|
committer | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-09-23 13:12:24 +0300 |
commit | 0e7b4632055dd072684817b941b68e583f103279 (patch) | |
tree | 18f3e4efed866db11820326f8f891e3a45a72f58 | |
parent | 85b766bef44ad3ce718e41163eed642bb61ddca7 (diff) |
Fix crash when using wrong vertex layout in custom shaders
The shader handle was cached before error checking, so the error
checking would be skipped after the first failure.
Task-number: QT3DS-3828
Change-Id: I950f0261199c0c30c44c583416b88dad9c376f0d
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | src/render/backends/gl/Q3DSRenderBackendGLES2.cpp | 4 | ||||
-rw-r--r-- | src/render/backends/gl/Qt3DSRenderBackendGL3.cpp | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp b/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp index 54d8d5d..718941e 100644 --- a/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp +++ b/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp @@ -414,7 +414,6 @@ bool NVRenderBackendGLES2Impl::SetInputAssembler(NVRenderBackendInputAssemblerOb if (inputAssembler->m_cachedShaderHandle != programID) { GL_CALL_EXTENSION_FUNCTION(glBindVertexArrayOES(inputAssembler->m_VaoID)); - inputAssembler->m_cachedShaderHandle = programID; QT3DS_FOREACH(idx, shaderAttribBuffer.size()) { @@ -438,6 +437,9 @@ bool NVRenderBackendGLES2Impl::SetInputAssembler(NVRenderBackendInputAssemblerOb } } + // Cache the program id after checking for errors + inputAssembler->m_cachedShaderHandle = programID; + // disable max possible used first // this is currently sufficient since we always re-arrange input attributes from 0 for (QT3DSU32 i = 0; i < attribLayout->m_LayoutAttribEntries.size(); i++) diff --git a/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp b/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp index 49e7a34..cd90b25 100644 --- a/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp +++ b/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp @@ -430,7 +430,6 @@ namespace render { if (inputAssembler->m_cachedShaderHandle != programID) { GL_CALL_EXTRA_FUNCTION(glBindVertexArray(inputAssembler->m_VaoID)); - inputAssembler->m_cachedShaderHandle = programID; QT3DS_FOREACH(idx, shaderAttribBuffer.size()) { @@ -454,6 +453,9 @@ namespace render { } } + // Cache the program id after checking for errors + inputAssembler->m_cachedShaderHandle = programID; + // disable max possible used first // this is currently sufficient since we always re-arrange input attributes from 0 for (QT3DSU32 i = 0; i < attribLayout->m_LayoutAttribEntries.size(); i++) { |