Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Buffer refactor #6504

Merged
merged 8 commits into from
Oct 5, 2016
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 17 additions & 21 deletions cmake/core-files.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -48,51 +48,35 @@ set(MBGL_CORE_FILES
# geometry
src/mbgl/geometry/anchor.hpp
src/mbgl/geometry/binpack.hpp
src/mbgl/geometry/buffer.hpp
src/mbgl/geometry/circle_buffer.cpp
src/mbgl/geometry/circle_buffer.hpp
src/mbgl/geometry/collision_box_buffer.cpp
src/mbgl/geometry/collision_box_buffer.hpp
src/mbgl/geometry/debug_font_buffer.cpp
src/mbgl/geometry/debug_font_buffer.hpp
src/mbgl/geometry/debug_font_data.hpp
src/mbgl/geometry/elements_buffer.cpp
src/mbgl/geometry/elements_buffer.hpp
src/mbgl/geometry/feature_index.cpp
src/mbgl/geometry/feature_index.hpp
src/mbgl/geometry/fill_buffer.cpp
src/mbgl/geometry/fill_buffer.hpp
src/mbgl/geometry/icon_buffer.cpp
src/mbgl/geometry/icon_buffer.hpp
src/mbgl/geometry/line_atlas.cpp
src/mbgl/geometry/line_atlas.hpp
src/mbgl/geometry/line_buffer.cpp
src/mbgl/geometry/line_buffer.hpp
src/mbgl/geometry/static_vertex_buffer.cpp
src/mbgl/geometry/static_vertex_buffer.hpp
src/mbgl/geometry/text_buffer.cpp
src/mbgl/geometry/text_buffer.hpp
src/mbgl/geometry/vao.cpp
src/mbgl/geometry/vao.hpp

# gl
include/mbgl/gl/gl.hpp
src/mbgl/gl/context.cpp
src/mbgl/gl/context.hpp
src/mbgl/gl/debugging.cpp
src/mbgl/gl/debugging.hpp
src/mbgl/gl/element_group.hpp
src/mbgl/gl/extension.cpp
src/mbgl/gl/extension.hpp
src/mbgl/gl/gl.cpp
src/mbgl/gl/index_buffer.hpp
src/mbgl/gl/object.cpp
src/mbgl/gl/object.hpp
src/mbgl/gl/state.hpp
src/mbgl/gl/texture.hpp
src/mbgl/gl/types.hpp
src/mbgl/gl/value.cpp
src/mbgl/gl/value.hpp
src/mbgl/gl/vao.cpp
src/mbgl/gl/vao.hpp
src/mbgl/gl/vertex_array.cpp
src/mbgl/gl/vertex_array.hpp
src/mbgl/gl/vertex_buffer.hpp

# layout
src/mbgl/layout/clip_lines.cpp
Expand Down Expand Up @@ -183,12 +167,18 @@ set(MBGL_CORE_FILES
# shader
src/mbgl/shader/circle_shader.cpp
src/mbgl/shader/circle_shader.hpp
src/mbgl/shader/circle_vertex.cpp
src/mbgl/shader/circle_vertex.hpp
src/mbgl/shader/collision_box_shader.cpp
src/mbgl/shader/collision_box_shader.hpp
src/mbgl/shader/collision_box_vertex.cpp
src/mbgl/shader/collision_box_vertex.hpp
src/mbgl/shader/icon_shader.cpp
src/mbgl/shader/icon_shader.hpp
src/mbgl/shader/line_shader.cpp
src/mbgl/shader/line_shader.hpp
src/mbgl/shader/line_vertex.cpp
src/mbgl/shader/line_vertex.hpp
src/mbgl/shader/linepattern_shader.cpp
src/mbgl/shader/linepattern_shader.hpp
src/mbgl/shader/linesdf_shader.cpp
Expand All @@ -201,13 +191,19 @@ set(MBGL_CORE_FILES
src/mbgl/shader/pattern_shader.hpp
src/mbgl/shader/plain_shader.cpp
src/mbgl/shader/plain_shader.hpp
src/mbgl/shader/plain_vertex.cpp
src/mbgl/shader/plain_vertex.hpp
src/mbgl/shader/raster_shader.cpp
src/mbgl/shader/raster_shader.hpp
src/mbgl/shader/raster_vertex.cpp
src/mbgl/shader/raster_vertex.hpp
src/mbgl/shader/sdf_shader.cpp
src/mbgl/shader/sdf_shader.hpp
src/mbgl/shader/shader.cpp
src/mbgl/shader/shader.hpp
src/mbgl/shader/shaders.hpp
src/mbgl/shader/texture_rect_vertex.cpp
src/mbgl/shader/texture_rect_vertex.hpp
src/mbgl/shader/uniform.cpp
src/mbgl/shader/uniform.hpp

Expand Down
38 changes: 35 additions & 3 deletions include/mbgl/gl/gl.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#pragma once

#include <mbgl/gl/types.hpp>

#include <stdexcept>
#include <type_traits>
#include <limits>

#if __APPLE__
#include "TargetConditionals.h"
Expand Down Expand Up @@ -36,12 +40,40 @@ struct Error : std::runtime_error {

void checkError(const char *cmd, const char *file, int line);

} // namespace gl
} // namespace mbgl

#ifndef NDEBUG
#define MBGL_CHECK_ERROR(cmd) ([&]() { struct __MBGL_C_E { ~__MBGL_C_E() { ::mbgl::gl::checkError(#cmd, __FILE__, __LINE__); } } __MBGL_C_E; return cmd; }())
#else
#define MBGL_CHECK_ERROR(cmd) (cmd)
#endif

template <typename T> struct AttributeType;

template <> struct AttributeType<int8_t> : std::integral_constant<GLenum, GL_BYTE> {};
template <> struct AttributeType<uint8_t> : std::integral_constant<GLenum, GL_UNSIGNED_BYTE> {};
template <> struct AttributeType<int16_t> : std::integral_constant<GLenum, GL_SHORT> {};
template <> struct AttributeType<uint16_t> : std::integral_constant<GLenum, GL_UNSIGNED_SHORT> {};
template <> struct AttributeType<int32_t> : std::integral_constant<GLenum, GL_INT> {};
template <> struct AttributeType<uint32_t> : std::integral_constant<GLenum, GL_UNSIGNED_INT> {};
template <> struct AttributeType<float> : std::integral_constant<GLenum, GL_FLOAT> {};

template <std::size_t memberOffset, class V, class E, std::size_t N>
void bindVertexAttribute(AttributeLocation location, const E (V::*)[N], const int8_t* offset) {
static_assert(std::is_standard_layout<V>::value, "vertex type must use standard layout");
static_assert(memberOffset % 4 == 0, "vertex attribute must be optimally aligned");
static_assert(1 <= N && N <= 4, "count must be 1, 2, 3, or 4");
static_assert(sizeof(V) <= std::numeric_limits<GLsizei>::max(), "vertex type is too big");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol

MBGL_CHECK_ERROR(glEnableVertexAttribArray(location));
MBGL_CHECK_ERROR(glVertexAttribPointer(location,
static_cast<GLint>(N),
AttributeType<E>::value,
false,
static_cast<GLsizei>(sizeof(V)),
offset + memberOffset));
}

// This has to be a macro because it uses the offsetof macro, which is the only legal way to get a member offset.
#define MBGL_BIND_VERTEX_ATTRIBUTE(VertexType, member, offset) \
::mbgl::gl::bindVertexAttribute<offsetof(VertexType, member)>(Shader::member, &VertexType::member, offset)

} // namespace gl
} // namespace mbgl
115 changes: 0 additions & 115 deletions src/mbgl/geometry/buffer.hpp

This file was deleted.

15 changes: 0 additions & 15 deletions src/mbgl/geometry/circle_buffer.cpp

This file was deleted.

24 changes: 0 additions & 24 deletions src/mbgl/geometry/circle_buffer.hpp

This file was deleted.

27 changes: 0 additions & 27 deletions src/mbgl/geometry/collision_box_buffer.cpp

This file was deleted.

20 changes: 0 additions & 20 deletions src/mbgl/geometry/collision_box_buffer.hpp

This file was deleted.

Loading