Browse Source

gl, call program.use automatically when possible

Alexander Rose 6 years ago
parent
commit
223e9dd22d

+ 0 - 2
src/mol-gl/compute/histogram-pyramid/reduction.ts

@@ -93,7 +93,6 @@ export function createHistogramPyramid(ctx: WebGLContext, inputTexture: Texture)
 
     const renderable = getHistopyramidReductionRenderable(ctx, initialTexture)
     renderable.update()
-    renderable.use()
 
     let offset = 0;
     for (let i = 0; i < levels; i++) {
@@ -110,7 +109,6 @@ export function createHistogramPyramid(ctx: WebGLContext, inputTexture: Texture)
         ValueCell.update(renderable.values.tPreviousLevel, readTex)
 
         renderable.update()
-        renderable.use()
         setRenderingDefaults(gl)
         gl.viewport(0, 0, size, size)
         renderable.render()

+ 0 - 1
src/mol-gl/compute/histogram-pyramid/sum.ts

@@ -48,7 +48,6 @@ export function getHistopyramidSum(ctx: WebGLContext, pyramidTopTexture: Texture
 
     const renderable = getHistopyramidSumRenderable(ctx, pyramidTopTexture)
     renderable.update()
-    renderable.use()
 
     // TODO cache globally for reuse
     const sumTexture = createTexture(ctx, 'image-uint8', 'rgba', 'ubyte', 'nearest')

+ 0 - 1
src/mol-gl/compute/marching-cubes/active-voxels.ts

@@ -71,7 +71,6 @@ export function calcActiveVoxels(ctx: WebGLContext, cornerTex: Texture, gridDime
 
     const renderable = getActiveVoxelsRenderable(ctx, cornerTex, gridDimensions, isoValue)
     renderable.update()
-    renderable.use()
 
     activeVoxelsTex.attachFramebuffer(framebuffer, 0)
     setRenderingDefaults(gl)

+ 0 - 1
src/mol-gl/compute/marching-cubes/isosurface.ts

@@ -110,7 +110,6 @@ export function createIsosurfaceBuffers(ctx: WebGLContext, activeVoxelsBase: Tex
 
     const pr = getIsosurfaceRenderable(ctx, pyramidTex, activeVoxelsBase, volumeData, totalTex, gridDimensions, transform, isoValue, levels, scale)
     pr.update()
-    pr.use()
 
     vertexGroupTexture.attachFramebuffer(framebuffer, 0)
     normalTexture.attachFramebuffer(framebuffer, 1)

+ 0 - 2
src/mol-gl/renderable.ts

@@ -61,7 +61,6 @@ export interface ComputeRenderable<T extends RenderableValues> {
     readonly values: T
 
     render: () => void
-    use: () => void
     update: () => void
     dispose: () => void
 }
@@ -72,7 +71,6 @@ export function createComputeRenderable<T extends Values<RenderableSchema>>(rend
         values,
 
         render: () => renderItem.render('compute'),
-        use: () => renderItem.getProgram('compute').use(),
         update: () => renderItem.update(),
         dispose: () => renderItem.destroy()
     }

+ 1 - 1
src/mol-gl/renderer.ts

@@ -114,9 +114,9 @@ namespace Renderer {
                 if (state.currentProgramId !== program.id) {
                     // console.log('new program')
                     globalUniformsNeedUpdate = true
+                    program.use()
                 }
 
-                program.use()
                 if (globalUniformsNeedUpdate) {
                     // console.log('globalUniformsNeedUpdate')
                     program.setUniforms(globalUniformList)

+ 3 - 4
src/mol-gl/webgl/render-item.ts

@@ -154,7 +154,6 @@ export function createRenderItem<T extends RenderVariantDefines, S extends keyof
     const valueChanges = createValueChanges()
 
     let destroyed = false
-    let currentProgramId = -1
 
     return {
         id,
@@ -165,15 +164,15 @@ export function createRenderItem<T extends RenderVariantDefines, S extends keyof
             if (drawCount === 0 || instanceCount === 0) return
             const program = programs[variant].value
             const vertexArray = vertexArrays[variant]
-            program.setUniforms(uniformValueEntries)
-            if (program.id !== currentProgramId ||
+            if (program.id !== state.currentProgramId ||
                 materialId === -1 || materialId !== state.currentMaterialId
             ) {
                 // console.log('program.id changed or materialId changed/-1', materialId)
+                if (program.id !== state.currentProgramId) program.use()
                 program.setUniforms(materialUniformValueEntries)
-                currentProgramId = program.id
                 state.currentMaterialId = materialId
             }
+            program.setUniforms(uniformValueEntries)
             program.bindTextures(textures)
             if (vertexArrayObject && vertexArray) {
                 vertexArrayObject.bindVertexArray(vertexArray)

+ 0 - 3
src/mol-math/geometry/gaussian-density/gpu.ts

@@ -285,7 +285,6 @@ function setupMinDistanceRendering(webgl: WebGLContext, renderable: ComputeRende
     const { gl } = webgl
     ValueCell.update(renderable.values.dCalcType, 'minDistance')
     renderable.update()
-    renderable.use()
     gl.blendFunc(gl.ONE, gl.ONE)
     // the shader writes 1 - dist so we set blending to MAX
     gl.blendEquation(webgl.extensions.blendMinMax.MAX)
@@ -295,7 +294,6 @@ function setupDensityRendering(webgl: WebGLContext, renderable: ComputeRenderabl
     const { gl } = webgl
     ValueCell.update(renderable.values.dCalcType, 'density')
     renderable.update()
-    renderable.use()
     gl.blendFunc(gl.ONE, gl.ONE)
     gl.blendEquation(gl.FUNC_ADD)
 }
@@ -304,7 +302,6 @@ function setupGroupIdRendering(webgl: WebGLContext, renderable: ComputeRenderabl
     const { gl } = webgl
     ValueCell.update(renderable.values.dCalcType, 'groupId')
     renderable.update()
-    renderable.use()
     // overwrite color, don't change alpha
     gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ZERO, gl.ONE)
     gl.blendEquation(gl.FUNC_ADD)