[core] expose vertex binding count in gfx::Context
This commit is contained in:
@@ -17,10 +17,14 @@ namespace gfx {
|
||||
|
||||
class Context {
|
||||
protected:
|
||||
Context(ContextType type_) : backend(type_) {
|
||||
Context(ContextType type_, uint32_t maximumVertexBindingCount_)
|
||||
: backend(type_), maximumVertexBindingCount(maximumVertexBindingCount_) {
|
||||
}
|
||||
|
||||
public:
|
||||
const ContextType backend;
|
||||
static constexpr const uint32_t minimumRequiredVertexBindingCount = 8;
|
||||
const uint32_t maximumVertexBindingCount;
|
||||
|
||||
public:
|
||||
Context(Context&&) = delete;
|
||||
|
||||
@@ -67,7 +67,7 @@ static_assert(underlying_type(UniformDataType::SamplerCube) == GL_SAMPLER_CUBE,
|
||||
static_assert(std::is_same<BinaryProgramFormat, GLenum>::value, "OpenGL type mismatch");
|
||||
|
||||
Context::Context()
|
||||
: gfx::Context(gfx::ContextType::OpenGL), maximumVertexBindingCount([] {
|
||||
: gfx::Context(gfx::ContextType::OpenGL, [] {
|
||||
GLint value;
|
||||
MBGL_CHECK_ERROR(glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &value));
|
||||
return value;
|
||||
|
||||
@@ -172,9 +172,7 @@ public:
|
||||
#endif // MBGL_USE_GLES2
|
||||
|
||||
bool supportsHalfFloatTextures = false;
|
||||
const uint32_t maximumVertexBindingCount;
|
||||
static constexpr const uint32_t minimumRequiredVertexBindingCount = 8;
|
||||
|
||||
|
||||
private:
|
||||
State<value::StencilFunc> stencilFunc;
|
||||
State<value::StencilMask> stencilMask;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <mbgl/renderer/render_tile.hpp>
|
||||
#include <mbgl/style/types.hpp>
|
||||
#include <mbgl/tile/tile.hpp>
|
||||
#include <mbgl/gl/context.hpp>
|
||||
#include <mbgl/gfx/context.hpp>
|
||||
#include <mbgl/util/logging.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
@@ -99,25 +99,22 @@ void RenderLayer::checkRenderability(const PaintParameters& parameters,
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: remove cast
|
||||
auto& glContext = reinterpret_cast<gl::Context&>(parameters.context);
|
||||
|
||||
if (activeBindingCount > glContext.maximumVertexBindingCount) {
|
||||
if (activeBindingCount > parameters.context.maximumVertexBindingCount) {
|
||||
Log::Error(Event::OpenGL,
|
||||
"The layer '%s' uses more data-driven properties than the current device "
|
||||
"supports, and will have rendering errors. To ensure compatibility with this "
|
||||
"device, use %d fewer data driven properties in this layer.",
|
||||
getID().c_str(),
|
||||
activeBindingCount - glContext.minimumRequiredVertexBindingCount);
|
||||
activeBindingCount - parameters.context.minimumRequiredVertexBindingCount);
|
||||
hasRenderFailures = true;
|
||||
} else if (activeBindingCount > glContext.minimumRequiredVertexBindingCount) {
|
||||
} else if (activeBindingCount > parameters.context.minimumRequiredVertexBindingCount) {
|
||||
Log::Warning(Event::OpenGL,
|
||||
"The layer '%s' uses more data-driven properties than some devices may support. "
|
||||
"Though it will render correctly on this device, it may have rendering errors "
|
||||
"on other devices. To ensure compatibility with all devices, use %d fewer "
|
||||
"data-driven properties in this layer.",
|
||||
getID().c_str(),
|
||||
activeBindingCount - glContext.minimumRequiredVertexBindingCount);
|
||||
activeBindingCount - parameters.context.minimumRequiredVertexBindingCount);
|
||||
hasRenderFailures = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user