mapbox / mapbox/mapbox-gl-js

setPaintProperty(layerId, '[icon|text]-opacity', ...) will raise on a undefined uniformName

Open
#7,511 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

api :memo: bug :lady_beetle:
Dominant language
TypeScript
Stars
12.4k
Forks
2.4k
PR merge metrics
No merged PRs in 30d

Description

mapbox-gl-js version: 0.50.0

browser: Chrome Version 69.0.3497.100

Context

Map with several layers (symbols and texts).

setPaintProperty(layerId, '[icon|text]-opacity', ...) on multiple layers will sometimes raise the following error:

Uncaught TypeError: Cannot read property 'set' of undefined
    at SourceExpressionBinder.setUniforms (mapbox-gl-dev.js:16727)
    at ProgramConfiguration.setUniforms (mapbox-gl-dev.js:17332)
    at Program.draw (mapbox-gl-dev.js:53626)
    at drawSymbolElements (mapbox-gl-dev.js:55164)
    at drawLayerSymbols (mapbox-gl-dev.js:55139)
    at Object.drawSymbols [as symbol] (mapbox-gl-dev.js:54913)
    at Painter.renderLayer (mapbox-gl-dev.js:59165)
    at Painter.render (mapbox-gl-dev.js:59121)
    at Map._render (mapbox-gl-dev.js:65617)
    at mapbox-gl-dev.js:65725


setUniforms           @ mapbox-gl-dev.js:16727
setUniforms           @ mapbox-gl-dev.js:17332
draw                  @ mapbox-gl-dev.js:53626
drawSymbolElements    @ mapbox-gl-dev.js:55164
drawLayerSymbols      @ mapbox-gl-dev.js:55139
drawSymbols           @ mapbox-gl-dev.js:54913
renderLayer           @ mapbox-gl-dev.js:59165
render                @ mapbox-gl-dev.js:59121
_render               @ mapbox-gl-dev.js:65617
(anonymous)           @ mapbox-gl-dev.js:65725
requestAnimationFrame (async)
frame                 @ mapbox-gl-dev.js:2468
triggerRepaint        @ mapbox-gl-dev.js:65723
_render               @ mapbox-gl-dev.js:65654
(anonymous)           @ mapbox-gl-dev.js:65725
requestAnimationFrame (async)
frame                 @ mapbox-gl-dev.js:2468
triggerRepaint        @ mapbox-gl-dev.js:65723
_render               @ mapbox-gl-dev.js:65654
(anonymous)           @ mapbox-gl-dev.js:65725
requestAnimationFrame (async)
frame                 @ mapbox-gl-dev.js:2468
triggerRepaint        @ mapbox-gl-dev.js:65723
_update               @ mapbox-gl-dev.js:65532
(anonymous)           @ mapbox-gl-dev.js:64168
fire                  @ mapbox-gl-dev.js:2853
fire                  @ mapbox-gl-dev.js:2879
update                @ mapbox-gl-dev.js:51758
_render               @ mapbox-gl-dev.js:65596
(anonymous)           @ mapbox-gl-dev.js:65725
requestAnimationFrame (async)
frame                 @ mapbox-gl-dev.js:2468
triggerRepaint        @ mapbox-gl-dev.js:65723
_update               @ mapbox-gl-dev.js:65532
setPaintProperty      @ mapbox-gl-dev.js:65220

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at SourceExpressionBinder.setUniforms and ProgramConfiguration.setUniforms, reached from setPaintProperty through symbol rendering; use the reported opacity updates across multiple symbol and text layers as the reproduction. Done means the sequence no longer raises “Cannot read property 'set' of undefined” during rendering.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
frontend, web-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.