From b368f7dd3df9d5e842642aa78958812580ae970b Mon Sep 17 00:00:00 2001 From: Tianyi20 Date: Thu, 10 Sep 2026 21:23:43 +0800 Subject: [PATCH] Fix EGL texture replacement in GPU renderer --- .../eglRendererVisualShapeConverter.cpp | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp b/examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp index 11ca84e0b3..6d7e081a62 100644 --- a/examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp +++ b/examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp @@ -1406,22 +1406,27 @@ void EGLRendererVisualShapeConverter::changeInstanceFlags(int bodyUniqueId, int void EGLRendererVisualShapeConverter::changeShapeTexture(int bodyUniqueId, int linkIndex, int shapeIndex, int textureUniqueId) { - btAssert(textureUniqueId < m_data->m_textures.size()); - if (textureUniqueId >= 0 && textureUniqueId < m_data->m_textures.size()) + int innerTextureId = -1; + if (textureUniqueId >= 0) { - for (int i = 0; i < m_data->m_swRenderInstances.size(); i++) + if (textureUniqueId >= m_data->m_textures.size()) { - EGLRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i); - if (ptrptr && *ptrptr) + return; + } + innerTextureId = m_data->m_textures[textureUniqueId].m_innerTexUid; + } + + for (int i = 0; i < m_data->m_swRenderInstances.size(); i++) + { + EGLRendererObjectArray** ptrptr = m_data->m_swRenderInstances.getAtIndex(i); + if (ptrptr && *ptrptr) + { + EGLRendererObjectArray* visuals = *ptrptr; + if ((bodyUniqueId == visuals->m_objectUniqueId) && (linkIndex == visuals->m_linkIndex)) { - EGLRendererObjectArray* visuals = *ptrptr; - if ((bodyUniqueId == visuals->m_objectUniqueId) && (linkIndex == visuals->m_linkIndex)) + for (int i = 0; i < visuals->m_graphicsInstanceIds.size(); i++) { - for (int i = 0; i < visuals->m_graphicsInstanceIds.size(); i++) - { - m_data->m_instancingRenderer->replaceTexture(visuals->m_graphicsInstanceIds[i], textureUniqueId); - } - + m_data->m_instancingRenderer->replaceTexture(visuals->m_graphicsInstanceIds[i], innerTextureId); } } }