From 3a56413b5f224f00368a3f7a581bf8736e2520b9 Mon Sep 17 00:00:00 2001 From: Karim Naaji Date: Mon, 30 Mar 2020 15:21:17 -0700 Subject: [PATCH 1/5] Fix vertex layout attribute offset when used with DDS The vertex layout offset for patternAttributes is overriden to be 0, this is incorrect as each component of this layout require a specific offset to be set to appropriately bind the buffers when calling vertexAttribPointer --- src/data/bucket/pattern_attributes.js | 2 +- src/data/program_configuration.js | 13 +++---------- src/render/draw_fill_extrusion.js | 1 - 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/data/bucket/pattern_attributes.js b/src/data/bucket/pattern_attributes.js index f47b64ca115..0c7a6942f67 100644 --- a/src/data/bucket/pattern_attributes.js +++ b/src/data/bucket/pattern_attributes.js @@ -1,7 +1,7 @@ // @flow import {createLayout} from '../../util/struct_array'; -export default createLayout([ +export const patternAttributes = createLayout([ // [tl.x, tl.y, br.x, br.y] {name: 'a_pattern_from', components: 4, type: 'Uint16'}, {name: 'a_pattern_to', components: 4, type: 'Uint16'}, diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index a6d37c0d20e..36924c59b9f 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -7,7 +7,7 @@ import {register} from '../util/web_worker_transfer'; import {PossiblyEvaluatedPropertyValue} from '../style/properties'; import {StructArrayLayout1f4, StructArrayLayout2f8, StructArrayLayout4f16, PatternLayoutArray} from './array_types'; import {clamp} from '../util/util'; - +import {patternAttributes} from './bucket/pattern_attributes'; import EvaluationParameters from '../style/evaluation_parameters'; import FeaturePositionMap from './feature_position_map'; import { @@ -319,13 +319,6 @@ class CrossFadedCompositeBinder implements AttributeBinder { this.zoom = zoom; this.layerId = layerId; - this.paintVertexAttributes = names.map((name) => ({ - name: `a_${name}`, - type: 'Uint16', - components: 4, - offset: 0 - })); - this.zoomInPaintVertexArray = new PaintVertexArray(); this.zoomOutPaintVertexArray = new PaintVertexArray(); } @@ -371,8 +364,8 @@ class CrossFadedCompositeBinder implements AttributeBinder { upload(context: Context) { if (this.zoomInPaintVertexArray && this.zoomInPaintVertexArray.arrayBuffer && this.zoomOutPaintVertexArray && this.zoomOutPaintVertexArray.arrayBuffer) { - this.zoomInPaintVertexBuffer = context.createVertexBuffer(this.zoomInPaintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent); - this.zoomOutPaintVertexBuffer = context.createVertexBuffer(this.zoomOutPaintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent); + this.zoomInPaintVertexBuffer = context.createVertexBuffer(this.zoomInPaintVertexArray, patternAttributes.members, this.expression.isStateDependent); + this.zoomOutPaintVertexBuffer = context.createVertexBuffer(this.zoomOutPaintVertexArray, patternAttributes.members, this.expression.isStateDependent); } } diff --git a/src/render/draw_fill_extrusion.js b/src/render/draw_fill_extrusion.js index ebc4bf576f4..b9a0dde384f 100644 --- a/src/render/draw_fill_extrusion.js +++ b/src/render/draw_fill_extrusion.js @@ -68,7 +68,6 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo tile.imageAtlasTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE); programConfiguration.updatePaintBuffers(crossfade); } - const constantPattern = patternProperty.constantOr(null); if (constantPattern && tile.imageAtlas) { const atlas = tile.imageAtlas; From 2fe7f2ce2272843ade7d6efe5d886e4dc59f9c2a Mon Sep 17 00:00:00 2001 From: Karim Naaji Date: Mon, 30 Mar 2020 15:38:18 -0700 Subject: [PATCH 2/5] Fix flow --- src/data/bucket/pattern_attributes.js | 4 +++- src/data/program_configuration.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/data/bucket/pattern_attributes.js b/src/data/bucket/pattern_attributes.js index 0c7a6942f67..6dc6b454a7f 100644 --- a/src/data/bucket/pattern_attributes.js +++ b/src/data/bucket/pattern_attributes.js @@ -1,10 +1,12 @@ // @flow import {createLayout} from '../../util/struct_array'; -export const patternAttributes = createLayout([ +const patternAttributes = createLayout([ // [tl.x, tl.y, br.x, br.y] {name: 'a_pattern_from', components: 4, type: 'Uint16'}, {name: 'a_pattern_to', components: 4, type: 'Uint16'}, {name: 'a_pixel_ratio_from', components: 1, type: 'Uint8'}, {name: 'a_pixel_ratio_to', components: 1, type: 'Uint8'}, ]); + +export default patternAttributes; \ No newline at end of file diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index 36924c59b9f..e4b12483906 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -7,7 +7,7 @@ import {register} from '../util/web_worker_transfer'; import {PossiblyEvaluatedPropertyValue} from '../style/properties'; import {StructArrayLayout1f4, StructArrayLayout2f8, StructArrayLayout4f16, PatternLayoutArray} from './array_types'; import {clamp} from '../util/util'; -import {patternAttributes} from './bucket/pattern_attributes'; +import patternAttributes from './bucket/pattern_attributes'; import EvaluationParameters from '../style/evaluation_parameters'; import FeaturePositionMap from './feature_position_map'; import { From bd10e4693edeef9f2e0789fea79a4e7ef6a643f4 Mon Sep 17 00:00:00 2001 From: Karim Naaji Date: Mon, 30 Mar 2020 15:48:30 -0700 Subject: [PATCH 3/5] Cleanup unused param --- src/data/program_configuration.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index e4b12483906..2d8c1578041 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -312,7 +312,7 @@ class CrossFadedCompositeBinder implements AttributeBinder { zoomOutPaintVertexBuffer: ?VertexBuffer; paintVertexAttributes: Array; - constructor(expression: CompositeExpression, names: Array, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: Class, layerId: string) { + constructor(expression: CompositeExpression, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: Class, layerId: string) { this.expression = expression; this.type = type; this.useIntegerZoom = useIntegerZoom; @@ -431,7 +431,7 @@ export default class ProgramConfiguration { } else if (expression.kind === 'source' || isCrossFaded) { const StructArrayLayout = layoutType(property, type, 'source'); this.binders[property] = isCrossFaded ? - new CrossFadedCompositeBinder(expression, names, type, useIntegerZoom, zoom, StructArrayLayout, layer.id) : + new CrossFadedCompositeBinder(expression, type, useIntegerZoom, zoom, StructArrayLayout, layer.id) : new SourceExpressionBinder(expression, names, type, StructArrayLayout); keys.push(`/a_${property}`); From 135955ba25277f423dacdba54dc159d5cf0c3432 Mon Sep 17 00:00:00 2001 From: Karim Naaji Date: Mon, 30 Mar 2020 16:17:23 -0700 Subject: [PATCH 4/5] Add render tests for data driven styling coverage --- .../2x-on-1x-add-image-dds/expected.png | Bin 0 -> 29869 bytes .../2x-on-1x-add-image-dds/style.json | 97 ++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 test/integration/render-tests/fill-extrusion-pattern/2x-on-1x-add-image-dds/expected.png create mode 100644 test/integration/render-tests/fill-extrusion-pattern/2x-on-1x-add-image-dds/style.json diff --git a/test/integration/render-tests/fill-extrusion-pattern/2x-on-1x-add-image-dds/expected.png b/test/integration/render-tests/fill-extrusion-pattern/2x-on-1x-add-image-dds/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..589f07ac82547acb7c4ef0f214a5222b3e8d9df1 GIT binary patch literal 29869 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

JffAhlD-T}GsU|+0);|_s7fhKJ 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 Date: Mon, 30 Mar 2020 16:18:24 -0700 Subject: [PATCH 5/5] EOL --- src/data/bucket/pattern_attributes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/bucket/pattern_attributes.js b/src/data/bucket/pattern_attributes.js index 6dc6b454a7f..01b512b8fc9 100644 --- a/src/data/bucket/pattern_attributes.js +++ b/src/data/bucket/pattern_attributes.js @@ -9,4 +9,4 @@ const patternAttributes = createLayout([ {name: 'a_pixel_ratio_to', components: 1, type: 'Uint8'}, ]); -export default patternAttributes; \ No newline at end of file +export default patternAttributes;