This converts the style property classes (CirclePaintProperties and so on) to the same tuple-based approach as gl::Attribute and gl::Uniform. The approach is outlined in https://github.com/mapbox/cpp/blob/master/C%2B%2B%20Structural%20Metaprogramming.md.
The main advantage of this approach is it allows writing algorithms that work on sets of style properties, without resorting to code generation or manually repetitive code. This lets us iterate on approaches to data-driven properties more easily.
Another advantage is that the cascading, unevaluated, and evaluated states of a set of properties exist as independent structures, instead of individual properties holding their own state. This is a more functional approach that makes data flow clearer and reduces state.
* [core] update shaders for line property functions
update deps, define device pixel ratio for all shaders
[core] create ShaderParameter struct to store pixel ratio and overdraw param
repair rebase errs
update shaders to include pixel ratio
make sure collision_box never overdraws
update test suite, move shaders to Painter::render so the correct pixel ratio is applied
move shader compiling back to the Painter constructor
rebase from shader --> program refactor
re-factor parameters for collisionBox and debug programs
remove unused vars from line-program, move blur math to shader
update core files
remove unecessary files
update shaders PR, remove comments
bump test suite sha
fix formatting, incorporate feedback
refactor program.hpp
* [core] remove line transformations that were moved to the shaders, bump shader sha
* [core] shorten ProgramParameter instantiation
* [core] bump shader+test suite shas
* Extract `ignore` util to separate header.
* `Segment` now tracks offset and length of indices, rather than primitives. This is more natural.
* Introduce `VertexVector` and `IndexVector` types. These types carry information about the intended draw mode (`Triangles`, `LineStrip`, etc.), and ensure that elements are always appended in a group size appropriate for that draw mode, for both indexed and unindexed rendering.
* `Program`, rather than `Drawable`, is now the unifying object for draw calls. `Program` is the best place to type check the draw call, because it is typed to carry information about the intended primitive, vertex type, attributes, and uniforms.
* Use the debug shaders for debug tile rendering, like gl-js.
* Fix the draw mode for background. It was drawing triangle strips with a triangles array. Surprised this didn’t cause issues. Now it’s type checked.
- Use glBindAttribLocation for GLSL attributes.
- Create a separate shader for each shader that supports overdraw.
Needed because each uniform location must be known for every program.
- Create a separate VAO for each shader inside buckets.
Needed because we can only bind a VAO to a specific shader.
Fixes#5435.
- puts function definitions in a namespace ... {} rather than using namespace ...;
- remove trailing whitespace
- add trailing newline
- protect SQL statements from being formatted by clang-format
Together with MapDebugOptions::Collision, provides "wireframe" rendering
output so all drawn objects are visible. This mode ignores the line
width, background and fill colors for better visualization.
Fixes#4359.
This eliminates the reliance on ThreadContext to provide GLObjectStore, and statically enforces that GL cleanup functions happen only when GLObjectStore::performCleanup is called.
With the elimination of the Map thread, this becomes important because there may be multiple GLObjectStore's per-thread, and Map will need to ensure that the correct context is active when calling GLObjectStore::performCleanup.