summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-09-19 14:57:36 +0300
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-09-23 13:12:24 +0300
commit0e7b4632055dd072684817b941b68e583f103279 (patch)
tree18f3e4efed866db11820326f8f891e3a45a72f58
parent85b766bef44ad3ce718e41163eed642bb61ddca7 (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.cpp4
-rw-r--r--src/render/backends/gl/Qt3DSRenderBackendGL3.cpp4
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++) {