From f7238c9a32b3918fe47369b84c27862484764234 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Fri, 22 Mar 2019 18:39:09 -0700
Subject: [PATCH] better handling of render program changes

---
 src/mol-gl/webgl/context.ts     |  2 --
 src/mol-gl/webgl/render-item.ts | 12 ++++++------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/mol-gl/webgl/context.ts b/src/mol-gl/webgl/context.ts
index 2b3edcf6f..b849f9f9a 100644
--- a/src/mol-gl/webgl/context.ts
+++ b/src/mol-gl/webgl/context.ts
@@ -137,7 +137,6 @@ export interface WebGLContext {
 
     currentProgramId: number
     currentMaterialId: number
-    currentRenderVariant: string
 
     bufferCount: number
     framebufferCount: number
@@ -266,7 +265,6 @@ export function createContext(gl: GLRenderingContext): WebGLContext {
 
         currentProgramId: -1,
         currentMaterialId: -1,
-        currentRenderVariant: '',
 
         bufferCount: 0,
         framebufferCount: 0,
diff --git a/src/mol-gl/webgl/render-item.ts b/src/mol-gl/webgl/render-item.ts
index 108cfdbf2..3b924260b 100644
--- a/src/mol-gl/webgl/render-item.ts
+++ b/src/mol-gl/webgl/render-item.ts
@@ -130,6 +130,7 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo
     const valueChanges = createValueChanges()
 
     let destroyed = false
+    let currentProgramId = -1
 
     return {
         id,
@@ -140,13 +141,12 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo
             const program = programs[variant].value
             const vertexArray = vertexArrays[variant]
             program.setUniforms(uniformValueEntries)
-            if (ctx.currentRenderVariant !== variant) {
-                ctx.currentMaterialId = -1
-                ctx.currentRenderVariant = variant
-            }
-            if (materialId === -1 || materialId !== ctx.currentMaterialId) {
-                // console.log('materialId changed or -1', materialId)
+            if (program.id !== currentProgramId ||
+                materialId === -1 || materialId !== ctx.currentMaterialId
+            ) {
+                // console.log('program.id changed or materialId changed/-1', materialId)
                 program.setUniforms(materialUniformValueEntries)
+                currentProgramId = program.id
                 ctx.currentMaterialId = materialId
             }
             program.bindTextures(textures)
-- 
GitLab