xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
buffer.hpp
浏览该文件的文档.
1#pragma once
2#include <xcal/public.h>
3
4#include <array>
5#include <cstddef>
6#include <vector>
9
11 friend class Object;
12
13 private:
14 gl::GLuint vbo_ = 0;
15 gl::GLuint size_ = 0;
16 gl::GLenum target_{};
17
18 private:
19 public:
20 Buffer(const Buffer &) = delete;
21 Buffer(Buffer &&o) { swap(o); }
22
23 Buffer &operator=(const Buffer &) = delete;
25 swap(o);
26 return *this;
27 }
28 Buffer(gl::GLenum target);
29 ~Buffer();
30
31 public:
32 bool is_valid() const { return vbo_ != 0; };
33 void bind_as(gl::GLenum target) const;
34 void bind() const;
35 void unbind() const;
36 static void unbind(gl::GLenum target);
37 void get_buffer_data(std::vector<char> &data) const;
38 void get_buffer_data(std::vector<char> &data, gl::GLenum target) const;
39
40 public:
41 gl::GLuint id() const { return vbo_; }
42 void swap(Buffer &o) {
43 std::swap(vbo_, o.vbo_);
44 std::swap(size_, o.size_);
45 std::swap(target_, o.target_);
46 }
47 void buffer_data(const void *data, gl::GLuint size, gl::GLenum usage);
48 template <typename T>
49 void buffer_data(const std::vector<T> &data, gl::GLenum usage) {
50 buffer_data(data.data(), data.size() * sizeof(T), usage);
51 }
52 template <typename T, size_t N>
53 void buffer_data(const std::array<T, N> &data, gl::GLenum usage) {
54 buffer_data(data.data(), data.size() * sizeof(T), usage);
55 }
56 template <typename T>
57 void buffer_data(const std::vector<T> &data, gl::GLenum usage,
58 size_t size) {
59 buffer_data(nullptr, size * sizeof(T), usage);
60 buffer_sub_data(data.data(), 0, data.size() * sizeof(T));
61 }
62 template <typename T, size_t N>
63 void buffer_data(const std::array<T, N> &data, gl::GLenum usage,
64 size_t size) {
65 buffer_data(nullptr, size * sizeof(T), usage);
66 buffer_sub_data(data.data(), 0, data.size() * sizeof(T));
67 }
68 void buffer_sub_data(const void *data, gl::GLuint offset, gl::GLuint size);
69 template <typename T>
70 void buffer_sub_data(const std::vector<T> &data, gl::GLuint offset) {
71 buffer_sub_data(data.data(), offset, data.size() * sizeof(T));
72 }
73
74 void destroy();
75};
76} // namespace xcal::render::opengl::GL
void buffer_data(const void *data, gl::GLuint size, gl::GLenum usage)
void buffer_sub_data(const std::vector< T > &data, gl::GLuint offset)
Definition buffer.hpp:70
void buffer_data(const std::vector< T > &data, gl::GLenum usage, size_t size)
Definition buffer.hpp:57
void get_buffer_data(std::vector< char > &data, gl::GLenum target) const
void buffer_data(const std::array< T, N > &data, gl::GLenum usage)
Definition buffer.hpp:53
void buffer_data(const std::vector< T > &data, gl::GLenum usage)
Definition buffer.hpp:49
Buffer(const Buffer &)=delete
Buffer & operator=(Buffer &&o)
Definition buffer.hpp:24
Buffer & operator=(const Buffer &)=delete
void buffer_data(const std::array< T, N > &data, gl::GLenum usage, size_t size)
Definition buffer.hpp:63
unsigned int GLuint
Definition typedef.hpp:21
#define XCAL_API
Definition public.h:69