[core] Restore support for GL implementations without VAO extension
This commit is contained in:
@@ -123,12 +123,16 @@ UniqueTexture Context::createTexture() {
|
||||
}
|
||||
|
||||
UniqueVertexArray Context::createVertexArray() {
|
||||
if (!gl::GenVertexArrays) {
|
||||
throw std::runtime_error("GL_ARB_vertex_array_object extension is required");
|
||||
}
|
||||
|
||||
VertexArrayID id = 0;
|
||||
MBGL_CHECK_ERROR(gl::GenVertexArrays(1, &id));
|
||||
if (gl::GenVertexArrays && !disableVAOExtension) {
|
||||
MBGL_CHECK_ERROR(gl::GenVertexArrays(1, &id));
|
||||
} else {
|
||||
static bool reported = false;
|
||||
if (!reported) {
|
||||
Log::Warning(Event::OpenGL, "Not using Vertex Array Objects");
|
||||
reported = true;
|
||||
}
|
||||
}
|
||||
return UniqueVertexArray(std::move(id), { this });
|
||||
}
|
||||
|
||||
|
||||
@@ -222,6 +222,10 @@ private:
|
||||
std::vector<VertexArrayID> abandonedVertexArrays;
|
||||
std::vector<FramebufferID> abandonedFramebuffers;
|
||||
std::vector<RenderbufferID> abandonedRenderbuffers;
|
||||
|
||||
public:
|
||||
// For testing
|
||||
bool disableVAOExtension = false;
|
||||
};
|
||||
|
||||
} // namespace gl
|
||||
|
||||
@@ -37,12 +37,17 @@ public:
|
||||
context.vertexBuffer.setDirty();
|
||||
}
|
||||
|
||||
context.vertexArrayObject = *vao;
|
||||
|
||||
if (indexBuffer != indexBuffer_) {
|
||||
indexBuffer = indexBuffer_;
|
||||
context.elementBuffer.setDirty();
|
||||
if (*vao) {
|
||||
context.vertexArrayObject = *vao;
|
||||
if (indexBuffer != indexBuffer_) {
|
||||
indexBuffer = indexBuffer_;
|
||||
context.elementBuffer.setDirty();
|
||||
context.elementBuffer = indexBuffer_;
|
||||
}
|
||||
} else {
|
||||
// No VAO support. Force attributes to be rebound.
|
||||
context.elementBuffer = indexBuffer_;
|
||||
variableBindings = {};
|
||||
}
|
||||
|
||||
Attributes::bind(context,
|
||||
|
||||
BIN
test/fixtures/map/no_vao/expected.png
vendored
Normal file
BIN
test/fixtures/map/no_vao/expected.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.6 KiB |
@@ -6,6 +6,7 @@
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/gl/headless_backend.hpp>
|
||||
#include <mbgl/gl/offscreen_view.hpp>
|
||||
#include <mbgl/gl/context.hpp>
|
||||
#include <mbgl/util/default_thread_pool.hpp>
|
||||
#include <mbgl/sprite/sprite_image.hpp>
|
||||
#include <mbgl/storage/network_status.hpp>
|
||||
@@ -305,6 +306,24 @@ TEST(Map, AddLayer) {
|
||||
test::checkImage("test/fixtures/map/add_layer", test::render(map, test.view));
|
||||
}
|
||||
|
||||
TEST(Map, WithoutVAOExtension) {
|
||||
MapTest test;
|
||||
|
||||
test.backend.getContext().disableVAOExtension = true;
|
||||
|
||||
#ifdef MBGL_ASSET_ZIP
|
||||
// Regenerate with `cd test/fixtures/api/ && zip -r assets.zip assets/`
|
||||
DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets.zip");
|
||||
#else
|
||||
DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets");
|
||||
#endif
|
||||
|
||||
Map map(test.backend, test.view.size, 1, fileSource, test.threadPool, MapMode::Still);
|
||||
map.setStyleJSON(util::read_file("test/fixtures/api/water.json"));
|
||||
|
||||
test::checkImage("test/fixtures/map/no_vao", test::render(map, test.view), 0.002);
|
||||
}
|
||||
|
||||
TEST(Map, RemoveLayer) {
|
||||
MapTest test;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user