Blender  V3.3
gl_immediate.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2016 by Mike Erwin. All rights reserved. */
3 
10 #pragma once
11 
12 #include "MEM_guardedalloc.h"
13 
14 #include "glew-mx.h"
15 
16 #include "gpu_immediate_private.hh"
17 
18 namespace blender::gpu {
19 
20 /* size of internal buffer */
21 #define DEFAULT_INTERNAL_BUFFER_SIZE (4 * 1024 * 1024)
22 
23 class GLImmediate : public Immediate {
24  private:
25  /* Use two buffers for strict and non-strict vertex count to
26  * avoid some huge driver slowdown (see T70922).
27  * Use accessor functions to get / modify. */
28  struct {
30  GLuint vbo_id = 0;
32  size_t buffer_offset = 0;
34  size_t buffer_size = 0;
35  } buffer, buffer_strict;
37  size_t bytes_mapped_ = 0;
39  GLuint vao_id_ = 0;
40 
41  public:
42  GLImmediate();
43  ~GLImmediate();
44 
45  uchar *begin() override;
46  void end() override;
47 
48  private:
49  GLuint &vbo_id()
50  {
51  return strict_vertex_len ? buffer_strict.vbo_id : buffer.vbo_id;
52  };
53 
54  size_t &buffer_offset()
55  {
56  return strict_vertex_len ? buffer_strict.buffer_offset : buffer.buffer_offset;
57  };
58 
59  size_t &buffer_size()
60  {
61  return strict_vertex_len ? buffer_strict.buffer_size : buffer.buffer_size;
62  };
63 };
64 
65 } // namespace blender::gpu
unsigned char uchar
Definition: BLI_sys_types.h:70
Read Guarded memory(de)allocation.
uchar * begin() override
Definition: gl_immediate.cc:64