-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Conversation
My main bottleneck currently seems to be texture binding, but not a lot can be done directly when arbitrary textures are coming in over the network (e.g. preparing a texture atlas). I'm experimenting with using up to @kkaefer any thoughts offhand for good directions to explore? I'll keep at it and see if I can narrow down other useful points of optimization. I had considered not doing anything with the stencil buffer during raster calls, but this won't likely work when we get to the point where we want to combine raster + vector imagery in the same render loop, so instead I'm just doing this for now: if (tile->use_raster)
renderRaster(tile);
else
renderLayers(tile, style.layers);
if (settings.debug)
renderDebug(tile);
renderBackground(); |
If I'm understanding things properly, multiple texture units aren't relevant unless a shader is using more than one texture within it. Currently trying to group texture loads and/or binds near the beginning of the frame and/or deferring actual draw of a texture until a future render loop if it needs to be loaded first. |
Latest on this:
|
This should be in master since ba5070b |
Nice, thanks for the heads up. Been trying to merge weekly but may need to up that. |
- simplify namespacing - static raster tile image for now
Working through pretty substantial conflicts on merging |
Conflicts: include/llmr/map/map.hpp include/llmr/map/tile.hpp include/llmr/platform/platform.hpp include/llmr/renderer/painter.hpp src/map/map.cpp src/map/tile.cpp src/renderer/painter.cpp src/style/sprite.cpp
Ok, that was a pretty epic merge. @kkaefer couple things FYI I had to modify about my new interaction with
|
#include <forward_list> | ||
|
||
namespace llmr { | ||
|
||
std::forward_list<vec3<int32_t>> covering_tiles(int32_t zoom, const box& points); | ||
std::forward_list<Tile::ID> covering_tiles(int32_t zoom, const box& points, const bool use_raster = false, const bool use_retina = false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In our code, we shouldn't have a binary distinction between non-retina and retina, but rather use a floating point scale factor. Binary retina makes sense for UI elements where scaling things is difficult, but we should be able to scale without weird half-pixel lines etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doing a bool
for this was because of separation between the map/transform and the map coverage algorithm (coverage
) and decision of which raster version to fetch (tile_data
). This leaves the map and transform, which are responsible for all drawing/tiling, as well as have access to pixel_ratio
, to make the determination of whether retina raster tiles are required. Raster tiles are binary -- either they are retina, or they are not.
|
|
For tile retention, yes, this needs work. I will also investigate the Otherwise it sounds like this is good to merge very soon, then we'll pick up improvement work in |
I see this on OS X, but only on app quit. Did you experience it otherwise @kkaefer? |
Ok, I hit the smaller-scale fixes that I could inline + have the rest queued up for post-merge ticketing. Will work on squash + merge now. |
Conflicts: include/llmr/map/coverage.hpp macosx/main.mm src/map/coverage.cpp src/map/tile.cpp
Squash-merged into master as of 00a3245. |
What tools are you using for profiling @incanus @springmeyer @kkaefer? |
@mikemorris Instruments.app |
Hint: use iprofiler to run from the command line when this is useful. It then dumps files which can be visualized in instruments.app.
|
Same, only Instruments.app for me. |
This is a first cut at raster tile rendering for #70. Work in progress.
libjpeg
into the mix @kkaefer @springmeyer?