/* * Copyright (C) 2021 Christopher J. Howard * * This file is part of Antkeeper source code. * * Antkeeper source code is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Antkeeper source code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Antkeeper source code. If not, see . */ #ifndef ANTKEEPER_GL_VERTEX_ATTRIBUTE_HPP #define ANTKEEPER_GL_VERTEX_ATTRIBUTE_HPP #include #include namespace gl { class vertex_buffer; enum class vertex_attribute_type { int_8, uint_8, int_16, uint_16, int_32, uint_32, float_16, float_32, float_64 }; /** * Describes a vertex attribute within a vertex buffer. * * @see gl::vertex_buffer * @see gl::vertex_array */ struct vertex_attribute { /// Pointer to the vertex buffer containing vertex attribute data. const vertex_buffer* buffer; /// Offset to the first component of the first instance of this attribute in the vertex buffer, in bytes. std::size_t offset; /// Number of bytes between consecutive instances of this attribute in the vertex buffer. A value of `0` indicates attribute instances are tightly packed. std::size_t stride; /// Data type of each component in the attribute. vertex_attribute_type type; /// Number of components per attribute instance. Supported values are `1`, `2`, `3`, and `4`. std::uint8_t components; }; } // namespace gl #endif // ANTKEEPER_GL_VERTEX_ATTRIBUTE_HPP