diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-04-02 22:47:24 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-04-05 11:49:17 +0200 |
commit | ebd850803278a6ffbca0bc8a5b96d415b239aeb8 (patch) | |
tree | 3ff807a5fa1bde413120997e00fcab68044544f6 /src/mbgl/gl | |
parent | c02010ab6c8958f6897921c82cf47411de759269 (diff) | |
download | qtlocation-mapboxgl-ebd850803278a6ffbca0bc8a5b96d415b239aeb8.tar.gz |
[core] add getResource template to gfx::*Resource classes
Diffstat (limited to 'src/mbgl/gl')
-rw-r--r-- | src/mbgl/gl/context.cpp | 45 | ||||
-rw-r--r-- | src/mbgl/gl/context.hpp | 12 | ||||
-rw-r--r-- | src/mbgl/gl/program.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/vertex_array.cpp | 2 |
4 files changed, 29 insertions, 32 deletions
diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index bc93042e25..f4e565c766 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -220,7 +220,7 @@ void Context::verifyProgramLinkage(ProgramID program_) { throw std::runtime_error("program failed to link"); } -std::unique_ptr<const gfx::VertexBufferResource> +std::unique_ptr<gfx::VertexBufferResource> Context::createVertexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType usage) { BufferID id = 0; MBGL_CHECK_ERROR(glGenBuffers(1, &id)); @@ -230,12 +230,12 @@ Context::createVertexBufferResource(const void* data, std::size_t size, const gf return std::make_unique<gl::VertexBufferResource>(std::move(result)); } -void Context::updateVertexBufferResource(const gfx::VertexBufferResource& resource, const void* data, std::size_t size) { - vertexBuffer = reinterpret_cast<const gl::VertexBufferResource&>(resource).buffer; +void Context::updateVertexBufferResource(gfx::VertexBufferResource& resource, const void* data, std::size_t size) { + vertexBuffer = static_cast<gl::VertexBufferResource&>(resource).buffer; MBGL_CHECK_ERROR(glBufferSubData(GL_ARRAY_BUFFER, 0, size, data)); } -std::unique_ptr<const gfx::IndexBufferResource> +std::unique_ptr<gfx::IndexBufferResource> Context::createIndexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType usage) { BufferID id = 0; MBGL_CHECK_ERROR(glGenBuffers(1, &id)); @@ -246,11 +246,11 @@ Context::createIndexBufferResource(const void* data, std::size_t size, const gfx return std::make_unique<gl::IndexBufferResource>(std::move(result)); } -void Context::updateIndexBufferResource(const gfx::IndexBufferResource& resource, const void* data, std::size_t size) { +void Context::updateIndexBufferResource(gfx::IndexBufferResource& resource, const void* data, std::size_t size) { // Be sure to unbind any existing vertex array object before binding the index buffer // so that we don't mess up another VAO bindVertexArray = 0; - globalVertexArrayState.indexBuffer = reinterpret_cast<const gl::IndexBufferResource&>(resource).buffer; + globalVertexArrayState.indexBuffer = static_cast<gl::IndexBufferResource&>(resource).buffer; MBGL_CHECK_ERROR(glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, size, data)); } @@ -470,9 +470,8 @@ Context::createFramebuffer(const gfx::Texture& color, } auto fbo = createFramebuffer(); bindFramebuffer = fbo; - MBGL_CHECK_ERROR(glFramebufferTexture2D( - GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, - reinterpret_cast<const gl::TextureResource&>(*color.resource).texture, 0)); + MBGL_CHECK_ERROR(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, + color.getResource<gl::TextureResource>().texture, 0)); bindDepthStencilRenderbuffer(depthStencil); checkFramebuffer(); return { color.size, std::move(fbo) }; @@ -481,9 +480,8 @@ Context::createFramebuffer(const gfx::Texture& color, Framebuffer Context::createFramebuffer(const gfx::Texture& color) { auto fbo = createFramebuffer(); bindFramebuffer = fbo; - MBGL_CHECK_ERROR(glFramebufferTexture2D( - GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, - reinterpret_cast<const gl::TextureResource&>(*color.resource).texture, 0)); + MBGL_CHECK_ERROR(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, + color.getResource<gl::TextureResource>().texture, 0)); checkFramebuffer(); return { color.size, std::move(fbo) }; } @@ -496,9 +494,8 @@ Context::createFramebuffer(const gfx::Texture& color, } auto fbo = createFramebuffer(); bindFramebuffer = fbo; - MBGL_CHECK_ERROR(glFramebufferTexture2D( - GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, - reinterpret_cast<const gl::TextureResource&>(*color.resource).texture, 0)); + MBGL_CHECK_ERROR(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, + color.getResource<gl::TextureResource>().texture, 0)); auto& depthResource = depth.getResource<gl::RenderbufferResource>(); MBGL_CHECK_ERROR(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, @@ -525,27 +522,27 @@ Context::createTextureResource(const Size size, return resource; } -void Context::updateTextureResource(const gfx::TextureResource& resource, +void Context::updateTextureResource(gfx::TextureResource& resource, const Size size, const void* data, gfx::TexturePixelType format, gfx::TextureChannelDataType type) { // Always use texture unit 0 for manipulating it. activeTextureUnit = 0; - texture[0] = reinterpret_cast<const gl::TextureResource&>(resource).texture; + texture[0] = static_cast<gl::TextureResource&>(resource).texture; MBGL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, Enum<gfx::TexturePixelType>::to(format), size.width, size.height, 0, Enum<gfx::TexturePixelType>::to(format), Enum<gfx::TextureChannelDataType>::to(type), data)); } -void Context::updateTextureResourceSub(const gfx::TextureResource& resource, - const uint16_t xOffset, - const uint16_t yOffset, - const Size size, - const void* data, - gfx::TexturePixelType format, - gfx::TextureChannelDataType type) { +void Context::updateTextureResourceSub(gfx::TextureResource& resource, + const uint16_t xOffset, + const uint16_t yOffset, + const Size size, + const void* data, + gfx::TexturePixelType format, + gfx::TextureChannelDataType type) { // Always use texture unit 0 for manipulating it. activeTextureUnit = 0; texture[0] = static_cast<const gl::TextureResource&>(resource).texture; diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index d09bf7522e..530ff1c73f 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -192,14 +192,14 @@ private: State<value::PointSize> pointSize; #endif // MBGL_USE_GLES2 - std::unique_ptr<const gfx::VertexBufferResource> createVertexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType) override; - void updateVertexBufferResource(const gfx::VertexBufferResource&, const void* data, std::size_t size) override; - std::unique_ptr<const gfx::IndexBufferResource> createIndexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType) override; - void updateIndexBufferResource(const gfx::IndexBufferResource&, const void* data, std::size_t size) override; + std::unique_ptr<gfx::VertexBufferResource> createVertexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType) override; + void updateVertexBufferResource(gfx::VertexBufferResource&, const void* data, std::size_t size) override; + std::unique_ptr<gfx::IndexBufferResource> createIndexBufferResource(const void* data, std::size_t size, const gfx::BufferUsageType) override; + void updateIndexBufferResource(gfx::IndexBufferResource&, const void* data, std::size_t size) override; std::unique_ptr<gfx::TextureResource> createTextureResource(Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; - void updateTextureResource(const gfx::TextureResource&, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; - void updateTextureResourceSub(const gfx::TextureResource&, const uint16_t xOffset, const uint16_t yOffset, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; + void updateTextureResource(gfx::TextureResource&, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; + void updateTextureResourceSub(gfx::TextureResource&, const uint16_t xOffset, const uint16_t yOffset, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; std::unique_ptr<gfx::RenderbufferResource> createRenderbufferResource(gfx::RenderbufferPixelType, Size size) override; diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp index 92747e60c4..023b738b93 100644 --- a/src/mbgl/gl/program.hpp +++ b/src/mbgl/gl/program.hpp @@ -194,7 +194,7 @@ public: instance.textureStates.bind(context, textureBindings); - auto& vertexArray = static_cast<gl::DrawScopeResource&>(*drawScope.resource).vertexArray; + auto& vertexArray = drawScope.getResource<gl::DrawScopeResource>().vertexArray; vertexArray.bind(context, indexBuffer, instance.attributeLocations.toBindingArray(attributeBindings)); diff --git a/src/mbgl/gl/vertex_array.cpp b/src/mbgl/gl/vertex_array.cpp index 445ff37e12..831b118fce 100644 --- a/src/mbgl/gl/vertex_array.cpp +++ b/src/mbgl/gl/vertex_array.cpp @@ -9,7 +9,7 @@ void VertexArray::bind(Context& context, const gfx::IndexBuffer& indexBuffer, const AttributeBindingArray& bindings) { context.bindVertexArray = state->vertexArray; - state->indexBuffer = reinterpret_cast<const gl::IndexBufferResource&>(*indexBuffer.resource).buffer; + state->indexBuffer = indexBuffer.getResource<gl::IndexBufferResource>().buffer; state->bindings.reserve(bindings.size()); for (AttributeLocation location = 0; location < bindings.size(); ++location) { |