OGLplus  (0.59.0) a C++ wrapper for rendering APIs

api.hpp
Go to the documentation of this file.
1 #ifndef OGLPLUS_GL_API_API_HPP
9 #define OGLPLUS_GL_API_API_HPP
10 
11 #include "../glsl/source_ref.hpp"
12 #include "c_api.hpp"
13 #include "enum_types.hpp"
14 #include "extensions.hpp"
15 #include "object_name.hpp"
16 #include "prog_var_loc.hpp"
17 #include "type_utils.hpp"
18 #include <eagine/quantities.hpp>
19 #include <eagine/scope_exit.hpp>
20 #include <eagine/string_list.hpp>
22 
23 namespace eagine::oglp {
24 //------------------------------------------------------------------------------
25 #define OGLPAFP(FUNC) decltype(c_api::FUNC), &c_api::FUNC
26 //------------------------------------------------------------------------------
31 template <typename ApiTraits>
32 class basic_gl_operations : public basic_gl_c_api<ApiTraits> {
33 
34 public:
36  using api_traits = ApiTraits;
37 
40 
41  using sizei_type = typename gl_types::sizei_type;
42  using sizeiptr_type = typename gl_types::sizeiptr_type;
43  using int_type = typename gl_types::int_type;
44  using uint_type = typename gl_types::uint_type;
45  using int64_type = typename gl_types::int64_type;
46  using uint64_type = typename gl_types::uint64_type;
47  using intptr_type = typename gl_types::intptr_type;
48  using bool_type = typename gl_types::bool_type;
49  using char_type = typename gl_types::char_type;
50  using enum_type = typename gl_types::enum_type;
51  using float_type = typename gl_types::float_type;
52  using double_type = typename gl_types::double_type;
53  using bitfield_type = typename gl_types::bitfield_type;
54 
55  using sync_type = typename gl_types::sync_type;
56  using name_type = typename gl_types::name_type;
57 
58  using void_ptr_type = typename gl_types::void_ptr_type;
59  using const_void_ptr_type = typename gl_types::const_void_ptr_type;
60 
61  using vertex_buffer_binding = uint_type;
62 
63  using debug_callback_type = typename c_api::debug_callback_type;
64 
67 
71 
75 
79 
83 
84  // utilities
85  constexpr auto type_of(buffer_name) const noexcept {
86 #ifdef GL_BUFFER
87  return object_type(GL_BUFFER);
88 #else
89  return object_type(0);
90 #endif
91  }
92 
93  constexpr auto type_of(framebuffer_name) const noexcept {
94 #ifdef GL_FRAMEBUFFER
95  return object_type(GL_FRAMEBUFFER);
96 #else
97  return object_type(0);
98 #endif
99  }
100 
101  constexpr auto type_of(program_pipeline_name) const noexcept {
102 #ifdef GL_PROGRAM_PIPELINE
103  return object_type(GL_PROGRAM_PIPELINE);
104 #else
105  return object_type(0);
106 #endif
107  }
108 
109  constexpr auto type_of(program_name) const noexcept {
110 #ifdef GL_PROGRAM
111  return object_type(GL_PROGRAM);
112 #else
113  return object_type(0);
114 #endif
115  }
116 
117  constexpr auto type_of(query_name) const noexcept {
118 #ifdef GL_QUERY
119  return object_type(GL_QUERY);
120 #else
121  return object_type(0);
122 #endif
123  }
124 
125  constexpr auto type_of(renderbuffer_name) const noexcept {
126 #ifdef GL_RENDERBUFFER
127  return object_type(GL_RENDERBUFFER);
128 #else
129  return object_type(0);
130 #endif
131  }
132 
133  constexpr auto type_of(sampler_name) const noexcept {
134 #ifdef GL_SAMPLER
135  return object_type(GL_SAMPLER);
136 #else
137  return object_type(0);
138 #endif
139  }
140 
141  constexpr auto type_of(shader_name) const noexcept {
142 #ifdef GL_SHADER
143  return object_type(GL_SHADER);
144 #else
145  return object_type(0);
146 #endif
147  }
148 
149  constexpr auto type_of(texture_name) const noexcept {
150 #ifdef GL_TEXTURE
151  return object_type(GL_TEXTURE);
152 #else
153  return object_type(0);
154 #endif
155  }
156 
157  constexpr auto type_of(transform_feedback_name) const noexcept {
158 #ifdef GL_TRANSFORM_FEEDBACK
159  return object_type(GL_TRANSFORM_FEEDBACK);
160 #else
161  return object_type(0);
162 #endif
163  }
164 
165  constexpr auto type_of(vertex_array_name) const noexcept {
166 #ifdef GL_VERTEX_ARRAY
167  return object_type(GL_VERTEX_ARRAY);
168 #else
169  return object_type(0);
170 #endif
171  }
172 
173  template <typename W, W c_api::*F, typename Signature = typename W::signature>
174  class func;
175 
176  template <typename W, W c_api::*F, typename RVC, typename... Params>
177  class func<W, F, RVC(Params...)>
178  : public wrapped_c_api_function<c_api, api_traits, nothing_t, W, F> {
179  using base = wrapped_c_api_function<c_api, api_traits, nothing_t, W, F>;
180 
181  private:
182  template <typename Res>
183  constexpr auto _check(Res&& res) const noexcept {
184  res.error_code(this->api().GetError());
185  return std::forward<Res>(res);
186  }
187 
188  protected:
189  template <typename... Args>
190  constexpr auto _chkcall(Args&&... args) const noexcept {
191  return this->_check(this->_call(std::forward<Args>(args)...));
192  }
193 
194  using base::_conv;
195 
196  template <identifier_t I>
197  static constexpr auto _conv(prog_var_location<I> loc) noexcept {
198  return loc.index();
199  }
200 
201  template <typename T>
202  static constexpr auto _conv(degrees_t<T> angle) noexcept {
203  return angle.value();
204  }
205 
206  template <typename... Args>
207  constexpr auto _cnvchkcall(Args&&... args) const noexcept {
208  return this->_chkcall(_conv(std::forward<Args>(args))...)
209  .cast_to(type_identity<RVC>{});
210  }
211 
212  public:
213  using base::base;
214 
215  constexpr auto operator()(Params... params) const noexcept {
216  return this->_chkcall(_conv(params)...)
217  .cast_to(type_identity<RVC>{});
218  }
219 
220  auto bind(Params... params) const noexcept {
221  return [=] {
222  return (*this)(params...);
223  };
224  }
225  };
226 
227  // numeric query function
228  template <
229  typename PreTypeList,
230  typename QueryClassList,
231  typename PostTypeList,
232  typename QueryResult,
233  typename W,
234  W c_api::*F>
235  struct query_func;
236 
237  template <
238  typename... PreParams,
239  typename... QueryClasses,
240  typename... PostParams,
241  typename QueryResult,
242  typename W,
243  W c_api::*F>
244  struct query_func<
245  mp_list<PreParams...>,
246  mp_list<QueryClasses...>,
247  mp_list<PostParams...>,
248  QueryResult,
249  W,
250  F> : func<W, F> {
251  using func<W, F>::func;
252 
253  template <
254  typename Query,
255  typename = std::enable_if_t<
256  (true || ... || is_enum_class_value_v<QueryClasses, Query>)>,
257  typename = std::enable_if_t<!std::is_array_v<typename Query::tag_type>>>
258  constexpr auto operator()(
259  PreParams... pre_params,
260  Query query,
261  PostParams... post_params) const noexcept {
262  using RV = typename Query::tag_type;
263  QueryResult result{};
264  return this
265  ->_cnvchkcall(
266  pre_params..., enum_type(query), post_params..., &result)
267  .replaced_with(result)
268  .cast_to(type_identity<RV>{});
269  }
270 
271  template <
272  typename Query,
273  typename = std::enable_if_t<
274  (true || ... || is_enum_class_value_v<QueryClasses, Query>)>>
275  auto operator()(
276  PreParams... pre_params,
277  Query query,
278  PostParams... post_params,
279  span<QueryResult> dest) const noexcept {
280  EAGINE_ASSERT(dest.size());
281  return this->_cnvchkcall(
282  pre_params..., enum_type(query), post_params..., dest.data());
283  }
284  };
285 
286  // generate / create objects
287  struct : func<OGLPAFP(FenceSync)> {
288  using func<OGLPAFP(FenceSync)>::func;
289 
290  constexpr auto operator()(sync_condition cond) const noexcept {
291  return this->_cnvchkcall(cond, bitfield_type(0));
292  }
293 
294  constexpr auto operator()(
295  sync_condition cond,
296  enum_bitfield<sync_flag_bit> flags) const noexcept {
297  return this->_cnvchkcall(cond, bitfield_type(flags));
298  }
299  } fence_sync;
300 
301  template <typename ObjTag, typename W, W c_api::*GenObjects>
302  struct make_object_func : func<W, GenObjects> {
303  using func<W, GenObjects>::func;
304 
305  constexpr auto operator()(span<name_type> names) const noexcept {
306  return this->_chkcall(sizei_type(names.size()), names.data());
307  }
308 
309  constexpr auto operator()(
310  gl_object_name_span<gl_object_name<ObjTag>> names) const noexcept {
311  return (*this)(names.raw_handles());
312  }
313 
314  constexpr auto operator()() const noexcept {
315  name_type n{};
316  return this->_chkcall(1, &n).replaced_with(n).cast_to(
317  type_identity<gl_owned_object_name<ObjTag>>{});
318  }
319  };
320 
321  struct : func<OGLPAFP(CreateShader)> {
322  using func<OGLPAFP(CreateShader)>::func;
323 
324  constexpr auto operator()(shader_type type) const noexcept {
325  return this->_cnvchkcall(type).cast_to(
326  type_identity<owned_shader_name>{});
327  }
328  } create_shader;
329 
330  struct : func<OGLPAFP(CreateProgram)> {
331  using func<OGLPAFP(CreateProgram)>::func;
332 
333  constexpr auto operator()() const noexcept {
334  return this->_chkcall().cast_to(
335  type_identity<owned_program_name>{});
336  }
337  } create_program;
338 
339  make_object_func<buffer_tag, OGLPAFP(GenBuffers)> gen_buffers;
340 
341  make_object_func<buffer_tag, OGLPAFP(CreateBuffers)> create_buffers;
342 
343  make_object_func<framebuffer_tag, OGLPAFP(GenFramebuffers)> gen_framebuffers;
344 
345  make_object_func<framebuffer_tag, OGLPAFP(CreateFramebuffers)>
346  create_framebuffers;
347 
348  make_object_func<program_pipeline_tag, OGLPAFP(GenProgramPipelines)>
349  gen_program_pipelines;
350 
351  make_object_func<program_pipeline_tag, OGLPAFP(CreateProgramPipelines)>
352  create_program_pipelines;
353 
354  make_object_func<query_tag, OGLPAFP(GenQueries)> gen_queries;
355 
356  make_object_func<query_tag, OGLPAFP(CreateQueries)> create_queries;
357 
358  make_object_func<renderbuffer_tag, OGLPAFP(GenRenderbuffers)>
359  gen_renderbuffers;
360 
361  make_object_func<renderbuffer_tag, OGLPAFP(CreateRenderbuffers)>
362  create_renderbuffers;
363 
364  make_object_func<sampler_tag, OGLPAFP(GenSamplers)> gen_samplers;
365 
366  make_object_func<sampler_tag, OGLPAFP(CreateSamplers)> create_samplers;
367 
368  make_object_func<texture_tag, OGLPAFP(GenTextures)> gen_textures;
369 
370  make_object_func<texture_tag, OGLPAFP(CreateTextures)> create_textures;
371 
372  make_object_func<transform_feedback_tag, OGLPAFP(GenTransformFeedbacks)>
373  gen_transform_feedbacks;
374 
375  make_object_func<transform_feedback_tag, OGLPAFP(CreateTransformFeedbacks)>
376  create_transform_feedbacks;
377 
378  make_object_func<vertex_array_tag, OGLPAFP(GenVertexArrays)>
379  gen_vertex_arrays;
380 
381  make_object_func<vertex_array_tag, OGLPAFP(CreateVertexArrays)>
382  create_vertex_arrays;
383 
384  struct : func<OGLPAFP(GenPathsNV)> {
385  using func<OGLPAFP(GenPathsNV)>::func;
386 
387  constexpr auto operator()() const noexcept {
388  return this->_chkcall(1).cast_to(
389  type_identity<owned_path_nv_name>{});
390  }
391  } create_paths_nv;
392 
393  // delete objects
394  struct : func<OGLPAFP(DeleteSync)> {
395  using func<OGLPAFP(DeleteSync)>::func;
396 
397  constexpr auto operator()(sync_type sync) const noexcept {
398  return this->_chkcall(sync);
399  }
400 
401  auto bind(sync_type sync) const noexcept {
402  return [this, sync] {
403  return (*this)(sync);
404  };
405  }
406 
407  auto later_by(cleanup_group& cleanup, sync_type sync) const -> auto& {
408  return cleanup.add_ret(bind(sync));
409  }
410 
411  auto raii(sync_type& sync) const noexcept {
412  return eagine::finally(bind(sync));
413  }
414  } delete_sync;
415 
416  template <typename ObjTag, typename W, W c_api::*DeleteObjects>
417  struct delete_object_func : func<W, DeleteObjects> {
418  using func<W, DeleteObjects>::func;
419 
420  constexpr auto operator()(span<const name_type> names) const noexcept {
421  return this->_chkcall(sizei_type(names.size()), names.data());
422  }
423 
424  constexpr auto operator()(
425  gl_object_name_view<gl_object_name<ObjTag>> names) const noexcept {
426  return (*this)(names.raw_handles());
427  }
428 
429  constexpr auto
430  operator()(gl_owned_object_name<ObjTag> name) const noexcept {
431  auto n = name.release();
432  return this->_chkcall(1, &n);
433  }
434 
435  auto bind(gl_owned_object_name<ObjTag>& name) const noexcept {
436  return [this, &name] {
437  (*this)(std::move(name));
438  };
439  }
440 
441  auto later_by(
442  cleanup_group& cleanup,
443  gl_owned_object_name<ObjTag>& name) const -> auto& {
444  return cleanup.add_ret(bind(name));
445  }
446 
447  auto raii(gl_owned_object_name<ObjTag>& name) const noexcept {
448  return eagine::finally(bind(name));
449  }
450  };
451 
452  struct : func<OGLPAFP(DeleteShader)> {
453  using func<OGLPAFP(DeleteShader)>::func;
454 
455  constexpr auto operator()(owned_shader_name name) const noexcept {
456  return this->_chkcall(name.release());
457  }
458 
459  auto bind(owned_shader_name& name) const noexcept {
460  return [this, &name] {
461  return (*this)(std::move(name));
462  };
463  }
464 
465  auto later_by(cleanup_group& cleanup, owned_shader_name& name) const
466  -> auto& {
467  return cleanup.add_ret(bind(name));
468  }
469 
470  auto raii(owned_shader_name& name) const noexcept {
471  return eagine::finally(bind(name));
472  }
473  } delete_shader;
474 
475  struct : func<OGLPAFP(DeleteProgram)> {
476  using func<OGLPAFP(DeleteProgram)>::func;
477 
478  constexpr auto operator()(owned_program_name name) const noexcept {
479  return this->_chkcall(name.release());
480  }
481 
482  auto bind(owned_program_name& name) const noexcept {
483  return [this, &name] {
484  return (*this)(std::move(name));
485  };
486  }
487 
488  auto later_by(cleanup_group& cleanup, owned_program_name& name) const
489  -> auto& {
490  return cleanup.add_ret(bind(name));
491  }
492 
493  auto raii(owned_program_name& name) const noexcept {
494  return eagine::finally(bind(name));
495  }
496  } delete_program;
497 
498  delete_object_func<buffer_tag, OGLPAFP(DeleteBuffers)> delete_buffers;
499 
500  delete_object_func<framebuffer_tag, OGLPAFP(DeleteFramebuffers)>
501  delete_framebuffers;
502 
503  delete_object_func<program_pipeline_tag, OGLPAFP(DeleteProgramPipelines)>
504  delete_program_pipelines;
505 
506  delete_object_func<query_tag, OGLPAFP(DeleteQueries)> delete_queries;
507 
508  delete_object_func<renderbuffer_tag, OGLPAFP(DeleteRenderbuffers)>
509  delete_renderbuffers;
510 
511  delete_object_func<sampler_tag, OGLPAFP(DeleteSamplers)> delete_samplers;
512 
513  delete_object_func<texture_tag, OGLPAFP(DeleteTextures)> delete_textures;
514 
515  delete_object_func<transform_feedback_tag, OGLPAFP(DeleteTransformFeedbacks)>
516  delete_transform_feedbacks;
517 
518  delete_object_func<vertex_array_tag, OGLPAFP(DeleteVertexArrays)>
519  delete_vertex_arrays;
520 
521  struct : func<OGLPAFP(DeletePathsNV)> {
522  using func<OGLPAFP(DeletePathsNV)>::func;
523 
524  auto bind(owned_path_nv_name& name) const noexcept {
525  return [this, &name] {
526  (*this)(std::move(name));
527  };
528  }
529 
530  constexpr auto operator()(owned_path_nv_name name) const noexcept {
531  return this->_chkcall(name.release(), 1);
532  }
533 
534  auto raii(owned_path_nv_name& name) const noexcept {
535  return eagine::finally(bind(name));
536  }
537  } delete_paths_nv;
538 
539  // is_object
540  func<OGLPAFP(IsSync), true_false(sync_type)> is_sync;
541 
542  template <typename ObjTag, typename W, W c_api::*IsObject>
543  using is_object_func =
544  func<W, IsObject, true_false(gl_object_name<ObjTag>)>;
545 
546  is_object_func<buffer_tag, OGLPAFP(IsBuffer)> is_buffer;
547 
548  is_object_func<framebuffer_tag, OGLPAFP(IsFramebuffer)> is_framebuffer;
549 
550  is_object_func<program_pipeline_tag, OGLPAFP(IsProgramPipeline)>
551  is_program_pipeline;
552 
553  is_object_func<program_tag, OGLPAFP(IsProgram)> is_program;
554 
555  is_object_func<query_tag, OGLPAFP(IsQuery)> is_query;
556 
557  is_object_func<renderbuffer_tag, OGLPAFP(IsRenderbuffer)> is_renderbuffer;
558 
559  is_object_func<sampler_tag, OGLPAFP(IsSampler)> is_sampler;
560 
561  is_object_func<shader_tag, OGLPAFP(IsShader)> is_shader;
562 
563  is_object_func<texture_tag, OGLPAFP(IsTexture)> is_texture;
564 
565  is_object_func<transform_feedback_tag, OGLPAFP(IsTransformFeedback)>
566  is_transform_feedback;
567 
568  is_object_func<vertex_array_tag, OGLPAFP(IsVertexArray)> is_vertex_array;
569 
570  is_object_func<path_nv_tag, OGLPAFP(IsPathNV)> is_path_nv;
571 
572  // enable
573  func<OGLPAFP(Enable), void(capability)> enable;
574  func<OGLPAFP(Enablei), void(capability, uint_type)> enablei;
575 
576  // disable
577  func<OGLPAFP(Disable), void(capability)> disable;
578  func<OGLPAFP(Disablei), void(capability, uint_type)> disablei;
579 
580  // is_enabled
581  func<OGLPAFP(IsEnabled), true_false(capability)> is_enabled;
582  func<OGLPAFP(IsEnabledi), true_false(capability, uint_type)> is_enabledi;
583 
584  // memory barrier
585  func<OGLPAFP(MemoryBarrier), void(enum_bitfield<memory_barrier_bit>)>
586  memory_barrier;
587 
588  func<OGLPAFP(MemoryBarrierByRegion), void(enum_bitfield<memory_barrier_bit>)>
589  memory_barrier_by_region;
590 
591  // viewport
592  struct : func<OGLPAFP(Viewport)> {
593  using base = func<OGLPAFP(Viewport)>;
594 
595  using base::base;
596  using base::operator();
597 
598  constexpr auto operator()(sizei_type w, sizei_type h) const noexcept {
599  return base::operator()(0, 0, w, h);
600  }
601 
602  constexpr auto
603  operator()(std::tuple<sizei_type, sizei_type> wh) const noexcept {
604  return base::operator()(0, 0, std::get<0>(wh), std::get<1>(wh));
605  }
606 
607  constexpr auto
608  operator()(std::tuple<int_type, int_type, sizei_type, sizei_type> c)
609  const noexcept {
610  return base::operator()(
611  std::get<0>(c), std::get<1>(c), std::get<2>(c), std::get<3>(c));
612  }
613  } viewport;
614 
615  // stencil func
616  func<OGLPAFP(StencilFunc), void(compare_function, int_type, uint_type)>
617  stencil_func;
618 
619  func<
620  OGLPAFP(StencilFuncSeparate),
621  void(face_mode, compare_function, int_type, uint_type)>
622  stencil_func_separate;
623 
624  // stencil op
625  func<
626  OGLPAFP(StencilOp),
627  void(stencil_operation, stencil_operation, stencil_operation)>
628  stencil_op;
629 
630  func<
631  OGLPAFP(StencilOpSeparate),
632  void(face_mode, stencil_operation, stencil_operation, stencil_operation)>
633  stencil_op_separate;
634 
635  // depth func
636  func<OGLPAFP(DepthFunc), void(compare_function)> depth_func;
637 
638  // buffer masks
639  func<OGLPAFP(ColorMask), void(true_false, true_false, true_false, true_false)>
640  color_mask;
641 
642  func<
643  OGLPAFP(ColorMaski),
644  void(uint_type, true_false, true_false, true_false, true_false)>
645  color_mask_i;
646 
647  func<OGLPAFP(DepthMask), void(true_false)> depth_mask;
648 
649  func<OGLPAFP(StencilMask), void(uint_type)> stencil_mask;
650 
651  func<OGLPAFP(StencilMaskSeparate), void(face_mode, uint_type)>
652  stencil_mask_separate;
653 
654  // clear
655  func<OGLPAFP(ClearColor)> clear_color;
656  func<OGLPAFP(ClearDepth)> clear_depth;
657  func<OGLPAFP(ClearStencil)> clear_stencil;
658  func<OGLPAFP(Clear), void(enum_bitfield<buffer_clear_bit>)> clear;
659 
660  // shader ops
661  struct : func<OGLPAFP(ShaderSource)> {
662  using func<OGLPAFP(ShaderSource)>::func;
663 
664  constexpr auto operator()(
665  shader_name shdr,
666  const glsl_source_ref& source) const noexcept {
667  return this->_chkcall(
668  name_type(shdr), source.count(), source.parts(), source.lengths());
669  }
670  } shader_source;
671 
672  func<OGLPAFP(CompileShader), void(shader_name)> compile_shader;
673 
674  struct : func<OGLPAFP(CompileShaderInclude)> {
675  using func<OGLPAFP(CompileShaderInclude)>::func;
676 
677  constexpr auto operator()(
678  shader_name shdr,
679  const glsl_source_ref& paths) const noexcept {
680  return this->_chkcall(
681  name_type(shdr), paths.count(), paths.parts(), paths.lengths());
682  }
683  } compile_shader_include;
684 
685  query_func<
686  mp_list<shader_name>,
687  mp_list<shader_parameter>,
688  mp_list<>,
689  int_type,
690  OGLPAFP(GetShaderiv)>
691  get_shader_i;
692 
693  struct : func<OGLPAFP(GetShaderInfoLog)> {
694  using func<OGLPAFP(GetShaderInfoLog)>::func;
695 
696  constexpr auto
697  operator()(shader_name shdr, span<char_type> dest) const noexcept {
698  sizei_type real_len{0};
699  return this
700  ->_chkcall(
701  name_type(shdr), sizei_type(dest.size()), &real_len, dest.data())
702  .replaced_with(head(dest, span_size(real_len)));
703  }
704  } get_shader_info_log;
705 
706  // program ops
707  func<OGLPAFP(AttachShader), void(program_name, shader_name)> attach_shader;
708 
709  func<OGLPAFP(DetachShader), void(program_name, shader_name)> detach_shader;
710 
711  func<OGLPAFP(LinkProgram), void(program_name)> link_program;
712 
713  query_func<
714  mp_list<program_name>,
715  mp_list<program_parameter>,
716  mp_list<>,
717  int_type,
718  OGLPAFP(GetProgramiv)>
719  get_program_i;
720 
721  struct : func<OGLPAFP(GetProgramInfoLog)> {
722  using func<OGLPAFP(GetProgramInfoLog)>::func;
723 
724  constexpr auto
725  operator()(program_name prog, span<char_type> dest) const noexcept {
726  sizei_type real_len{0};
727  return this
728  ->_chkcall(
729  name_type(prog), sizei_type(dest.size()), &real_len, dest.data())
730  .replaced_with(head(dest, span_size(real_len)));
731  }
732  } get_program_info_log;
733 
734  func<OGLPAFP(UseProgram), void(program_name)> use_program;
735 
736  func<
737  OGLPAFP(GetProgramResourceIndex),
738  uint_type(program_name, program_interface, string_view)>
739  get_program_resource_index;
740 
741  struct : func<OGLPAFP(GetProgramResourceIndex)> {
742  using func<OGLPAFP(GetProgramResourceIndex)>::func;
743  constexpr auto
744  operator()(program_name prog, string_view name) const noexcept {
745 #ifdef GL_SHADER_STORAGE_BLOCK
746  return this
747  ->_cnvchkcall(name_type(prog), GL_SHADER_STORAGE_BLOCK, name)
748  .cast_to(type_identity<shader_storage_block_index>{});
749 #else
750  return this->_fake().cast_to(
751  type_identity<shader_storage_block_index>{});
752 #endif
753  }
754  } get_shader_storage_block_index;
755 
756  func<
759  get_program_resource_location;
760 
761  struct : func<OGLPAFP(GetProgramResourceName)> {
762  using func<OGLPAFP(GetProgramResourceName)>::func;
763 
764  constexpr auto operator()(
765  program_name prog,
766  program_interface intf,
767  uint_type index,
768  span<char_type> dest) const noexcept {
769  sizei_type real_len{0};
770  return this
771  ->_chkcall(
772  name_type(prog),
773  enum_type(intf),
774  index,
775  sizei_type(dest.size()),
776  &real_len,
777  dest.data())
778  .replaced_with(head(dest, span_size(real_len)));
779  }
780  } get_program_resource_name;
781 
782  query_func<
783  mp_list<program_name, program_interface>,
784  mp_list<program_property>,
785  mp_list<>,
786  int_type,
787  OGLPAFP(GetProgramInterfaceiv)>
788  get_program_interface_i;
789 
790  struct : func<OGLPAFP(GetProgramResourceiv)> {
791  using func<OGLPAFP(GetProgramResourceiv)>::func;
792 
793  auto operator()(
794  program_name prog,
795  program_interface intf,
796  uint_type index,
797  enum_class_view<program_property> props,
798  span<int_type> dest) const noexcept {
799  sizei_type real_len{0};
800  return this
801  ->_cnvchkcall(
802  prog,
803  intf,
804  index,
805  props.size(),
806  props.raw_enums().data(),
807  dest.size(),
808  &real_len,
809  dest.data())
810  .replaced_with(head(dest, span_size(real_len)));
811  }
812  } get_program_resource_i;
813 
814  struct : func<OGLPAFP(GetProgramResourcefvNV)> {
815  using func<OGLPAFP(GetProgramResourcefvNV)>::func;
816 
817  auto operator()(
818  program_name prog,
819  program_interface intf,
820  uint_type index,
821  enum_class_view<program_property> props,
822  span<float_type> dest) const noexcept {
823  sizei_type real_len{0};
824  return this
825  ->_cnvchkcall(
826  prog,
827  intf,
828  index,
829  props.size(),
830  props.raw_enums().data(),
831  dest.size(),
832  &real_len,
833  dest.data())
834  .replaced_with(head(dest, span_size(real_len)));
835  }
836  } get_program_resource_f;
837 
838  func<
839  OGLPAFP(BindAttribLocation),
841  bind_attrib_location;
842 
843  func<
844  OGLPAFP(GetAttribLocation),
846  get_attrib_location;
847 
848  struct : func<OGLPAFP(GetActiveAttrib)> {
849  using func<OGLPAFP(GetActiveAttrib)>::func;
850 
851  constexpr auto operator()(
852  program_name prog,
854  span<char_type> dest) const noexcept {
855  int_type size{0};
856  enum_type type{0};
857  sizei_type real_len{0};
858  return this
859  ->_chkcall(
860  name_type(prog),
861  loc.index(),
862  sizei_type(dest.size()),
863  &real_len,
864  &size,
865  &type,
866  dest.data())
867  .replaced_with(head(dest, span_size(real_len)));
868  }
869  } get_active_attrib_name;
870 
871  func<
872  OGLPAFP(BindFragDataLocation),
874  bind_frag_data_location;
875 
876  func<
877  OGLPAFP(GetFragDataLocation),
879  get_frag_data_location;
880 
881  func<OGLPAFP(GetFragDataIndex), int_type(program_name, string_view)>
882  get_frag_data_index;
883 
884  func<
886  void(program_name, uint_type, frag_data_location, string_view)>
887  bind_frag_data_location_indexed;
888 
889  func<OGLPAFP(GetUniformLocation), uniform_location(program_name, string_view)>
890  get_uniform_location;
891 
892  func<
893  OGLPAFP(GetUniformBlockIndex),
895  get_uniform_block_index;
896 
897  struct : func<OGLPAFP(GetActiveUniformName)> {
898  using func<OGLPAFP(GetActiveUniformName)>::func;
899 
900  constexpr auto operator()(
901  program_name prog,
902  uniform_location loc,
903  span<char_type> dest) const noexcept {
904  sizei_type real_len{0};
905  return this
906  ->_chkcall(
907  name_type(prog),
908  loc.index(),
909  sizei_type(dest.size()),
910  &real_len,
911  dest.data())
912  .replaced_with(head(dest, span_size(real_len)));
913  }
914  } get_active_uniform_name;
915 
916  func<
919  get_subroutine_uniform_location;
920 
921  struct : func<OGLPAFP(GetActiveSubroutineUniformName)> {
922  using func<OGLPAFP(GetActiveSubroutineUniformName)>::func;
923 
924  constexpr auto operator()(
925  program_name prog,
926  shader_type shdr_type,
927  uniform_location loc,
928  span<char_type> dest) const noexcept {
929  sizei_type real_len{0};
930  return this
931  ->_chkcall(
932  name_type(prog),
933  enum_type(shdr_type),
934  loc.index(),
935  sizei_type(dest.size()),
936  &real_len,
937  dest.data())
938  .replaced_with(head(dest, span_size(real_len)));
939  }
940  } get_active_subroutine_uniform_name;
941 
942  func<
943  OGLPAFP(GetSubroutineIndex),
945  get_subroutine_index;
946 
947  struct : func<OGLPAFP(GetActiveSubroutineName)> {
948  using func<OGLPAFP(GetActiveSubroutineName)>::func;
949 
950  constexpr auto operator()(
951  program_name prog,
952  shader_type shdr_type,
954  span<char_type> dest) const noexcept {
955  sizei_type real_len{0};
956  return this
957  ->_cnvchkcall(
958  prog,
959  shdr_type,
960  loc.index(),
961  dest.size(),
962  &real_len,
963  dest.data())
964  .replaced_with(head(dest, span_size(real_len)));
965  }
966  } get_active_subroutine_name;
967 
968  // uniform
969  // uint
970  func<OGLPAFP(Uniform1ui), void(uniform_location, uint_type)> uniform1ui;
971  func<OGLPAFP(Uniform2ui), void(uniform_location, uint_type, uint_type)>
972  uniform2ui;
973  func<
974  OGLPAFP(Uniform3ui),
975  void(uniform_location, uint_type, uint_type, uint_type)>
976  uniform3ui;
977  func<
978  OGLPAFP(Uniform4ui),
979  void(uniform_location, uint_type, uint_type, uint_type, uint_type)>
980  uniform4ui;
981 
982  struct : func<OGLPAFP(Uniform1uiv)> {
983  using func<OGLPAFP(Uniform1uiv)>::func;
984 
985  constexpr auto operator()(uniform_location loc, span<const uint_type> v)
986  const noexcept {
987  return this->_cnvchkcall(loc, sizei_type(v.size() / 1), v.data());
988  }
989  } uniform1uiv;
990 
991  struct : func<OGLPAFP(Uniform2uiv)> {
992  using func<OGLPAFP(Uniform2uiv)>::func;
993 
994  constexpr auto operator()(uniform_location loc, span<const uint_type> v)
995  const noexcept {
996  return this->_cnvchkcall(loc, sizei_type(v.size() / 2), v.data());
997  }
998  } uniform2uiv;
999 
1000  struct : func<OGLPAFP(Uniform3uiv)> {
1001  using func<OGLPAFP(Uniform3uiv)>::func;
1002 
1003  constexpr auto operator()(uniform_location loc, span<const uint_type> v)
1004  const noexcept {
1005  return this->_cnvchkcall(loc, sizei_type(v.size() / 3), v.data());
1006  }
1007  } uniform3uiv;
1008 
1009  struct : func<OGLPAFP(Uniform4uiv)> {
1010  using func<OGLPAFP(Uniform4uiv)>::func;
1011 
1012  constexpr auto operator()(uniform_location loc, span<const uint_type> v)
1013  const noexcept {
1014  return this->_cnvchkcall(loc, sizei_type(v.size() / 4), v.data());
1015  }
1016  } uniform4uiv;
1017 
1018  // int
1019  func<OGLPAFP(Uniform1i), void(uniform_location, int_type)> uniform1i;
1020  func<OGLPAFP(Uniform2i), void(uniform_location, int_type, int_type)>
1021  uniform2i;
1022  func<OGLPAFP(Uniform3i), void(uniform_location, int_type, int_type, int_type)>
1023  uniform3i;
1024  func<
1025  OGLPAFP(Uniform4i),
1026  void(uniform_location, int_type, int_type, int_type, int_type)>
1027  uniform4i;
1028 
1029  struct : func<OGLPAFP(Uniform1iv)> {
1030  using func<OGLPAFP(Uniform1iv)>::func;
1031 
1032  constexpr auto operator()(uniform_location loc, span<const int_type> v)
1033  const noexcept {
1034  return this->_cnvchkcall(loc, sizei_type(v.size() / 1), v.data());
1035  }
1036  } uniform1iv;
1037 
1038  struct : func<OGLPAFP(Uniform2iv)> {
1039  using func<OGLPAFP(Uniform2iv)>::func;
1040 
1041  constexpr auto operator()(uniform_location loc, span<const int_type> v)
1042  const noexcept {
1043  return this->_cnvchkcall(loc, sizei_type(v.size() / 2), v.data());
1044  }
1045  } uniform2iv;
1046 
1047  struct : func<OGLPAFP(Uniform3iv)> {
1048  using func<OGLPAFP(Uniform3iv)>::func;
1049 
1050  constexpr auto operator()(uniform_location loc, span<const int_type> v)
1051  const noexcept {
1052  return this->_cnvchkcall(loc, sizei_type(v.size() / 3), v.data());
1053  }
1054  } uniform3iv;
1055 
1056  struct : func<OGLPAFP(Uniform4iv)> {
1057  using func<OGLPAFP(Uniform4iv)>::func;
1058 
1059  constexpr auto operator()(uniform_location loc, span<const int_type> v)
1060  const noexcept {
1061  return this->_cnvchkcall(loc, sizei_type(v.size() / 4), v.data());
1062  }
1063  } uniform4iv;
1064 
1065  // float
1066  func<OGLPAFP(Uniform1f), void(uniform_location, float_type)> uniform1f;
1067  func<OGLPAFP(Uniform2f), void(uniform_location, float_type, float_type)>
1068  uniform2f;
1069  func<
1070  OGLPAFP(Uniform3f),
1071  void(uniform_location, float_type, float_type, float_type)>
1072  uniform3f;
1073  func<
1074  OGLPAFP(Uniform4f),
1075  void(uniform_location, float_type, float_type, float_type, float_type)>
1076  uniform4f;
1077 
1078  struct : func<OGLPAFP(Uniform1fv)> {
1079  using func<OGLPAFP(Uniform1fv)>::func;
1080 
1081  constexpr auto operator()(
1082  uniform_location loc,
1083  span<const float_type> v) const noexcept {
1084  return this->_cnvchkcall(loc, sizei_type(v.size() / 1), v.data());
1085  }
1086  } uniform1fv;
1087 
1088  struct : func<OGLPAFP(Uniform2fv)> {
1089  using func<OGLPAFP(Uniform2fv)>::func;
1090 
1091  constexpr auto operator()(
1092  uniform_location loc,
1093  span<const float_type> v) const noexcept {
1094  return this->_cnvchkcall(loc, sizei_type(v.size() / 2), v.data());
1095  }
1096  } uniform2fv;
1097 
1098  struct : func<OGLPAFP(Uniform3fv)> {
1099  using func<OGLPAFP(Uniform3fv)>::func;
1100 
1101  constexpr auto operator()(
1102  uniform_location loc,
1103  span<const float_type> v) const noexcept {
1104  return this->_cnvchkcall(loc, sizei_type(v.size() / 3), v.data());
1105  }
1106  } uniform3fv;
1107 
1108  struct : func<OGLPAFP(Uniform4fv)> {
1109  using func<OGLPAFP(Uniform4fv)>::func;
1110 
1111  constexpr auto operator()(
1112  uniform_location loc,
1113  span<const float_type> v) const noexcept {
1114  return this->_cnvchkcall(loc, sizei_type(v.size() / 4), v.data());
1115  }
1116  } uniform4fv;
1117 
1118  // matrix float
1119  struct : func<OGLPAFP(UniformMatrix2fv)> {
1120  using func<OGLPAFP(UniformMatrix2fv)>::func;
1121 
1122  constexpr auto operator()(
1123  uniform_location loc,
1124  true_false transp,
1125  span<const float_type> v) const noexcept {
1126  return this->_cnvchkcall(
1127  loc, sizei_type(v.size() / 4), transp, v.data());
1128  }
1129  } uniform_matrix2fv;
1130 
1131  struct : func<OGLPAFP(UniformMatrix3fv)> {
1132  using func<OGLPAFP(UniformMatrix3fv)>::func;
1133 
1134  constexpr auto operator()(
1135  uniform_location loc,
1136  true_false transp,
1137  span<const float_type> v) const noexcept {
1138  return this->_cnvchkcall(
1139  loc, sizei_type(v.size() / 9), transp, v.data());
1140  }
1141  } uniform_matrix3fv;
1142 
1143  struct : func<OGLPAFP(UniformMatrix4fv)> {
1144  using func<OGLPAFP(UniformMatrix4fv)>::func;
1145 
1146  constexpr auto operator()(
1147  uniform_location loc,
1148  true_false transp,
1149  span<const float_type> v) const noexcept {
1150  return this->_cnvchkcall(
1151  loc, sizei_type(v.size() / 16), transp, v.data());
1152  }
1153  } uniform_matrix4fv;
1154 
1155  struct : func<OGLPAFP(UniformMatrix2x3fv)> {
1156  using func<OGLPAFP(UniformMatrix2x3fv)>::func;
1157 
1158  constexpr auto operator()(
1159  uniform_location loc,
1160  true_false transp,
1161  span<const float_type> v) const noexcept {
1162  return this->_cnvchkcall(
1163  loc, sizei_type(v.size() / 6), transp, v.data());
1164  }
1165  } uniform_matrix2x3fv;
1166 
1167  struct : func<OGLPAFP(UniformMatrix2x4fv)> {
1168  using func<OGLPAFP(UniformMatrix2x4fv)>::func;
1169 
1170  constexpr auto operator()(
1171  uniform_location loc,
1172  true_false transp,
1173  span<const float_type> v) const noexcept {
1174  return this->_cnvchkcall(
1175  loc, sizei_type(v.size() / 8), transp, v.data());
1176  }
1177  } uniform_matrix2x4fv;
1178 
1179  struct : func<OGLPAFP(UniformMatrix3x2fv)> {
1180  using func<OGLPAFP(UniformMatrix3x2fv)>::func;
1181 
1182  constexpr auto operator()(
1183  uniform_location loc,
1184  true_false transp,
1185  span<const float_type> v) const noexcept {
1186  return this->_cnvchkcall(
1187  loc, sizei_type(v.size() / 6), transp, v.data());
1188  }
1189  } uniform_matrix3x2fv;
1190 
1191  struct : func<OGLPAFP(UniformMatrix3x4fv)> {
1192  using func<OGLPAFP(UniformMatrix3x4fv)>::func;
1193 
1194  constexpr auto operator()(
1195  uniform_location loc,
1196  true_false transp,
1197  span<const float_type> v) const noexcept {
1198  return this->_cnvchkcall(
1199  loc, sizei_type(v.size() / 12), transp, v.data());
1200  }
1201  } uniform_matrix3x4fv;
1202 
1203  struct : func<OGLPAFP(UniformMatrix4x2fv)> {
1204  using func<OGLPAFP(UniformMatrix4x2fv)>::func;
1205 
1206  constexpr auto operator()(
1207  uniform_location loc,
1208  true_false transp,
1209  span<const float_type> v) const noexcept {
1210  return this->_cnvchkcall(
1211  loc, sizei_type(v.size() / 8), transp, v.data());
1212  }
1213  } uniform_matrix4x2fv;
1214 
1215  struct : func<OGLPAFP(UniformMatrix4x3fv)> {
1216  using func<OGLPAFP(UniformMatrix4x3fv)>::func;
1217 
1218  constexpr auto operator()(
1219  uniform_location loc,
1220  true_false transp,
1221  span<const float_type> v) const noexcept {
1222  return this->_cnvchkcall(
1223  loc, sizei_type(v.size() / 12), transp, v.data());
1224  }
1225  } uniform_matrix4x3fv;
1226 
1227  // program uniform
1228  // uint
1229  func<
1230  OGLPAFP(ProgramUniform1ui),
1231  void(program_name, uniform_location, uint_type)>
1232  program_uniform1ui;
1233 
1234  func<
1235  OGLPAFP(ProgramUniform2ui),
1236  void(program_name, uniform_location, uint_type, uint_type)>
1237  program_uniform2ui;
1238 
1239  func<
1240  OGLPAFP(ProgramUniform3ui),
1241  void(program_name, uniform_location, uint_type, uint_type, uint_type)>
1242  program_uniform3ui;
1243 
1244  func<
1245  OGLPAFP(ProgramUniform4ui),
1246  void(
1247  program_name,
1249  uint_type,
1250  uint_type,
1251  uint_type,
1252  uint_type)>
1253  program_uniform4ui;
1254 
1255  struct : func<OGLPAFP(ProgramUniform1uiv)> {
1256  using func<OGLPAFP(ProgramUniform1uiv)>::func;
1257 
1258  constexpr auto operator()(
1259  program_name prog,
1260  uniform_location loc,
1261  span<const uint_type> v) const noexcept {
1262  return this->_cnvchkcall(
1263  prog, loc, sizei_type(v.size() / 1), v.data());
1264  }
1265  } program_uniform1uiv;
1266 
1267  struct : func<OGLPAFP(ProgramUniform2uiv)> {
1268  using func<OGLPAFP(ProgramUniform2uiv)>::func;
1269 
1270  constexpr auto operator()(
1271  program_name prog,
1272  uniform_location loc,
1273  span<const uint_type> v) const noexcept {
1274  return this->_cnvchkcall(
1275  prog, loc, sizei_type(v.size() / 2), v.data());
1276  }
1277  } program_uniform2uiv;
1278 
1279  struct : func<OGLPAFP(ProgramUniform3uiv)> {
1280  using func<OGLPAFP(ProgramUniform3uiv)>::func;
1281 
1282  constexpr auto operator()(
1283  program_name prog,
1284  uniform_location loc,
1285  span<const uint_type> v) const noexcept {
1286  return this->_cnvchkcall(
1287  prog, loc, sizei_type(v.size() / 3), v.data());
1288  }
1289  } program_uniform3uiv;
1290 
1291  struct : func<OGLPAFP(ProgramUniform4uiv)> {
1292  using func<OGLPAFP(ProgramUniform4uiv)>::func;
1293 
1294  constexpr auto operator()(
1295  program_name prog,
1296  uniform_location loc,
1297  span<const uint_type> v) const noexcept {
1298  return this->_cnvchkcall(
1299  prog, loc, sizei_type(v.size() / 4), v.data());
1300  }
1301  } program_uniform4uiv;
1302 
1303  // int
1304  func<
1305  OGLPAFP(ProgramUniform1i),
1306  void(program_name, uniform_location, int_type)>
1307  program_uniform1i;
1308 
1309  func<
1310  OGLPAFP(ProgramUniform2i),
1311  void(program_name, uniform_location, int_type, int_type)>
1312  program_uniform2i;
1313 
1314  func<
1315  OGLPAFP(ProgramUniform3i),
1316  void(program_name, uniform_location, int_type, int_type, int_type)>
1317  program_uniform3i;
1318 
1319  func<
1320  OGLPAFP(ProgramUniform4i),
1321  void(program_name, uniform_location, int_type, int_type, int_type, int_type)>
1322  program_uniform4i;
1323 
1324  struct : func<OGLPAFP(ProgramUniform1iv)> {
1325  using func<OGLPAFP(ProgramUniform1iv)>::func;
1326 
1327  constexpr auto operator()(
1328  program_name prog,
1329  uniform_location loc,
1330  span<const int_type> v) const noexcept {
1331  return this->_cnvchkcall(
1332  prog, loc, sizei_type(v.size() / 1), v.data());
1333  }
1334  } program_uniform1iv;
1335 
1336  struct : func<OGLPAFP(ProgramUniform2iv)> {
1337  using func<OGLPAFP(ProgramUniform2iv)>::func;
1338 
1339  constexpr auto operator()(
1340  program_name prog,
1341  uniform_location loc,
1342  span<const int_type> v) const noexcept {
1343  return this->_cnvchkcall(
1344  prog, loc, sizei_type(v.size() / 2), v.data());
1345  }
1346  } program_uniform2iv;
1347 
1348  struct : func<OGLPAFP(ProgramUniform3iv)> {
1349  using func<OGLPAFP(ProgramUniform3iv)>::func;
1350 
1351  constexpr auto operator()(
1352  program_name prog,
1353  uniform_location loc,
1354  span<const int_type> v) const noexcept {
1355  return this->_cnvchkcall(
1356  prog, loc, sizei_type(v.size() / 3), v.data());
1357  }
1358  } program_uniform3iv;
1359 
1360  struct : func<OGLPAFP(ProgramUniform4iv)> {
1361  using func<OGLPAFP(ProgramUniform4iv)>::func;
1362 
1363  constexpr auto operator()(
1364  program_name prog,
1365  uniform_location loc,
1366  span<const int_type> v) const noexcept {
1367  return this->_cnvchkcall(
1368  prog, loc, sizei_type(v.size() / 4), v.data());
1369  }
1370  } program_uniform4iv;
1371 
1372  // float
1373  func<
1374  OGLPAFP(ProgramUniform1f),
1375  void(program_name, uniform_location, float_type)>
1376  program_uniform1f;
1377 
1378  func<
1379  OGLPAFP(ProgramUniform2f),
1380  void(program_name, uniform_location, float_type, float_type)>
1381  program_uniform2f;
1382 
1383  func<
1384  OGLPAFP(ProgramUniform3f),
1385  void(program_name, uniform_location, float_type, float_type, float_type)>
1386  program_uniform3f;
1387 
1388  func<
1389  OGLPAFP(ProgramUniform4f),
1390  void(
1391  program_name,
1393  float_type,
1394  float_type,
1395  float_type,
1396  float_type)>
1397  program_uniform4f;
1398 
1399  struct : func<OGLPAFP(ProgramUniform1fv)> {
1400  using func<OGLPAFP(ProgramUniform1fv)>::func;
1401 
1402  constexpr auto operator()(
1403  program_name prog,
1404  uniform_location loc,
1405  span<const float_type> v) const noexcept {
1406  return this->_cnvchkcall(
1407  prog, loc, sizei_type(v.size() / 1), v.data());
1408  }
1409  } program_uniform1fv;
1410 
1411  struct : func<OGLPAFP(ProgramUniform2fv)> {
1412  using func<OGLPAFP(ProgramUniform2fv)>::func;
1413 
1414  constexpr auto operator()(
1415  program_name prog,
1416  uniform_location loc,
1417  span<const float_type> v) const noexcept {
1418  return this->_cnvchkcall(
1419  prog, loc, sizei_type(v.size() / 2), v.data());
1420  }
1421  } program_uniform2fv;
1422 
1423  struct : func<OGLPAFP(ProgramUniform3fv)> {
1424  using func<OGLPAFP(ProgramUniform3fv)>::func;
1425 
1426  constexpr auto operator()(
1427  program_name prog,
1428  uniform_location loc,
1429  span<const float_type> v) const noexcept {
1430  return this->_cnvchkcall(
1431  prog, loc, sizei_type(v.size() / 3), v.data());
1432  }
1433  } program_uniform3fv;
1434 
1435  struct : func<OGLPAFP(ProgramUniform4fv)> {
1436  using func<OGLPAFP(ProgramUniform4fv)>::func;
1437 
1438  constexpr auto operator()(
1439  program_name prog,
1440  uniform_location loc,
1441  span<const float_type> v) const noexcept {
1442  return this->_cnvchkcall(
1443  prog, loc, sizei_type(v.size() / 4), v.data());
1444  }
1445  } program_uniform4fv;
1446 
1447  // matrix float
1448  struct : func<OGLPAFP(ProgramUniformMatrix2fv)> {
1449  using func<OGLPAFP(ProgramUniformMatrix2fv)>::func;
1450 
1451  constexpr auto operator()(
1452  program_name prog,
1453  uniform_location loc,
1454  true_false transp,
1455  span<const float_type> v) const noexcept {
1456  return this->_cnvchkcall(
1457  prog, loc, sizei_type(v.size() / 4), transp, v.data());
1458  }
1459  } program_uniform_matrix2fv;
1460 
1461  struct : func<OGLPAFP(ProgramUniformMatrix3fv)> {
1462  using func<OGLPAFP(ProgramUniformMatrix3fv)>::func;
1463 
1464  constexpr auto operator()(
1465  program_name prog,
1466  uniform_location loc,
1467  true_false transp,
1468  span<const float_type> v) const noexcept {
1469  return this->_cnvchkcall(
1470  prog, loc, sizei_type(v.size() / 9), transp, v.data());
1471  }
1472  } program_uniform_matrix3fv;
1473 
1474  struct : func<OGLPAFP(ProgramUniformMatrix4fv)> {
1475  using func<OGLPAFP(ProgramUniformMatrix4fv)>::func;
1476 
1477  constexpr auto operator()(
1478  program_name prog,
1479  uniform_location loc,
1480  true_false transp,
1481  span<const float_type> v) const noexcept {
1482  return this->_cnvchkcall(
1483  prog, loc, sizei_type(v.size() / 16), transp, v.data());
1484  }
1485  } program_uniform_matrix4fv;
1486 
1487  struct : func<OGLPAFP(ProgramUniformMatrix2x3fv)> {
1488  using func<OGLPAFP(ProgramUniformMatrix2x3fv)>::func;
1489 
1490  constexpr auto operator()(
1491  program_name prog,
1492  uniform_location loc,
1493  true_false transp,
1494  span<const float_type> v) const noexcept {
1495  return this->_cnvchkcall(
1496  prog, loc, sizei_type(v.size() / 6), transp, v.data());
1497  }
1498  } program_uniform_matrix2x3fv;
1499 
1500  struct : func<OGLPAFP(ProgramUniformMatrix2x4fv)> {
1501  using func<OGLPAFP(ProgramUniformMatrix2x4fv)>::func;
1502 
1503  constexpr auto operator()(
1504  program_name prog,
1505  uniform_location loc,
1506  true_false transp,
1507  span<const float_type> v) const noexcept {
1508  return this->_cnvchkcall(
1509  prog, loc, sizei_type(v.size() / 8), transp, v.data());
1510  }
1511  } program_uniform_matrix2x4fv;
1512 
1513  struct : func<OGLPAFP(ProgramUniformMatrix3x2fv)> {
1514  using func<OGLPAFP(ProgramUniformMatrix3x2fv)>::func;
1515 
1516  constexpr auto operator()(
1517  program_name prog,
1518  uniform_location loc,
1519  true_false transp,
1520  span<const float_type> v) const noexcept {
1521  return this->_cnvchkcall(
1522  prog, loc, sizei_type(v.size() / 6), transp, v.data());
1523  }
1524  } program_uniform_matrix3x2fv;
1525 
1526  struct : func<OGLPAFP(ProgramUniformMatrix3x4fv)> {
1527  using func<OGLPAFP(ProgramUniformMatrix3x4fv)>::func;
1528 
1529  constexpr auto operator()(
1530  program_name prog,
1531  uniform_location loc,
1532  true_false transp,
1533  span<const float_type> v) const noexcept {
1534  return this->_cnvchkcall(
1535  prog, loc, sizei_type(v.size() / 12), transp, v.data());
1536  }
1537  } program_uniform_matrix3x4fv;
1538 
1539  struct : func<OGLPAFP(ProgramUniformMatrix4x2fv)> {
1540  using func<OGLPAFP(ProgramUniformMatrix4x2fv)>::func;
1541 
1542  constexpr auto operator()(
1543  program_name prog,
1544  uniform_location loc,
1545  true_false transp,
1546  span<const float_type> v) const noexcept {
1547  return this->_cnvchkcall(
1548  prog, loc, sizei_type(v.size() / 8), transp, v.data());
1549  }
1550  } program_uniform_matrix4x2fv;
1551 
1552  struct : func<OGLPAFP(ProgramUniformMatrix4x3fv)> {
1553  using func<OGLPAFP(ProgramUniformMatrix4x3fv)>::func;
1554 
1555  constexpr auto operator()(
1556  program_name prog,
1557  uniform_location loc,
1558  true_false transp,
1559  span<const float_type> v) const noexcept {
1560  return this->_cnvchkcall(
1561  prog, loc, sizei_type(v.size() / 12), transp, v.data());
1562  }
1563  } program_uniform_matrix4x3fv;
1564 
1565  // shader block ops
1566  func<
1567  OGLPAFP(UniformBlockBinding),
1568  void(program_name, uniform_block_index, uint_type)>
1569  uniform_block_binding;
1570 
1571  func<
1572  OGLPAFP(ShaderStorageBlockBinding),
1573  void(program_name, shader_storage_block_index, uint_type)>
1574  shader_storage_block_binding;
1575 
1576  // buffer ops
1577  func<OGLPAFP(BindBuffer), void(buffer_target, buffer_name)> bind_buffer;
1578 
1579  func<OGLPAFP(BindBufferBase), void(buffer_target, uint_type, buffer_name)>
1580  bind_buffer_base;
1581 
1582  func<
1583  OGLPAFP(BindBufferRange),
1584  void(buffer_target, uint_type, buffer_name, intptr_type, sizeiptr_type)>
1585  bind_buffer_range;
1586 
1587  struct : func<OGLPAFP(BufferStorage)> {
1588  using func<OGLPAFP(BufferStorage)>::func;
1589 
1590  constexpr auto operator()(
1591  buffer_target tgt,
1592  sizeiptr_type size,
1593  const_void_ptr_type data,
1594  enum_bitfield<buffer_storage_bit> flags) const noexcept {
1595  return this->_cnvchkcall(tgt, size, data, flags);
1596  }
1597 
1598  constexpr auto
1599  operator()(buffer_target tgt, sizeiptr_type size) const noexcept {
1600  return (*this)(tgt, size, nullptr, {});
1601  }
1602 
1603  } buffer_storage;
1604 
1605  struct : func<OGLPAFP(NamedBufferStorage)> {
1606  using func<OGLPAFP(NamedBufferStorage)>::func;
1607 
1608  constexpr auto operator()(
1609  buffer_name buf,
1610  sizeiptr_type size,
1611  const_void_ptr_type data,
1612  enum_bitfield<buffer_storage_bit> flags) const noexcept {
1613  return this->_cnvchkcall(buf, size, data, flags);
1614  }
1615 
1616  constexpr auto
1617  operator()(buffer_name buf, sizeiptr_type size) const noexcept {
1618  return (*this)(buf, size, nullptr, {});
1619  }
1620  } named_buffer_storage;
1621 
1622  struct : func<OGLPAFP(BufferData)> {
1623  using func<OGLPAFP(BufferData)>::func;
1624 
1625  constexpr auto operator()(
1626  buffer_target tgt,
1627  const buffer_data_spec& values,
1628  buffer_usage usg) const noexcept {
1629  return this->_cnvchkcall(
1630  tgt, sizei_type(values.size()), values.data(), usg);
1631  }
1632  } buffer_data;
1633 
1634  struct : func<OGLPAFP(NamedBufferData)> {
1635  using func<OGLPAFP(NamedBufferData)>::func;
1636 
1637  constexpr auto operator()(
1638  buffer_name buf,
1639  const buffer_data_spec& values,
1640  buffer_usage usg) const noexcept {
1641  return this->_cnvchkcall(
1642  buf, sizei_type(values.size()), values.data(), usg);
1643  }
1644  } named_buffer_data;
1645 
1646  struct : func<OGLPAFP(BufferSubData)> {
1647  using func<OGLPAFP(BufferSubData)>::func;
1648 
1649  constexpr auto operator()(
1650  buffer_target tgt,
1651  intptr_type offs,
1652  const buffer_data_spec& values) const noexcept {
1653  return this->_cnvchkcall(
1654  tgt, offs, sizei_type(values.size()), values.data());
1655  }
1656  } buffer_sub_data;
1657 
1658  struct : func<OGLPAFP(NamedBufferSubData)> {
1659  using func<OGLPAFP(NamedBufferSubData)>::func;
1660 
1661  constexpr auto operator()(
1662  buffer_name buf,
1663  intptr_type offs,
1664  const buffer_data_spec& values) const noexcept {
1665  return this->_cnvchkcall(
1666  buf, offs, sizei_type(values.size()), values.data());
1667  }
1668  } named_buffer_sub_data;
1669 
1670  struct : func<OGLPAFP(ClearBufferData)> {
1671  using func<OGLPAFP(ClearBufferData)>::func;
1672 
1673  constexpr auto operator()(
1674  buffer_target tgt,
1675  pixel_internal_format ifmt,
1676  pixel_format fmt,
1677  pixel_data_type type,
1678  const_void_ptr_type data) const noexcept {
1679  return this->_cnvchkcall(tgt, ifmt, fmt, type, data);
1680  }
1681 
1682  template <typename T>
1683  constexpr auto operator()(
1684  buffer_target tgt,
1685  pixel_internal_format ifmt,
1686  const T& value) const noexcept {
1687  return (*this)(
1688  tgt, ifmt, pixel_format_of<T>(), pixel_data_type_of<T>(), &value);
1689  }
1690 
1691  template <typename T>
1692  constexpr auto
1693  operator()(buffer_target tgt, const T& value) const noexcept {
1694  return (*this)(tgt, internal_format_of<T>(), &value);
1695  }
1696 
1697  template <typename T>
1698  constexpr auto operator()(
1699  buffer_target tgt,
1700  pixel_internal_format ifmt,
1701  type_identity<T>) const noexcept {
1702  return (*this)(
1703  tgt, ifmt, pixel_format_of<T>(), pixel_data_type_of<T>(), nullptr);
1704  }
1705 
1706  template <typename T>
1707  constexpr auto
1708  operator()(buffer_target tgt, type_identity<T> tid) const noexcept {
1709  return (*this)(tgt, internal_format_of<T>(), tid);
1710  }
1711  } clear_buffer_data;
1712 
1713  struct : func<OGLPAFP(ClearNamedBufferData)> {
1714  using func<OGLPAFP(ClearNamedBufferData)>::func;
1715 
1716  constexpr auto operator()(
1717  buffer_name buf,
1718  pixel_internal_format ifmt,
1719  pixel_format fmt,
1720  pixel_data_type type,
1721  const_void_ptr_type data) const noexcept {
1722  return this->_cnvchkcall(buf, ifmt, fmt, type, data);
1723  }
1724 
1725  template <typename T>
1726  constexpr auto operator()(
1727  buffer_name buf,
1728  pixel_internal_format ifmt,
1729  const T& value) const noexcept {
1730  return (*this)(
1731  buf, ifmt, pixel_format_of<T>(), pixel_data_type_of<T>(), &value);
1732  }
1733 
1734  template <typename T>
1735  constexpr auto
1736  operator()(buffer_name buf, const T& value) const noexcept {
1737  return (*this)(buf, internal_format_of<T>(), &value);
1738  }
1739 
1740  template <typename T>
1741  constexpr auto operator()(
1742  buffer_name buf,
1743  pixel_internal_format ifmt,
1744  pixel_format fmt,
1745  type_identity<T>) const noexcept {
1746  return (*this)(buf, ifmt, fmt, pixel_data_type_of<T>(), nullptr);
1747  }
1748 
1749  template <typename T>
1750  constexpr auto
1751  operator()(buffer_name buf, type_identity<T> tid) const noexcept {
1752  return (*this)(buf, internal_format_of<T>(), tid);
1753  }
1754  } clear_named_buffer_data;
1755 
1756  struct : func<OGLPAFP(ClearBufferSubData)> {
1757  using func<OGLPAFP(ClearBufferSubData)>::func;
1758 
1759  constexpr auto operator()(
1760  buffer_target tgt,
1761  pixel_internal_format ifmt,
1762  intptr_type offs,
1763  sizeiptr_type size,
1764  pixel_format fmt,
1765  pixel_data_type type,
1766  const_void_ptr_type data) const noexcept {
1767  return this->_cnvchkcall(tgt, ifmt, offs, size, fmt, type, data);
1768  }
1769 
1770  template <typename T>
1771  constexpr auto operator()(
1772  buffer_target tgt,
1773  intptr_type offs,
1774  sizeiptr_type count,
1775  pixel_internal_format ifmt,
1776  const T& value) const noexcept {
1777  return (*this)(
1778  tgt,
1779  ifmt,
1780  offs,
1781  count * span_size_of<T>(),
1782  pixel_format_of<T>(),
1783  pixel_data_type_of<T>(),
1784  &value);
1785  }
1786 
1787  template <typename T>
1788  constexpr auto operator()(
1789  buffer_target tgt,
1790  intptr_type offs,
1791  sizeiptr_type count,
1792  const T& value) const noexcept {
1793  return (*this)(tgt, offs, count, internal_format_of<T>(), value);
1794  }
1795  } clear_buffer_sub_data;
1796 
1797  struct : func<OGLPAFP(ClearNamedBufferSubData)> {
1798  using func<OGLPAFP(ClearNamedBufferSubData)>::func;
1799 
1800  constexpr auto operator()(
1801  buffer_name buf,
1802  pixel_internal_format ifmt,
1803  intptr_type offs,
1804  sizeiptr_type size,
1805  pixel_format fmt,
1806  pixel_data_type type,
1807  const_void_ptr_type data) const noexcept {
1808  return this->_cnvchkcall(buf, ifmt, offs, size, fmt, type, data);
1809  }
1810 
1811  template <typename T>
1812  constexpr auto operator()(
1813  buffer_name buf,
1814  intptr_type offs,
1815  sizeiptr_type count,
1816  pixel_internal_format ifmt,
1817  const T& value) const noexcept {
1818  return (*this)(
1819  buf,
1820  ifmt,
1821  offs,
1822  count * span_size_of<T>(),
1823  pixel_format_of<T>(),
1824  pixel_data_type_of<T>(),
1825  &value);
1826  }
1827 
1828  template <typename T>
1829  constexpr auto operator()(
1830  buffer_name buf,
1831  intptr_type offs,
1832  sizeiptr_type count,
1833  const T& value) const noexcept {
1834  return (*this)(buf, offs, count, internal_format_of<T>(), value);
1835  }
1836  } clear_named_buffer_sub_data;
1837 
1838  func<
1839  OGLPAFP(MapBuffer),
1840  void_ptr_type(buffer_target, enum_bitfield<buffer_map_access_bit>)>
1841  map_buffer;
1842 
1843  func<
1844  OGLPAFP(MapNamedBuffer),
1845  void_ptr_type(buffer_name, enum_bitfield<buffer_map_access_bit>)>
1846  map_named_buffer;
1847 
1848  func<
1849  OGLPAFP(MapBufferRange),
1850  void_ptr_type(
1851  buffer_target,
1852  intptr_type,
1853  sizeiptr_type,
1854  enum_bitfield<buffer_map_access_bit>)>
1855  map_buffer_range;
1856 
1857  func<
1858  OGLPAFP(MapNamedBufferRange),
1859  void_ptr_type(
1860  buffer_name,
1861  intptr_type,
1862  sizeiptr_type,
1863  enum_bitfield<buffer_map_access_bit>)>
1864  map_named_buffer_range;
1865 
1866  func<
1867  OGLPAFP(FlushMappedBufferRange),
1868  void_ptr_type(buffer_target, intptr_type, sizeiptr_type)>
1869  flush_mapped_buffer_range;
1870 
1871  func<
1872  OGLPAFP(FlushMappedNamedBufferRange),
1873  void_ptr_type(buffer_name, intptr_type, sizeiptr_type)>
1874  flush_mapped_named_buffer_range;
1875 
1876  func<OGLPAFP(UnmapBuffer), void_ptr_type(buffer_target)> unmap_buffer;
1877 
1878  func<OGLPAFP(UnmapNamedBuffer), void_ptr_type(buffer_name)>
1879  unmap_named_buffer;
1880 
1881  func<OGLPAFP(InvalidateBufferData), void(buffer_name)>
1882  invalidate_buffer_data;
1883 
1884  func<
1885  OGLPAFP(InvalidateBufferData),
1886  void(buffer_name, intptr_type, sizeiptr_type)>
1887  invalidate_buffer_sub_data;
1888 
1889  func<
1890  OGLPAFP(CopyBufferSubData),
1891  void(buffer_target, buffer_target, intptr_type, intptr_type, sizeiptr_type)>
1892  copy_buffer_sub_data;
1893 
1894  func<
1895  OGLPAFP(CopyNamedBufferSubData),
1896  void(buffer_name, buffer_name, intptr_type, intptr_type, sizeiptr_type)>
1897  copy_named_buffer_sub_data;
1898 
1899  query_func<
1900  mp_list<buffer_target>,
1901  mp_list<buffer_parameter>,
1902  mp_list<>,
1903  int_type,
1904  OGLPAFP(GetBufferParameteriv)>
1905  get_buffer_parameter_i;
1906 
1907  query_func<
1908  mp_list<buffer_name>,
1909  mp_list<buffer_parameter>,
1910  mp_list<>,
1911  int_type,
1912  OGLPAFP(GetNamedBufferParameteriv)>
1913  get_named_buffer_parameter_i;
1914 
1915  query_func<
1916  mp_list<buffer_target>,
1917  mp_list<buffer_parameter>,
1918  mp_list<>,
1919  int64_type,
1920  OGLPAFP(GetBufferParameteri64v)>
1921  get_buffer_parameter_i64;
1922 
1923  query_func<
1924  mp_list<buffer_name>,
1925  mp_list<buffer_parameter>,
1926  mp_list<>,
1927  int64_type,
1928  OGLPAFP(GetNamedBufferParameteri64v)>
1929  get_named_buffer_parameter_i64;
1930 
1931  // vertex_array ops
1932  func<OGLPAFP(BindVertexArray), void(vertex_array_name)> bind_vertex_array;
1933 
1934  func<
1935  OGLPAFP(BindVertexBuffer),
1936  void(vertex_buffer_binding, buffer_name, intptr_type, sizei_type)>
1937  bind_vertex_buffer;
1938 
1939  func<
1940  OGLPAFP(VertexArrayVertexBuffer),
1941  void(
1943  vertex_buffer_binding,
1944  buffer_name,
1945  intptr_type,
1946  sizei_type)>
1947  vertex_array_vertex_buffer;
1948 
1949  func<OGLPAFP(VertexArrayElementBuffer), void(vertex_array_name, buffer_name)>
1950  vertex_array_element_buffer;
1951 
1952  func<OGLPAFP(EnableVertexAttribArray), void(vertex_attrib_location)>
1953  enable_vertex_attrib_array;
1954 
1955  func<
1956  OGLPAFP(EnableVertexArrayAttrib),
1958  enable_vertex_array_attrib;
1959 
1960  func<OGLPAFP(DisableVertexAttribArray), void(vertex_attrib_location)>
1961  disable_vertex_attrib_array;
1962 
1963  func<
1964  OGLPAFP(DisableVertexArrayAttrib),
1966  disable_vertex_array_attrib;
1967 
1968  func<
1969  OGLPAFP(VertexAttribFormat),
1970  void(vertex_attrib_location, int_type, data_type, true_false, uint_type)>
1971  vertex_attrib_format;
1972 
1973  func<
1974  OGLPAFP(VertexAttribIFormat),
1975  void(vertex_attrib_location, int_type, data_type, uint_type)>
1976  vertex_attrib_iformat;
1977 
1978  func<
1979  OGLPAFP(VertexAttribLFormat),
1980  void(vertex_attrib_location, int_type, data_type, uint_type)>
1981  vertex_attrib_lformat;
1982 
1983  func<
1984  OGLPAFP(VertexArrayAttribFormat),
1985  void(
1988  int_type,
1989  data_type,
1990  true_false,
1991  uint_type)>
1992  vertex_array_attrib_format;
1993 
1994  func<
1995  OGLPAFP(VertexArrayAttribIFormat),
1996  void(
1999  int_type,
2000  data_type,
2001  uint_type)>
2002  vertex_array_attrib_iformat;
2003 
2004  func<
2005  OGLPAFP(VertexArrayAttribLFormat),
2006  void(
2009  int_type,
2010  data_type,
2011  uint_type)>
2012  vertex_array_attrib_lformat;
2013 
2014  struct : func<OGLPAFP(VertexAttribPointer)> {
2015  using func<OGLPAFP(VertexAttribPointer)>::func;
2016 
2017  constexpr auto operator()(
2019  int_type size,
2020  data_type type,
2021  true_false norm) const noexcept {
2022  return this->_cnvchkcall(loc, size, type, norm, 0, nullptr);
2023  }
2024 
2025  constexpr auto operator()(
2027  int_type size,
2028  data_type type,
2029  true_false norm,
2030  sizei_type stride,
2031  const_void_ptr_type pointer) const noexcept {
2032  return this->_cnvchkcall(loc, size, type, norm, stride, pointer);
2033  }
2034  } vertex_attrib_pointer;
2035 
2036  struct : func<OGLPAFP(VertexAttribIPointer)> {
2037  using func<OGLPAFP(VertexAttribIPointer)>::func;
2038 
2039  constexpr auto operator()(
2041  int_type size,
2042  data_type type) const noexcept {
2043  return this->_cnvchkcall(loc, size, type, 0, nullptr);
2044  }
2045 
2046  constexpr auto operator()(
2048  int_type size,
2049  data_type type,
2050  sizei_type stride,
2051  const_void_ptr_type pointer) const noexcept {
2052  return this->_cnvchkcall(loc, size, type, stride, pointer);
2053  }
2054  } vertex_attrib_ipointer;
2055 
2056  struct : func<OGLPAFP(VertexAttribLPointer)> {
2057  using func<OGLPAFP(VertexAttribLPointer)>::func;
2058 
2059  constexpr auto operator()(
2061  int_type size,
2062  data_type type) const noexcept {
2063  return this->_cnvchkcall(loc, size, type, 0, nullptr);
2064  }
2065 
2066  constexpr auto operator()(
2068  int_type size,
2069  data_type type,
2070  sizei_type stride,
2071  const_void_ptr_type pointer) const noexcept {
2072  return this->_cnvchkcall(loc, size, type, stride, pointer);
2073  }
2074  } vertex_attrib_lpointer;
2075 
2076  func<
2077  OGLPAFP(VertexAttribBinding),
2078  void(vertex_attrib_location, vertex_buffer_binding)>
2079  vertex_attrib_binding;
2080 
2081  func<
2082  OGLPAFP(VertexArrayAttribBinding),
2083  void(vertex_array_name, vertex_attrib_location, vertex_buffer_binding)>
2084  vertex_array_attrib_binding;
2085 
2086  func<OGLPAFP(VertexBindingDivisor), void(vertex_buffer_binding, uint_type)>
2087  vertex_binding_divisor;
2088 
2089  func<
2090  OGLPAFP(VertexArrayBindingDivisor),
2091  void(vertex_buffer_binding, uint_type)>
2092  vertex_array_binding_divisor;
2093 
2094  func<OGLPAFP(VertexAttribDivisor), void(vertex_attrib_location, uint_type)>
2095  vertex_attrib_divisor;
2096 
2097  // texture ops
2098  func<OGLPAFP(ActiveTexture), void(texture_unit)> active_texture;
2099  func<OGLPAFP(BindTexture), void(texture_target, texture_name)> bind_texture;
2100 
2101  struct : func<OGLPAFP(BindTextures), void(uint_type, sizei_type, const name_type*)> {
2102  using base = func<
2103  OGLPAFP(BindTextures),
2104  void(uint_type, sizei_type, const name_type*)>;
2105 
2106  using base::base;
2107 
2108  constexpr auto
2109  operator()(uint_type first, span<const name_type> texs) const noexcept {
2110  return base::operator()(
2111  first, sizei_type(texs.size()), texs.data());
2112  }
2113  } bind_textures;
2114 
2115  func<OGLPAFP(BindTextureUnit), void(uint_type, texture_name)>
2116  bind_texture_unit;
2117 
2118  func<
2119  OGLPAFP(BindImageTexture),
2120  void(
2121  uint_type,
2122  texture_name,
2123  int_type,
2124  true_false,
2125  int_type,
2126  access_specifier,
2127  image_unit_format)>
2128  bind_image_texture;
2129 
2130  func<
2131  OGLPAFP(TexStorage3D),
2132  void(
2133  texture_target,
2134  sizei_type,
2135  pixel_internal_format,
2136  sizei_type,
2137  sizei_type,
2138  sizei_type)>
2139  tex_storage3d;
2140 
2141  func<
2142  OGLPAFP(TextureStorage3D),
2143  void(
2144  texture_name,
2145  sizei_type,
2146  pixel_internal_format,
2147  sizei_type,
2148  sizei_type,
2149  sizei_type)>
2150  texture_storage3d;
2151 
2152  func<
2153  OGLPAFP(TexStorage2D),
2154  void(
2155  texture_target,
2156  sizei_type,
2157  pixel_internal_format,
2158  sizei_type,
2159  sizei_type)>
2160  tex_storage2d;
2161 
2162  func<
2163  OGLPAFP(TextureStorage2D),
2164  void(texture_name, sizei_type, pixel_internal_format, sizei_type, sizei_type)>
2165  texture_storage2d;
2166 
2167  func<
2168  OGLPAFP(TexStorage1D),
2169  void(texture_target, sizei_type, pixel_internal_format, sizei_type)>
2170  tex_storage1d;
2171 
2172  func<
2173  OGLPAFP(TextureStorage1D),
2174  void(texture_name, sizei_type, pixel_internal_format, sizei_type)>
2175  texture_storage1d;
2176 
2177  func<
2178  OGLPAFP(TexStorage3DMultisample),
2179  void(
2180  texture_target,
2181  sizei_type,
2182  pixel_internal_format,
2183  sizei_type,
2184  sizei_type,
2185  sizei_type,
2186  bool_type)>
2187  tex_storage3d_multisample;
2188 
2189  func<
2190  OGLPAFP(TextureStorage3DMultisample),
2191  void(
2192  texture_name,
2193  sizei_type,
2194  pixel_internal_format,
2195  sizei_type,
2196  sizei_type,
2197  sizei_type,
2198  bool_type)>
2199  texture_storage3d_multisample;
2200 
2201  func<
2202  OGLPAFP(TexStorage2DMultisample),
2203  void(
2204  texture_target,
2205  sizei_type,
2206  pixel_internal_format,
2207  sizei_type,
2208  sizei_type,
2209  bool_type)>
2210  tex_storage2d_multisample;
2211 
2212  func<
2213  OGLPAFP(TextureStorage2DMultisample),
2214  void(
2215  texture_name,
2216  sizei_type,
2217  pixel_internal_format,
2218  sizei_type,
2219  sizei_type,
2220  bool_type)>
2221  texture_storage2d_multisample;
2222 
2223  func<
2224  OGLPAFP(TexImage3D),
2225  void(
2226  texture_target,
2227  int_type,
2228  pixel_internal_format,
2229  sizei_type,
2230  sizei_type,
2231  sizei_type,
2232  int_type,
2233  pixel_format,
2234  pixel_data_type,
2236  tex_image3d;
2237 
2238  func<
2239  OGLPAFP(TexImage2D),
2240  void(
2241  texture_target,
2242  int_type,
2243  pixel_internal_format,
2244  sizei_type,
2245  sizei_type,
2246  int_type,
2247  pixel_format,
2248  pixel_data_type,
2250  tex_image2d;
2251 
2252  func<
2253  OGLPAFP(TexImage1D),
2254  void(
2255  texture_target,
2256  int_type,
2257  pixel_internal_format,
2258  sizei_type,
2259  int_type,
2260  pixel_format,
2261  pixel_data_type,
2263  tex_image1d;
2264 
2265  func<
2266  OGLPAFP(TexSubImage3D),
2267  void(
2268  texture_target,
2269  int_type,
2270  int_type,
2271  int_type,
2272  int_type,
2273  sizei_type,
2274  sizei_type,
2275  sizei_type,
2276  pixel_format,
2277  pixel_data_type,
2279  tex_sub_image3d;
2280 
2281  func<
2282  OGLPAFP(TextureSubImage3D),
2283  void(
2284  texture_name,
2285  int_type,
2286  int_type,
2287  int_type,
2288  int_type,
2289  sizei_type,
2290  sizei_type,
2291  sizei_type,
2292  pixel_format,
2293  pixel_data_type,
2295  texture_sub_image3d;
2296 
2297  func<
2298  OGLPAFP(TexSubImage2D),
2299  void(
2300  texture_target,
2301  int_type,
2302  int_type,
2303  int_type,
2304  sizei_type,
2305  sizei_type,
2306  pixel_format,
2307  pixel_data_type,
2309  tex_sub_image2d;
2310 
2311  func<
2312  OGLPAFP(TextureSubImage2D),
2313  void(
2314  texture_name,
2315  int_type,
2316  int_type,
2317  int_type,
2318  sizei_type,
2319  sizei_type,
2320  pixel_format,
2321  pixel_data_type,
2323  texture_sub_image2d;
2324 
2325  func<
2326  OGLPAFP(TexSubImage1D),
2327  void(
2328  texture_target,
2329  int_type,
2330  int_type,
2331  sizei_type,
2332  pixel_format,
2333  pixel_data_type,
2335  tex_sub_image1d;
2336 
2337  func<
2338  OGLPAFP(TexSubImage1D),
2339  void(
2340  texture_name,
2341  int_type,
2342  int_type,
2343  sizei_type,
2344  pixel_format,
2345  pixel_data_type,
2347  texture_sub_image1d;
2348 
2349  func<
2350  OGLPAFP(CopyTexImage2D),
2351  void(
2352  texture_target,
2353  int_type,
2354  pixel_internal_format,
2355  int_type,
2356  int_type,
2357  sizei_type,
2358  sizei_type,
2359  int_type)>
2360  copy_tex_image2d;
2361 
2362  func<
2363  OGLPAFP(CopyTexImage1D),
2364  void(
2365  texture_target,
2366  int_type,
2367  pixel_internal_format,
2368  int_type,
2369  int_type,
2370  sizei_type,
2371  int_type)>
2372  copy_tex_image1d;
2373 
2374  func<
2375  OGLPAFP(CopyTexSubImage3D),
2376  void(
2377  texture_target,
2378  int_type,
2379  int_type,
2380  int_type,
2381  int_type,
2382  int_type,
2383  int_type,
2384  sizei_type,
2385  sizei_type)>
2386  copy_tex_sub_image3d;
2387 
2388  func<
2389  OGLPAFP(CopyTextureSubImage3D),
2390  void(
2391  texture_name,
2392  int_type,
2393  int_type,
2394  int_type,
2395  int_type,
2396  int_type,
2397  int_type,
2398  sizei_type,
2399  sizei_type)>
2400  copy_texture_sub_image3d;
2401 
2402  func<
2403  OGLPAFP(CopyTexSubImage2D),
2404  void(
2405  texture_target,
2406  int_type,
2407  int_type,
2408  int_type,
2409  int_type,
2410  int_type,
2411  sizei_type,
2412  sizei_type)>
2413  copy_tex_sub_image2d;
2414 
2415  func<
2416  OGLPAFP(CopyTextureSubImage2D),
2417  void(
2418  texture_name,
2419  int_type,
2420  int_type,
2421  int_type,
2422  int_type,
2423  int_type,
2424  sizei_type,
2425  sizei_type)>
2426  copy_texture_sub_image2d;
2427 
2428  func<
2429  OGLPAFP(CopyTexSubImage1D),
2430  void(texture_target, int_type, int_type, int_type, int_type, sizei_type)>
2431  copy_tex_sub_image1d;
2432 
2433  func<
2434  OGLPAFP(CopyTextureSubImage1D),
2435  void(texture_name, int_type, int_type, int_type, int_type, sizei_type)>
2436  copy_texture_sub_image1d;
2437 
2438  struct : func<OGLPAFP(CompressedTexImage3D)> {
2439  using func<OGLPAFP(CompressedTexImage3D)>::func;
2440 
2441  constexpr auto operator()(
2442  texture_target tgt,
2443  int_type level,
2444  pixel_internal_format ifmt,
2445  sizei_type width,
2446  sizei_type height,
2447  sizei_type depth,
2448  int_type border,
2449  memory::const_block data) const noexcept {
2450  return this->_cnvchkcall(
2451  tgt,
2452  level,
2453  ifmt,
2454  width,
2455  height,
2456  depth,
2457  border,
2458  data.size(),
2459  data.data());
2460  }
2461  } compressed_tex_image3d;
2462 
2463  struct : func<OGLPAFP(CompressedTexImage2D)> {
2464  using func<OGLPAFP(CompressedTexImage2D)>::func;
2465 
2466  constexpr auto operator()(
2467  texture_target tgt,
2468  int_type level,
2469  pixel_internal_format ifmt,
2470  sizei_type width,
2471  sizei_type height,
2472  int_type border,
2473  memory::const_block data) const noexcept {
2474  return this->_cnvchkcall(
2475  tgt, level, ifmt, width, height, border, data.size(), data.data());
2476  }
2477  } compressed_tex_image2d;
2478 
2479  struct : func<OGLPAFP(CompressedTexImage1D)> {
2480  using func<OGLPAFP(CompressedTexImage1D)>::func;
2481 
2482  constexpr auto operator()(
2483  texture_target tgt,
2484  int_type level,
2485  pixel_internal_format ifmt,
2486  sizei_type width,
2487  int_type border,
2488  memory::const_block data) const noexcept {
2489  return this->_cnvchkcall(
2490  tgt, level, ifmt, width, border, data.size(), data.data());
2491  }
2492  } compressed_tex_image1d;
2493 
2494  struct : func<OGLPAFP(CompressedTexSubImage3D)> {
2495  using func<OGLPAFP(CompressedTexSubImage3D)>::func;
2496  constexpr auto operator()(
2497  texture_target tgt,
2498  int_type level,
2499  int_type xoffset,
2500  int_type yoffset,
2501  int_type zoffset,
2502  sizei_type width,
2503  sizei_type height,
2504  sizei_type depth,
2505  pixel_format fmt,
2506  memory::const_block data) const noexcept {
2507  return this->_cnvchkcall(
2508  tgt,
2509  level,
2510  xoffset,
2511  yoffset,
2512  zoffset,
2513  width,
2514  height,
2515  depth,
2516  fmt,
2517  data.size(),
2518  data.data());
2519  }
2520  } compressed_tex_sub_image3d;
2521 
2522  struct : func<OGLPAFP(CompressedTextureSubImage3D)> {
2523  using func<OGLPAFP(CompressedTextureSubImage3D)>::func;
2524  constexpr auto operator()(
2525  texture_name tex,
2526  int_type level,
2527  int_type xoffset,
2528  int_type yoffset,
2529  int_type zoffset,
2530  sizei_type width,
2531  sizei_type height,
2532  sizei_type depth,
2533  pixel_format fmt,
2534  memory::const_block data) const noexcept {
2535  return this->_cnvchkcall(
2536  tex,
2537  level,
2538  xoffset,
2539  yoffset,
2540  zoffset,
2541  width,
2542  height,
2543  depth,
2544  fmt,
2545  data.size(),
2546  data.data());
2547  }
2548  } compressed_texture_sub_image3d;
2549 
2550  struct : func<OGLPAFP(CompressedTexSubImage2D)> {
2551  using func<OGLPAFP(CompressedTexSubImage2D)>::func;
2552  constexpr auto operator()(
2553  texture_target tgt,
2554  int_type level,
2555  int_type xoffset,
2556  int_type yoffset,
2557  sizei_type width,
2558  sizei_type height,
2559  pixel_format fmt,
2560  memory::const_block data) const noexcept {
2561  return this->_cnvchkcall(
2562  tgt,
2563  level,
2564  xoffset,
2565  yoffset,
2566  width,
2567  height,
2568  fmt,
2569  data.size(),
2570  data.data());
2571  }
2572  } compressed_tex_sub_image2d;
2573 
2574  struct : func<OGLPAFP(CompressedTextureSubImage2D)> {
2575  using func<OGLPAFP(CompressedTextureSubImage2D)>::func;
2576  constexpr auto operator()(
2577  texture_name tex,
2578  int_type level,
2579  int_type xoffset,
2580  int_type yoffset,
2581  sizei_type width,
2582  sizei_type height,
2583  pixel_format fmt,
2584  memory::const_block data) const noexcept {
2585  return this->_cnvchkcall(
2586  tex,
2587  level,
2588  xoffset,
2589  yoffset,
2590  width,
2591  height,
2592  fmt,
2593  data.size(),
2594  data.data());
2595  }
2596  } compressed_texture_sub_image2d;
2597 
2598  struct : func<OGLPAFP(CompressedTexSubImage1D)> {
2599  using func<OGLPAFP(CompressedTexSubImage1D)>::func;
2600  constexpr auto operator()(
2601  texture_target tgt,
2602  int_type level,
2603  int_type xoffset,
2604  sizei_type width,
2605  pixel_format fmt,
2606  memory::const_block data) const noexcept {
2607  return this->_cnvchkcall(
2608  tgt, level, xoffset, width, fmt, data.size(), data.data());
2609  }
2610  } compressed_tex_sub_image1d;
2611 
2612  struct : func<OGLPAFP(CompressedTextureSubImage1D)> {
2613  using func<OGLPAFP(CompressedTextureSubImage1D)>::func;
2614  constexpr auto operator()(
2615  texture_name tex,
2616  int_type level,
2617  int_type xoffset,
2618  sizei_type width,
2619  pixel_format fmt,
2620  memory::const_block data) const noexcept {
2621  return this->_cnvchkcall(
2622  tex, level, xoffset, width, fmt, data.size(), data.data());
2623  }
2624  } compressed_texture_sub_image1d;
2625 
2626  func<
2627  OGLPAFP(TexBuffer),
2628  void(texture_target, pixel_internal_format, buffer_name)>
2629  tex_buffer;
2630 
2631  func<
2632  OGLPAFP(TextureBuffer),
2633  void(texture_name, pixel_internal_format, buffer_name)>
2634  texture_buffer;
2635 
2636  func<
2637  OGLPAFP(TexBufferRange),
2638  void(
2639  texture_target,
2640  pixel_internal_format,
2641  buffer_name,
2642  intptr_type,
2643  sizeiptr_type)>
2644  tex_buffer_range;
2645 
2646  func<
2647  OGLPAFP(TextureBufferRange),
2648  void(
2649  texture_name,
2650  pixel_internal_format,
2651  buffer_name,
2652  intptr_type,
2653  sizeiptr_type)>
2654  texture_buffer_range;
2655 
2656  func<
2657  OGLPAFP(TexParameterf),
2658  void(texture_target, texture_parameter, float_type)>
2659  tex_parameter_f;
2660 
2661  func<
2662  OGLPAFP(TextureParameterf),
2663  void(texture_name, texture_parameter, float_type)>
2664  texture_parameter_f;
2665 
2666  struct : func<OGLPAFP(TexParameteri)> {
2667  using func<OGLPAFP(TexParameteri)>::func;
2668 
2669  template <
2670  typename TexParam,
2671  typename Value,
2672  typename = std::enable_if_t<
2673  is_enum_parameter_value_v<texture_parameter, TexParam, int_type, Value>>>
2674  constexpr auto operator()(
2675  texture_target tgt,
2676  TexParam param,
2677  Value value) const noexcept {
2678  return this->_chkcall(
2679  enum_type(tgt), enum_type(param), enum_type(value));
2680  }
2681  } tex_parameter_i;
2682 
2683  struct : func<OGLPAFP(TextureParameteri)> {
2684  using func<OGLPAFP(TextureParameteri)>::func;
2685 
2686  template <
2687  typename TexParam,
2688  typename Value,
2689  typename = std::enable_if_t<
2690  is_enum_parameter_value_v<texture_parameter, TexParam, int_type, Value>>>
2691  constexpr auto
2692  operator()(texture_name tex, TexParam param, Value value) noexcept {
2693  return this->_chkcall(
2694  name_type(tex), enum_type(param), enum_type(value));
2695  }
2696  } texture_parameter_i;
2697 
2698  struct : func<OGLPAFP(TexParameterfv)> {
2699  using func<OGLPAFP(TexParameterfv)>::func;
2700 
2701  constexpr auto operator()(
2702  texture_target tgt,
2703  texture_parameter param,
2704  span<const float_type> values) noexcept {
2705  return this->_cnvchkcall(tgt, param, values.data());
2706  }
2707  } tex_parameter_fv;
2708 
2709  struct : func<OGLPAFP(TextureParameterfv)> {
2710  using func<OGLPAFP(TextureParameterfv)>::func;
2711 
2712  constexpr auto operator()(
2713  texture_name tex,
2714  texture_parameter param,
2715  span<const float_type> values) noexcept {
2716  return this->_cnvchkcall(tex, param, values.data());
2717  }
2718  } texture_parameter_fv;
2719 
2720  struct : func<OGLPAFP(TexParameteriv)> {
2721  using func<OGLPAFP(TexParameteriv)>::func;
2722 
2723  constexpr auto operator()(
2724  texture_target tgt,
2725  texture_parameter param,
2726  span<const int_type> values) noexcept {
2727  return this->_cnvchkcall(tgt, param, values.data());
2728  }
2729  } tex_parameter_iv;
2730 
2731  struct : func<OGLPAFP(TextureParameteriv)> {
2732  using func<OGLPAFP(TextureParameteriv)>::func;
2733 
2734  constexpr auto operator()(
2735  texture_name tex,
2736  texture_parameter param,
2737  span<const int_type> values) noexcept {
2738  return this->_cnvchkcall(tex, param, values.data());
2739  }
2740  } texture_parameter_iv;
2741 
2742  struct : func<OGLPAFP(TexParameterIiv)> {
2743  using func<OGLPAFP(TexParameterIiv)>::func;
2744 
2745  constexpr auto operator()(
2746  texture_target tgt,
2747  texture_parameter param,
2748  span<const int_type> values) noexcept {
2749  return this->_cnvchkcall(tgt, param, values.data());
2750  }
2751  } tex_parameter_iiv;
2752 
2753  struct : func<OGLPAFP(TextureParameterIiv)> {
2754  using func<OGLPAFP(TextureParameterIiv)>::func;
2755 
2756  constexpr auto operator()(
2757  texture_name tex,
2758  texture_parameter param,
2759  span<const int_type> values) noexcept {
2760  return this->_cnvchkcall(tex, param, values.data());
2761  }
2762  } texture_parameter_iiv;
2763 
2764  struct : func<OGLPAFP(TexParameterIuiv)> {
2765  using func<OGLPAFP(TexParameterIuiv)>::func;
2766 
2767  constexpr auto operator()(
2768  texture_target tgt,
2769  texture_parameter param,
2770  span<const uint_type> values) noexcept {
2771  return this->_cnvchkcall(tgt, param, values.data());
2772  }
2773  } tex_parameter_iuiv;
2774 
2775  struct : func<OGLPAFP(TextureParameterIuiv)> {
2776  using func<OGLPAFP(TextureParameterIuiv)>::func;
2777 
2778  constexpr auto operator()(
2779  texture_name tex,
2780  texture_parameter param,
2781  span<const uint_type> values) noexcept {
2782  return this->_cnvchkcall(tex, param, values.data());
2783  }
2784  } texture_parameter_iuiv;
2785 
2786  query_func<
2787  mp_list<texture_target>,
2788  mp_list<texture_parameter>,
2789  mp_list<>,
2790  float_type,
2791  OGLPAFP(GetTexParameterfv)>
2792  get_tex_parameter_f;
2793 
2794  query_func<
2795  mp_list<texture_name>,
2796  mp_list<texture_parameter>,
2797  mp_list<>,
2798  float_type,
2799  OGLPAFP(GetTextureParameterfv)>
2800  get_texture_parameter_f;
2801 
2802  query_func<
2803  mp_list<texture_target>,
2804  mp_list<texture_parameter>,
2805  mp_list<>,
2806  int_type,
2807  OGLPAFP(GetTexParameteriv)>
2808  get_tex_parameter_i;
2809 
2810  query_func<
2811  mp_list<texture_name>,
2812  mp_list<texture_parameter>,
2813  mp_list<>,
2814  int_type,
2815  OGLPAFP(GetTextureParameteriv)>
2816  get_texture_parameter_i;
2817 
2818  query_func<
2819  mp_list<texture_target>,
2820  mp_list<texture_parameter>,
2821  mp_list<>,
2822  int_type,
2823  OGLPAFP(GetTexParameterIiv)>
2824  get_tex_parameter_ii;
2825 
2826  query_func<
2827  mp_list<texture_name>,
2828  mp_list<texture_parameter>,
2829  mp_list<>,
2830  int_type,
2831  OGLPAFP(GetTextureParameterIiv)>
2832  get_texture_parameter_ii;
2833 
2834  query_func<
2835  mp_list<texture_target>,
2836  mp_list<texture_parameter>,
2837  mp_list<>,
2838  uint_type,
2839  OGLPAFP(GetTexParameterIuiv)>
2840  get_tex_parameter_iui;
2841 
2842  query_func<
2843  mp_list<texture_name>,
2844  mp_list<texture_parameter>,
2845  mp_list<>,
2846  uint_type,
2847  OGLPAFP(GetTextureParameterIuiv)>
2848  get_texture_parameter_iui;
2849 
2850  func<OGLPAFP(GenerateMipmap), void(texture_target)> generate_mipmap;
2851 
2852  func<OGLPAFP(GenerateTextureMipmap), void(texture_name)>
2853  generate_texture_mipmap;
2854 
2855  // sampler ops
2856  func<OGLPAFP(BindSampler), void(uint_type, sampler_name)> bind_sampler;
2857 
2858  func<
2859  OGLPAFP(SamplerParameterf),
2860  void(sampler_name, sampler_parameter, float_type)>
2861  sampler_parameter_f;
2862 
2863  func<
2864  OGLPAFP(SamplerParameteri),
2865  void(sampler_name, sampler_parameter, int_type)>
2866  sampler_parameter_i;
2867 
2868  struct : func<OGLPAFP(SamplerParameterfv)> {
2869  using func<OGLPAFP(SamplerParameterfv)>::func;
2870 
2871  constexpr auto operator()(
2872  sampler_name sam,
2873  sampler_parameter param,
2874  span<const float_type> values) noexcept {
2875  return this->_cnvchkcall(sam, param, values.data());
2876  }
2877  } sampler_parameter_fv;
2878 
2879  struct : func<OGLPAFP(SamplerParameteriv)> {
2880  using func<OGLPAFP(SamplerParameteriv)>::func;
2881 
2882  constexpr auto operator()(
2883  sampler_name sam,
2884  sampler_parameter param,
2885  span<const int_type> values) noexcept {
2886  return this->_cnvchkcall(sam, param, values.data());
2887  }
2888  } sampler_parameter_iv;
2889 
2890  struct : func<OGLPAFP(SamplerParameterIiv)> {
2891  using func<OGLPAFP(SamplerParameterIiv)>::func;
2892 
2893  constexpr auto operator()(
2894  sampler_name sam,
2895  sampler_parameter param,
2896  span<const int_type> values) noexcept {
2897  return this->_cnvchkcall(sam, param, values.data());
2898  }
2899  } sampler_parameter_iiv;
2900 
2901  struct : func<OGLPAFP(SamplerParameterIuiv)> {
2902  using func<OGLPAFP(SamplerParameterIuiv)>::func;
2903 
2904  constexpr auto operator()(
2905  sampler_name sam,
2906  sampler_parameter param,
2907  span<const uint_type> values) noexcept {
2908  return this->_cnvchkcall(sam, param, values.data());
2909  }
2910  } sampler_parameter_iuiv;
2911 
2912  query_func<
2913  mp_list<sampler_name>,
2914  mp_list<sampler_parameter>,
2915  mp_list<>,
2916  float_type,
2917  OGLPAFP(GetSamplerParameterfv)>
2918  get_sampler_parameter_f;
2919 
2920  query_func<
2921  mp_list<sampler_name>,
2922  mp_list<sampler_parameter>,
2923  mp_list<>,
2924  int_type,
2925  OGLPAFP(GetSamplerParameteriv)>
2926  get_sampler_parameter_i;
2927 
2928  query_func<
2929  mp_list<sampler_name>,
2930  mp_list<sampler_parameter>,
2931  mp_list<>,
2932  int_type,
2933  OGLPAFP(GetSamplerParameterIiv)>
2934  get_sampler_parameter_ii;
2935 
2936  query_func<
2937  mp_list<sampler_name>,
2938  mp_list<sampler_parameter>,
2939  mp_list<>,
2940  uint_type,
2941  OGLPAFP(GetSamplerParameterIuiv)>
2942  get_sampler_parameter_iui;
2943 
2944  // renderbuffer ops
2945  func<OGLPAFP(BindRenderbuffer), void(renderbuffer_target, renderbuffer_name)>
2946  bind_renderbuffer;
2947 
2948  func<
2949  OGLPAFP(RenderbufferStorage),
2950  void(renderbuffer_target, pixel_internal_format, sizei_type, sizei_type)>
2951  renderbuffer_storage;
2952 
2953  func<
2954  OGLPAFP(NamedRenderbufferStorage),
2955  void(renderbuffer_target, pixel_internal_format, sizei_type, sizei_type)>
2956  named_renderbuffer_storage;
2957 
2958  func<
2960  void(
2961  renderbuffer_target,
2962  sizei_type,
2963  pixel_internal_format,
2964  sizei_type,
2965  sizei_type)>
2966  renderbuffer_storage_multisample;
2967 
2968  func<
2970  void(
2971  renderbuffer_target,
2972  sizei_type,
2973  pixel_internal_format,
2974  sizei_type,
2975  sizei_type)>
2976  named_renderbuffer_storage_multisample;
2977 
2978  query_func<
2979  mp_list<renderbuffer_target>,
2980  mp_list<renderbuffer_parameter>,
2981  mp_list<>,
2982  int_type,
2983  OGLPAFP(GetRenderbufferParameteriv)>
2984  get_renderbuffer_parameter_i;
2985 
2986  query_func<
2987  mp_list<renderbuffer_name>,
2988  mp_list<renderbuffer_parameter>,
2989  mp_list<>,
2990  int_type,
2992  get_named_renderbuffer_parameter_i;
2993 
2994  // framebuffer ops
2995  func<OGLPAFP(BindFramebuffer), void(framebuffer_target, framebuffer_name)>
2996  bind_framebuffer;
2997 
2998  func<OGLPAFP(DrawBuffer), void(surface_buffer)> draw_buffer;
2999 
3000  func<
3001  OGLPAFP(NamedFramebufferDrawBuffer),
3002  void(framebuffer_name, surface_buffer)>
3003  named_framebuffer_draw_buffer;
3004 
3005  func<OGLPAFP(ReadBuffer), void(surface_buffer)> read_buffer;
3006 
3007  func<
3008  OGLPAFP(NamedFramebufferReadBuffer),
3009  void(framebuffer_name, surface_buffer)>
3010  named_framebuffer_read_buffer;
3011 
3012  func<
3013  OGLPAFP(FramebufferParameteri),
3014  void(framebuffer_target, framebuffer_parameter, int_type)>
3015  framebuffer_parameter_i;
3016 
3017  func<
3018  OGLPAFP(NamedFramebufferParameteri),
3019  void(framebuffer_name, framebuffer_parameter, int_type)>
3020  named_framebuffer_parameter_i;
3021 
3022  query_func<
3023  mp_list<framebuffer_target>,
3024  mp_list<framebuffer_parameter>,
3025  mp_list<>,
3026  int_type,
3027  OGLPAFP(GetFramebufferParameteriv)>
3028  get_framebuffer_parameter_i;
3029 
3030  query_func<
3031  mp_list<framebuffer_name>,
3032  mp_list<framebuffer_parameter>,
3033  mp_list<>,
3034  int_type,
3036  get_named_framebuffer_parameter_i;
3037 
3038  query_func<
3039  mp_list<framebuffer_target, framebuffer_attachment>,
3040  mp_list<framebuffer_attachment_parameter>,
3041  mp_list<>,
3042  int_type,
3044  get_framebuffer_attachment_parameter_i;
3045 
3046  query_func<
3047  mp_list<framebuffer_name, framebuffer_attachment>,
3048  mp_list<framebuffer_attachment_parameter>,
3049  mp_list<>,
3050  int_type,
3052  get_named_framebuffer_attachment_parameter_i;
3053 
3054  func<
3055  OGLPAFP(FramebufferRenderbuffer),
3056  void(
3057  framebuffer_target,
3058  oglp::framebuffer_attachment,
3059  renderbuffer_target,
3061  framebuffer_renderbuffer;
3062 
3063  func<
3065  void(
3067  oglp::framebuffer_attachment,
3068  renderbuffer_target,
3070  named_framebuffer_renderbuffer;
3071 
3072  func<
3073  OGLPAFP(FramebufferTexture),
3074  void(
3075  framebuffer_target,
3076  oglp::framebuffer_attachment,
3077  texture_name,
3078  int_type)>
3079  framebuffer_texture;
3080 
3081  func<
3082  OGLPAFP(NamedFramebufferTexture),
3083  void(framebuffer_name, oglp::framebuffer_attachment, texture_name, int_type)>
3084  named_framebuffer_texture;
3085 
3086  func<
3087  OGLPAFP(FramebufferTexture1D),
3088  void(
3089  framebuffer_target,
3090  oglp::framebuffer_attachment,
3091  texture_name,
3092  int_type)>
3093  framebuffer_texture1d;
3094 
3095  func<
3096  OGLPAFP(FramebufferTexture2D),
3097  void(
3098  framebuffer_target,
3099  oglp::framebuffer_attachment,
3100  oglp::texture_target,
3101  texture_name,
3102  int_type)>
3103  framebuffer_texture2d;
3104 
3105  func<
3106  OGLPAFP(FramebufferTexture3D),
3107  void(
3108  framebuffer_target,
3109  oglp::framebuffer_attachment,
3110  oglp::texture_target,
3111  texture_name,
3112  int_type)>
3113  framebuffer_texture3d;
3114 
3115  func<
3116  OGLPAFP(FramebufferTextureLayer),
3117  void(
3118  framebuffer_target,
3119  oglp::framebuffer_attachment,
3120  texture_name,
3121  int_type,
3122  int_type)>
3123  framebuffer_texture_layer;
3124 
3125  func<
3127  void(
3129  oglp::framebuffer_attachment,
3130  texture_name,
3131  int_type,
3132  int_type)>
3133  named_framebuffer_texture_layer;
3134 
3135  func<OGLPAFP(CheckFramebufferStatus), framebuffer_status(framebuffer_target)>
3136  check_framebuffer_status;
3137 
3138  func<
3139  OGLPAFP(CheckNamedFramebufferStatus),
3140  framebuffer_status(framebuffer_name, framebuffer_target)>
3141  check_named_framebuffer_status;
3142 
3143  func<
3144  OGLPAFP(BlitFramebuffer),
3145  void(
3146  int_type,
3147  int_type,
3148  int_type,
3149  int_type,
3150  int_type,
3151  int_type,
3152  int_type,
3153  int_type,
3154  enum_bitfield<buffer_blit_bit>,
3155  blit_filter)>
3156  blit_framebuffer;
3157 
3158  func<
3159  OGLPAFP(BlitNamedFramebuffer),
3160  void(
3163  int_type,
3164  int_type,
3165  int_type,
3166  int_type,
3167  int_type,
3168  int_type,
3169  int_type,
3170  int_type,
3171  enum_bitfield<buffer_blit_bit>,
3172  blit_filter)>
3173  blit_named_framebuffer;
3174 
3175  // transform feedback ops
3176  func<
3177  OGLPAFP(BindTransformFeedback),
3178  void(transform_feedback_target, transform_feedback_name)>
3179  bind_transform_feedback;
3180 
3181  func<OGLPAFP(BeginTransformFeedback), void(transform_feedback_primitive_type)>
3182  begin_transform_feedback;
3183 
3184  func<OGLPAFP(PauseTransformFeedback)> pause_transform_feedback;
3185 
3186  func<OGLPAFP(ResumeTransformFeedback)> resume_transform_feedback;
3187 
3188  func<OGLPAFP(EndTransformFeedback)> end_transform_feedback;
3189 
3190  func<
3191  OGLPAFP(TransformFeedbackBufferBase),
3192  void(transform_feedback_name, uint_type, buffer_name)>
3193  transform_feedback_buffer_base;
3194 
3195  func<
3197  void(
3199  uint_type,
3200  buffer_name,
3201  intptr_type,
3202  sizeiptr_type)>
3203  transform_feedback_buffer_range;
3204 
3205  query_func<
3206  mp_list<transform_feedback_name>,
3207  mp_list<transform_feedback_parameter>,
3208  mp_list<>,
3209  int_type,
3210  OGLPAFP(GetTransformFeedbackiv)>
3211  get_transform_feedback_i;
3212 
3213  query_func<
3214  mp_list<transform_feedback_name>,
3215  mp_list<transform_feedback_parameter>,
3216  mp_list<uint_type>,
3217  int_type,
3218  OGLPAFP(GetTransformFeedbacki_v)>
3219  get_transform_feedback_ii;
3220 
3221  query_func<
3222  mp_list<transform_feedback_name>,
3223  mp_list<transform_feedback_parameter>,
3224  mp_list<uint_type>,
3225  int64_type,
3226  OGLPAFP(GetTransformFeedbacki64_v)>
3227  get_transform_feedback_i64i;
3228 
3229  // query ops
3230  query_func<
3231  mp_list<query_target>,
3232  mp_list<query_parameter>,
3233  mp_list<>,
3234  int_type,
3235  OGLPAFP(GetQueryiv)>
3236  get_query_i;
3237 
3238  query_func<
3239  mp_list<query_target, uint_type>,
3240  mp_list<query_parameter>,
3241  mp_list<>,
3242  int_type,
3243  OGLPAFP(GetQueryIndexediv)>
3244  get_query_indexed_i;
3245 
3246  query_func<
3247  mp_list<query_name>,
3248  mp_list<query_parameter>,
3249  mp_list<>,
3250  int_type,
3251  OGLPAFP(GetQueryObjectiv)>
3252  get_query_object_i;
3253 
3254  query_func<
3255  mp_list<query_name>,
3256  mp_list<query_parameter>,
3257  mp_list<>,
3258  uint_type,
3259  OGLPAFP(GetQueryObjectuiv)>
3260  get_query_object_ui;
3261 
3262  query_func<
3263  mp_list<query_name>,
3264  mp_list<query_parameter>,
3265  mp_list<>,
3266  int64_type,
3267  OGLPAFP(GetQueryObjecti64v)>
3268  get_query_object_i64;
3269 
3270  query_func<
3271  mp_list<query_name>,
3272  mp_list<query_parameter>,
3273  mp_list<>,
3274  uint64_type,
3275  OGLPAFP(GetQueryObjectui64v)>
3276  get_query_object_ui64;
3277 
3278  func<
3279  OGLPAFP(GetQueryBufferObjectiv),
3280  void(query_name, buffer_name, query_parameter, intptr_type)>
3281  get_query_buffer_object_i;
3282 
3283  func<
3284  OGLPAFP(GetQueryBufferObjectuiv),
3285  void(query_name, buffer_name, query_parameter, intptr_type)>
3286  get_query_buffer_object_ui;
3287 
3288  func<
3289  OGLPAFP(GetQueryBufferObjecti64v),
3290  void(query_name, buffer_name, query_parameter, intptr_type)>
3291  get_query_buffer_object_i64;
3292 
3293  func<
3294  OGLPAFP(GetQueryBufferObjectui64v),
3295  void(query_name, buffer_name, query_parameter, intptr_type)>
3296  get_query_buffer_object_ui64;
3297 
3298  func<OGLPAFP(BeginQuery), void(query_target, query_name)> begin_query;
3299 
3300  func<OGLPAFP(BeginQueryIndexed), void(query_target, uint_type, query_name)>
3301  begin_query_indexed;
3302 
3303  func<OGLPAFP(EndQuery), void(query_target)> end_query;
3304 
3305  func<OGLPAFP(EndQueryIndexed), void(query_target, uint_type)>
3306  end_query_indexed;
3307 
3308  func<OGLPAFP(QueryCounter), void(query_name, counter_query_target)>
3309  query_counter;
3310 
3311  func<
3312  OGLPAFP(BeginConditionalRender),
3313  void(query_name, conditional_render_mode)>
3314  begin_conditional_render;
3315 
3316  func<OGLPAFP(EndConditionalRender)> end_conditional_render;
3317 
3318  // program pipeline ops
3319  func<OGLPAFP(BindProgramPipeline), void(program_pipeline_name)>
3320  bind_program_pipeline;
3321 
3322  func<OGLPAFP(ValidateProgramPipeline), void(program_pipeline_name)>
3323  validate_program_pipeline;
3324 
3325  func<
3326  OGLPAFP(UseProgramStages),
3327  void(program_pipeline_name, enum_bitfield<program_stage_bit>, program_name)>
3328  use_program_stages;
3329 
3330  query_func<
3331  mp_list<program_name, shader_type>,
3332  mp_list<program_stage_parameter>,
3333  mp_list<>,
3334  int_type,
3335  OGLPAFP(GetProgramStageiv)>
3336  get_program_stage_i;
3337 
3338  query_func<
3339  mp_list<program_name>,
3340  mp_list<program_pipeline_parameter>,
3341  mp_list<>,
3342  int_type,
3343  OGLPAFP(GetProgramPipelineiv)>
3344  get_program_pipeline_i;
3345 
3346  struct : func<OGLPAFP(GetProgramPipelineInfoLog)> {
3347  using func<OGLPAFP(GetProgramPipelineInfoLog)>::func;
3348 
3349  constexpr auto operator()(
3350  program_pipeline_name pipe,
3351  span<char_type> dest) const noexcept {
3352  sizei_type real_len{0};
3353  return this
3354  ->_chkcall(
3355  name_type(pipe), sizei_type(dest.size()), &real_len, dest.data())
3356  .replaced_with(head(dest, span_size(real_len)));
3357  }
3358  } get_program_pipeline_info_log;
3359 
3361  active_shader_program;
3362 
3363  // draw parameters
3364  func<OGLPAFP(PrimitiveRestartIndex)> primitive_restart_index;
3365 
3366  func<OGLPAFP(ProvokingVertex), void(provoke_mode)> provoking_vertex;
3367 
3368  func<OGLPAFP(PointSize)> point_size;
3369  func<OGLPAFP(LineWidth)> line_width;
3370 
3371  func<OGLPAFP(PointParameteri), void(point_parameter, int_type)>
3372  point_parameter_i;
3373 
3374  func<OGLPAFP(PointParameterf), void(point_parameter, float_type)>
3375  point_parameter_f;
3376 
3377  func<OGLPAFP(PatchParameteri), void(patch_parameter, int_type)>
3378  patch_parameter_i;
3379 
3380  func<OGLPAFP(PatchParameterfv), void(patch_parameter, span<const float_type>)>
3381  patch_parameter_fv;
3382 
3383  func<OGLPAFP(FrontFace), void(face_orientation)> front_face;
3384  func<OGLPAFP(CullFace), void(face_mode)> cull_face;
3385 
3386  func<OGLPAFP(PolygonMode), void(face_mode, oglp::polygon_mode)> polygon_mode;
3387 
3388  func<OGLPAFP(PolygonOffset)> polygon_offset;
3389  func<OGLPAFP(PolygonOffsetClamp)> polygon_offset_clamp;
3390 
3391  func<OGLPAFP(BlendEquation), void(oglp::blend_equation)> blend_equation;
3392  func<OGLPAFP(BlendEquation), void(oglp::blend_equation, oglp::blend_equation)>
3393  blend_equation_separate;
3394 
3395  func<OGLPAFP(BlendEquation), void(uint_type, oglp::blend_equation)>
3396  blend_equationi;
3397  func<
3398  OGLPAFP(BlendEquation),
3399  void(uint_type, oglp::blend_equation, oglp::blend_equation)>
3400  blend_equation_separatei;
3401 
3402  func<OGLPAFP(BlendFunc), void(oglp::blend_function, oglp::blend_function)>
3403  blend_func;
3404 
3405  func<
3406  OGLPAFP(BlendFunc),
3407  void(
3408  oglp::blend_function,
3409  oglp::blend_function,
3410  oglp::blend_function,
3411  oglp::blend_function)>
3412  blend_func_separate;
3413 
3414  func<
3415  OGLPAFP(BlendFunc),
3416  void(uint_type, oglp::blend_function, oglp::blend_function)>
3417  blend_funci;
3418 
3419  func<
3420  OGLPAFP(BlendFunc),
3421  void(
3422  uint_type,
3423  oglp::blend_function,
3424  oglp::blend_function,
3425  oglp::blend_function,
3426  oglp::blend_function)>
3427  blend_func_separatei;
3428 
3429  func<OGLPAFP(SampleCoverage)> sample_coverage;
3430  func<OGLPAFP(SampleMaski)> sample_mask_i;
3431  func<OGLPAFP(MinSampleShading)> min_sample_shading;
3432 
3433  query_func<
3434  mp_list<>,
3435  mp_list<sample_parameter>,
3436  mp_list<uint_type>,
3437  float_type,
3438  OGLPAFP(GetMultisamplefv)>
3439  get_multisample_f;
3440 
3441  // drawing
3442  // arrays
3443  func<OGLPAFP(DrawArrays), void(primitive_type, int_type, sizei_type)>
3444  draw_arrays;
3445 
3446  func<
3448  void(primitive_type, int_type, sizei_type, sizei_type, uint_type)>
3449  draw_arrays_instanced_base_instance;
3450 
3451  func<
3452  OGLPAFP(DrawArraysInstanced),
3453  void(primitive_type, int_type, sizei_type, sizei_type)>
3454  draw_arrays_instanced;
3455 
3456  func<OGLPAFP(DrawArraysIndirect), void(primitive_type, const_void_ptr_type)>
3457  draw_arrays_indirect;
3458 
3459  func<
3460  OGLPAFP(MultiDrawArrays),
3461  void(primitive_type, const int_type*, const sizei_type*, sizei_type)>
3462  multi_draw_arrays;
3463 
3464  func<
3465  OGLPAFP(MultiDrawArraysIndirect),
3466  void(primitive_type, const_void_ptr_type, sizei_type, sizei_type)>
3467  multi_draw_arrays_indirect;
3468 
3469  func<
3471  void(primitive_type, const_void_ptr_type, intptr_type, sizei_type, sizei_type)>
3472  multi_draw_arrays_indirect_count;
3473 
3474  // elements
3475  func<
3476  OGLPAFP(DrawElements),
3477  void(primitive_type, sizei_type, index_data_type, const_void_ptr_type)>
3478  draw_elements;
3479 
3480  func<
3481  OGLPAFP(DrawRangeElements),
3482  void(
3484  uint_type,
3485  uint_type,
3486  sizei_type,
3488  const_void_ptr_type)>
3489  draw_range_elements;
3490 
3491  func<
3493  void(
3495  sizei_type,
3497  const_void_ptr_type,
3498  sizei_type,
3499  uint_type)>
3500  draw_elements_instanced_base_instance;
3501 
3502  func<
3503  OGLPAFP(DrawElementsInstanced),
3504  void(
3506  sizei_type,
3508  const_void_ptr_type,
3509  sizei_type)>
3510  draw_elements_instanced;
3511 
3512  func<
3513  OGLPAFP(DrawElementsIndirect),
3514  void(primitive_type, index_data_type, const_void_ptr_type)>
3515  draw_elements_indirect;
3516 
3517  func<
3518  OGLPAFP(DrawElementsBaseVertex),
3519  void(
3521  sizei_type,
3523  const_void_ptr_type,
3524  int_type)>
3525  draw_elements_base_vertex;
3526 
3527  func<
3528  OGLPAFP(DrawRangeElements),
3529  void(
3531  uint_type,
3532  uint_type,
3533  sizei_type,
3535  const_void_ptr_type,
3536  int_type)>
3537  draw_range_elements_base_vertex;
3538 
3539  func<
3541  void(
3543  sizei_type,
3545  const_void_ptr_type,
3546  sizei_type,
3547  int_type)>
3548  draw_elements_instanced_base_vertex;
3549 
3550  func<
3552  void(
3554  sizei_type,
3556  const_void_ptr_type,
3557  sizei_type,
3558  int_type,
3559  uint_type)>
3560  draw_elements_instanced_base_vertex_base_instance;
3561 
3562  // computing
3563  func<OGLPAFP(DispatchCompute)> dispatch_compute;
3564  func<OGLPAFP(DispatchComputeIndirect)> dispatch_compute_indirect;
3565 
3566  // pixel transfer
3567  func<
3568  OGLPAFP(ReadPixels),
3569  void(
3570  int_type,
3571  int_type,
3572  sizei_type,
3573  sizei_type,
3574  pixel_format,
3575  pixel_data_type,
3576  memory::block)>
3577  read_pixels;
3578 
3579  // get_integer
3580  query_func<
3581  mp_list<>,
3582  mp_list<integer_query, binding_query>,
3583  mp_list<>,
3584  int_type,
3585  OGLPAFP(GetIntegerv)>
3586  get_integer;
3587 
3588  // get_integer64
3589  query_func<
3590  mp_list<>,
3591  mp_list<integer_query>,
3592  mp_list<>,
3593  int64_type,
3594  OGLPAFP(GetInteger64v)>
3595  get_integer64;
3596 
3597  // get_float
3598  query_func<
3599  mp_list<>,
3600  mp_list<float_query>,
3601  mp_list<>,
3602  float_type,
3603  OGLPAFP(GetFloatv)>
3604  get_float;
3605 
3606  // get_double
3607  query_func<
3608  mp_list<>,
3609  mp_list<float_query>,
3610  mp_list<>,
3611  double_type,
3612  OGLPAFP(GetDoublev)>
3613  get_double;
3614 
3615  // get_string
3616  struct : func<OGLPAFP(GetString)> {
3617  using func<OGLPAFP(GetString)>::func;
3618 
3619  constexpr auto operator()(string_query query) const noexcept {
3620  return this->_cnvchkcall(query).transformed([](auto src) {
3621  return src ? string_view{reinterpret_cast<const char*>(src)}
3622  : string_view{};
3623  });
3624  }
3625 
3626  constexpr auto operator()() const noexcept {
3627  return this->_fake_empty_c_str().cast_to(
3628  type_identity<string_view>{});
3629  }
3630  } get_string;
3631 
3632  // get_strings
3633  auto get_strings(string_query query, char separator) noexcept {
3634  return get_string(query).transformed([separator](auto src) {
3635  return split_into_string_list(src, separator);
3636  });
3637  }
3638 
3639  // get_extensions
3640  auto get_extensions() const noexcept {
3641 #ifdef GL_EXTENSIONS
3642  return get_string(string_query(GL_EXTENSIONS))
3643 #else
3644  return get_string()
3645 #endif
3646  .transformed(
3647  [](auto src) { return split_into_string_list(src, ' '); });
3648  }
3649 
3650  // has_extension
3651  auto has_extension(string_view which) const noexcept {
3652  if(ok extensions{get_extensions()}) {
3653  for(auto ext_name : extensions) {
3654  if(ends_with(ext_name, which)) {
3655  return true;
3656  }
3657  }
3658  }
3659  return false;
3660  }
3661 
3662  // named strings
3663  struct : func<OGLPAFP(NamedString)> {
3664  using func<OGLPAFP(NamedString)>::func;
3665 
3666  constexpr auto operator()(
3667  named_string_kind kind,
3668  string_view name,
3669  string_view str) const noexcept {
3670  return this->_cnvchkcall(
3671  kind, name.size(), name.data(), str.size(), str.data());
3672  }
3673  } named_string;
3674 
3675  struct : func<OGLPAFP(DeleteNamedString)> {
3676  using func<OGLPAFP(DeleteNamedString)>::func;
3677 
3678  constexpr auto operator()(string_view name) const noexcept {
3679  return this->_cnvchkcall(name.size(), name.data());
3680  }
3681  } delete_named_string;
3682 
3683  struct : func<OGLPAFP(IsNamedString)> {
3684  using func<OGLPAFP(IsNamedString)>::func;
3685 
3686  constexpr auto operator()(string_view name) const noexcept {
3687  return this->_cnvchkcall(name.size(), name.data())
3688  .cast_to(type_identity<true_false>{});
3689  }
3690  } is_named_string;
3691 
3692  // arb compatibility
3693  func<OGLPAFP(Begin), void(old_primitive_type)> begin;
3694  func<OGLPAFP(End)> end;
3695 
3696  func<OGLPAFP(Vertex2i)> vertex2i;
3697  func<OGLPAFP(Vertex3i)> vertex3i;
3698  func<OGLPAFP(Vertex4i)> vertex4i;
3699  func<OGLPAFP(Vertex2f)> vertex2f;
3700  func<OGLPAFP(Vertex3f)> vertex3f;
3701  func<OGLPAFP(Vertex4f)> vertex4f;
3702 
3703  func<OGLPAFP(Color3i)> color3i;
3704  func<OGLPAFP(Color4i)> color4i;
3705  func<OGLPAFP(Color3f)> color3f;
3706  func<OGLPAFP(Color4f)> color4f;
3707 
3708  func<OGLPAFP(SecondaryColor3i)> secondary_color3i;
3709  func<OGLPAFP(SecondaryColor4i)> secondary_color4i;
3710  func<OGLPAFP(SecondaryColor3f)> secondary_color3f;
3711  func<OGLPAFP(SecondaryColor4f)> secondary_color4f;
3712 
3713  func<OGLPAFP(TexCoord1i)> tex_coord1i;
3714  func<OGLPAFP(TexCoord2i)> tex_coord2i;
3715  func<OGLPAFP(TexCoord3i)> tex_coord3i;
3716  func<OGLPAFP(TexCoord4i)> tex_coord4i;
3717  func<OGLPAFP(TexCoord1f)> tex_coord1f;
3718  func<OGLPAFP(TexCoord2f)> tex_coord2f;
3719  func<OGLPAFP(TexCoord3f)> tex_coord3f;
3720  func<OGLPAFP(TexCoord4f)> tex_coord4f;
3721 
3722  func<OGLPAFP(MultiTexCoord1i), void(texture_unit, int_type)>
3723  multi_tex_coord1i;
3724  func<OGLPAFP(MultiTexCoord2i), void(texture_unit, int_type, int_type)>
3725  multi_tex_coord2i;
3726  func<
3727  OGLPAFP(MultiTexCoord3i),
3728  void(texture_unit, int_type, int_type, int_type)>
3729  multi_tex_coord3i;
3730  func<
3731  OGLPAFP(MultiTexCoord4i),
3732  void(texture_unit, int_type, int_type, int_type, int_type)>
3733  multi_tex_coord4i;
3734  func<OGLPAFP(MultiTexCoord1f), void(texture_unit, float_type)>
3735  multi_tex_coord1f;
3736  func<OGLPAFP(MultiTexCoord2f), void(texture_unit, float_type, float_type)>
3737  multi_tex_coord2f;
3738  func<
3739  OGLPAFP(MultiTexCoord3f),
3740  void(texture_unit, float_type, float_type, float_type)>
3741  multi_tex_coord3f;
3742  func<
3743  OGLPAFP(MultiTexCoord4f),
3744  void(texture_unit, float_type, float_type, float_type, float_type)>
3745  multi_tex_coord4f;
3746 
3747  func<OGLPAFP(MatrixMode), void(matrix_mode)> matrix_mode;
3748  func<OGLPAFP(PushMatrix)> push_matrix;
3749  func<OGLPAFP(PopMatrix)> pop_matrix;
3750 
3751  func<OGLPAFP(LoadIdentity)> load_identity;
3752 
3753  func<OGLPAFP(Translatef)> translate_f;
3754  func<OGLPAFP(Translated)> translate_d;
3755 
3756  func<
3757  OGLPAFP(Rotatef),
3758  void(degrees_t<float_type>, float_type, float_type, float_type)>
3759  rotate_f;
3760 
3761  func<
3762  OGLPAFP(Rotated),
3763  void(degrees_t<double_type>, double_type, double_type, double_type)>
3764  rotate_d;
3765 
3766  func<OGLPAFP(Scalef)> scale_f;
3767  func<OGLPAFP(Scaled)> scale_d;
3768 
3769  func<OGLPAFP(Frustum)> frustum;
3770  func<OGLPAFP(Ortho)> ortho;
3771 
3772  func<OGLPAFP(LoadMatrixf)> load_matrix_f;
3773  func<OGLPAFP(LoadMatrixd)> load_matrix_d;
3774 
3775  func<OGLPAFP(MultMatrixf)> mult_matrix_f;
3776  func<OGLPAFP(MultMatrixd)> mult_matrix_d;
3777 
3778  func<OGLPAFP(LoadTransposeMatrixf)> load_transpose_matrix_f;
3779  func<OGLPAFP(LoadTransposeMatrixd)> load_transpose_matrix_d;
3780 
3781  func<OGLPAFP(MultTransposeMatrixf)> mult_transpose_matrix_f;
3782  func<OGLPAFP(MultTransposeMatrixd)> mult_transpose_matrix_d;
3783 
3784  struct : func<OGLPAFP(DebugMessageControl)> {
3785  using func<OGLPAFP(DebugMessageControl)>::func;
3786 
3787  constexpr auto operator()(
3788  debug_output_source source,
3789  debug_output_type type,
3790  debug_output_severity severity,
3791  span<const uint_type> ids,
3792  true_false enabled) const noexcept {
3793  return this->_cnvchkcall(
3794  source, type, severity, ids.size(), ids.data(), enabled);
3795  }
3796 
3797  constexpr auto operator()(
3798  debug_output_source source,
3799  debug_output_type type,
3800  debug_output_severity severity,
3801  true_false enabled) const noexcept {
3802  return (*this)(source, type, severity, {}, enabled);
3803  }
3804 
3805  } debug_message_control;
3806 
3807  struct : func<OGLPAFP(DebugMessageInsert)> {
3808  using func<OGLPAFP(DebugMessageInsert)>::func;
3809 
3810  constexpr auto operator()(
3811  debug_output_source source,
3812  debug_output_type type,
3813  debug_output_severity severity,
3814  uint_type id,
3815  string_view message) const noexcept {
3816  return this->_cnvchkcall(
3817  source, type, id, severity, message.size(), message.data());
3818  }
3819 
3820  } debug_message_insert;
3821 
3822  struct : func<OGLPAFP(DebugMessageCallback)> {
3823  using func<OGLPAFP(DebugMessageCallback)>::func;
3824 
3825  constexpr auto operator()(
3826  debug_callback_type* callback,
3827  const_void_ptr_type user_data) const noexcept {
3828  return this->_chkcall(callback, user_data);
3829  }
3830 
3831  } debug_message_callback;
3832 
3833  struct : func<OGLPAFP(PushDebugGroup)> {
3834  using func<OGLPAFP(PushDebugGroup)>::func;
3835 
3836  constexpr auto operator()(
3837  debug_output_source source,
3838  uint_type id,
3839  string_view message) const noexcept {
3840  return this->_cnvchkcall(
3841  source, id, message.size(), message.data());
3842  }
3843 
3844  } push_debug_group;
3845 
3846  func<OGLPAFP(PopDebugGroup)> pop_debug_group;
3847 
3848  struct : func<OGLPAFP(ObjectLabel)> {
3849  using func<OGLPAFP(ObjectLabel)>::func;
3850 
3851  template <typename ObjTag>
3852  constexpr auto operator()(
3853  gl_object_name<ObjTag> name,
3854  string_view message) const noexcept {
3855  return this->_cnvchkcall(
3856  type_of(name), name, message.size(), message.data());
3857  }
3858 
3859  } object_label;
3860 
3861  func<OGLPAFP(Flush)> flush;
3862  func<OGLPAFP(Finish)> finish;
3863 
3864  basic_gl_operations(api_traits& traits);
3865 };
3866 //------------------------------------------------------------------------------
3867 #undef OGLPAFP
3868 //------------------------------------------------------------------------------
3869 } // namespace eagine::oglp
3870 
3871 #endif // OGLPLUS_GL_API_API_HPP
GLsizei sizei_type
Signed integer size type.
Definition: config.hpp:88
gl_api_function< void(enum_type, uint_type, uint_type), nullptr > BindBufferBase
Definition: c_api.hpp:373
GLbitfield bitfield_type
Bit-field type.
Definition: config.hpp:55
gl_api_function< void(uint_type, int_type, sizei_type, const int_type *), nullptr > ProgramUniform1iv
Definition: c_api.hpp:3031
gl_api_function< void(uint_type, int_type, sizei_type, const uint_type *), nullptr > ProgramUniform4uiv
Definition: c_api.hpp:3108
gl_api_function< void(bitfield_type), nullptr > MemoryBarrierByRegion
Definition: c_api.hpp:154
gl_api_function< void(enum_type, int_type, sizei_type, sizei_type), nullptr > DrawArraysInstanced
Definition: c_api.hpp:4269
gl_api_function< void(uint_type, intptr_type, sizeiptr_type), nullptr > FlushMappedNamedBufferRange
Definition: c_api.hpp:506
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type), nullptr > CopyTextureSubImage3D
Definition: c_api.hpp:956
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > VertexArrayAttribBinding
Definition: c_api.hpp:284
GLchar char_type
String character type.
Definition: config.hpp:46
gl_api_function< void(sizei_type, uint_type *), nullptr > GenBuffers
Definition: c_api.hpp:340
gl_api_function< void(enum_type, int_type, uint_type), nullptr > StencilFunc
Definition: c_api.hpp:3982
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix2fv
Definition: c_api.hpp:3171
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetBufferParameteriv
Definition: c_api.hpp:551
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix3x2fv
Definition: c_api.hpp:2912
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > Rotatef
Definition: c_api.hpp:4934
gl_api_function< void(uint_type, intptr_type, sizeiptr_type, const_void_ptr_type), nullptr > NamedBufferSubData
Definition: c_api.hpp:422
gl_api_function< void(uint_type, bool_type, bool_type, bool_type, bool_type), nullptr > ColorMaski
Definition: c_api.hpp:4022
gl_api_function< void(enum_type, int_type, enum_type, sizei_type, sizei_type, sizei_type, int_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexImage3D
Definition: c_api.hpp:994
gl_api_function< void(uint_type, uint_type), nullptr > ActiveShaderProgram
Definition: c_api.hpp:2331
gl_api_function< bool_type(enum_type), nullptr > IsEnabled
Definition: c_api.hpp:135
gl_api_function< void(uint_type, int_type, enum_type, sizei_type, const_void_ptr_type), nullptr > VertexAttribIPointer
Definition: c_api.hpp:3807
gl_api_function< void(sizei_type, uint_type *), nullptr > GenTextures
Definition: c_api.hpp:593
gl_api_function< void_ptr_type(enum_type, intptr_type, sizeiptr_type, bitfield_type), nullptr > MapBufferRange
Definition: c_api.hpp:485
gl_api_function< void(enum_type, enum_type, sizei_type, sizei_type), nullptr > RenderbufferStorage
Definition: c_api.hpp:1643
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type, sizei_type), nullptr > RenderbufferStorageMultisample
Definition: c_api.hpp:1657
static constexpr auto ends_with(basic_span< T1, P1, S1 > spn, basic_span< T2, P2, S2 > with) -> bool
Indicates if span spn ends with the content of with.
Definition: span_algo.hpp:187
gl_api_function< void(uint_type, uint_type), nullptr > EnableVertexArrayAttrib
Definition: c_api.hpp:298
basic_string_span< const char > string_view
Alias for const string views.
Definition: string_span.hpp:116
gl_api_function< void(int_type, int_type, int_type), nullptr > Color3i
Definition: c_api.hpp:4768
gl_api_function< void(double_type, double_type, double_type, double_type), nullptr > Rotated
Definition: c_api.hpp:4941
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteTextures
Definition: c_api.hpp:607
gl_api_function< void(enum_type, uint_type), nullptr > Enablei
Definition: c_api.hpp:121
gl_api_function< void(uint_type, enum_type, enum_type, uint_type), nullptr > NamedFramebufferRenderbuffer
Definition: c_api.hpp:1891
primitive_type
The shape primitive type enumeration.
Definition: drawing.hpp:22
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetTransformFeedbackiv
Definition: c_api.hpp:2102
gl_api_function< void(int_type, float_type, float_type), nullptr > Uniform2f
Definition: c_api.hpp:2835
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type, sizei_type, int_type, uint_type), nullptr > DrawElementsInstancedBaseVertexBaseInstance
Definition: c_api.hpp:4385
gl_api_function< void(enum_type, enum_type, float_type *), nullptr > GetTexParameterfv
Definition: c_api.hpp:1259
gl_api_function< sync_type(enum_type, bitfield_type), nullptr > FenceSync
Definition: c_api.hpp:163
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix4x2fv
Definition: c_api.hpp:3213
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > TexCoord4f
Definition: c_api.hpp:4837
prog_var_location< EAGINE_ID_V(Uniform)> uniform_location
Alias for shader program uniform location wrapper.
Definition: prog_var_loc.hpp:115
gl_api_function< void(enum_type, enum_type, uint_type *), nullptr > GetTexParameterIuiv
Definition: c_api.hpp:1280
gl_object_name< renderbuffer_tag > renderbuffer_name
Alias for GL renderbuffer object handle.
Definition: object_name.hpp:138
gl_api_function< void(enum_type, enum_type), nullptr > BlendFunc
Definition: c_api.hpp:4216
gl_api_function< bool_type(uint_type), nullptr > IsRenderbuffer
Definition: c_api.hpp:1629
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type, sizei_type, sizei_type), nullptr > TexStorage3D
Definition: c_api.hpp:659
gl_api_function< void(enum_type), nullptr > Enable
Definition: c_api.hpp:116
gl_api_function< void(enum_type, uint_type), nullptr > BeginQuery
Definition: c_api.hpp:2219
gl_api_function< void(enum_type, sizeiptr_type, const_void_ptr_type, bitfield_type), nullptr > BufferStorage
Definition: c_api.hpp:387
static constexpr auto span_size(T v) noexcept
Converts argument to span size type.
Definition: types.hpp:59
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type, sizei_type, int_type), nullptr > DrawElementsInstancedBaseVertex
Definition: c_api.hpp:4371
gl_object_name< vertex_array_tag > vertex_array_name
Alias for GL vertex array object handle.
Definition: object_name.hpp:163
EAGINE_MSG_TYPE(gl, Sampler) sampler_tag
Tag type denoting GL sampler objects.
Definition: object_name.hpp:88
gl_api_function< void(uint_type), nullptr > UseProgram
Definition: c_api.hpp:2475
gl_api_function< bool_type(uint_type), nullptr > IsBuffer
Definition: c_api.hpp:359
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > DispatchCompute
Definition: c_api.hpp:4472
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix3x4fv
Definition: c_api.hpp:3220
EAGINE_MSG_TYPE(gl, PrgPpline) program_pipeline_tag
Tag type denoting GL program pipeline objects.
Definition: object_name.hpp:72
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > UniformBlockBinding
Definition: c_api.hpp:3234
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > Color4f
Definition: c_api.hpp:4782
ApiTraits api_traits
Alias for the traits policy class.
Definition: api.hpp:36
gl_api_function< void(double_type, double_type, double_type, double_type, double_type, double_type), nullptr > Frustum
Definition: c_api.hpp:4988
gl_api_function< void(uint_type), nullptr > EnableVertexAttribArray
Definition: c_api.hpp:291
gl_owned_object_name< path_nv_tag > owned_path_nv_name
Alias for owned GL path object handle.
Definition: object_name.hpp:229
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > VertexArrayBindingDivisor
Definition: c_api.hpp:326
gl_api_function< void(enum_type, uint_type), nullptr > BindFramebuffer
Definition: c_api.hpp:1711
gl_api_function< void(), nullptr > PauseTransformFeedback
Definition: c_api.hpp:2071
gl_api_function< void(uint_type, enum_type, const uint_type *), nullptr > SamplerParameterIuiv
Definition: c_api.hpp:1575
gl_api_function< void(uint_type, bitfield_type), nullptr > SampleMaski
Definition: c_api.hpp:4173
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type, sizei_type, uint_type), nullptr > DrawElementsInstancedBaseInstance
Definition: c_api.hpp:4330
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateTransformFeedbacks
Definition: c_api.hpp:2038
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteQueries
Definition: c_api.hpp:2137
gl_api_function< uint_type(), nullptr > CreateProgram
Definition: c_api.hpp:2422
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type, sizei_type), nullptr > TexStorage2D
Definition: c_api.hpp:666
gl_api_function< void(enum_type, float_type), nullptr > MultiTexCoord1f
Definition: c_api.hpp:4862
gl_owned_object_name< shader_tag > owned_shader_name
Alias for owned GL shader object handle.
Definition: object_name.hpp:208
gl_api_function< void(uint_type, enum_type, float_type), nullptr > SamplerParameterf
Definition: c_api.hpp:1540
gl_api_function< void(const float_type[16]), nullptr > MultTransposeMatrixf
Definition: c_api.hpp:5085
gl_api_function< void(uint_type, enum_type, int64_type *), nullptr > GetQueryObjecti64v
Definition: c_api.hpp:2177
gl_api_function< void(enum_type), nullptr > ActiveTexture
Definition: c_api.hpp:617
gl_api_function< void(enum_type, uint_type), nullptr > StencilMaskSeparate
Definition: c_api.hpp:4039
GLenum enum_type
Enumeration type.
Definition: config.hpp:52
gl_api_function< void(bool_type), nullptr > DepthMask
Definition: c_api.hpp:4027
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix3fv
Definition: c_api.hpp:3178
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetSamplerParameteriv
Definition: c_api.hpp:1589
gl_api_function< void(uint_type, int_type, enum_type, uint_type), nullptr > VertexAttribLFormat
Definition: c_api.hpp:3766
gl_api_function< void(int_type, int_type), nullptr > Vertex2i
Definition: c_api.hpp:4742
gl_api_function< void(double_type, double_type, double_type, double_type, double_type, double_type), nullptr > Ortho
Definition: c_api.hpp:5001
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > SecondaryColor4f
Definition: c_api.hpp:4802
gl_api_function< void(enum_type, enum_type, uint_type, enum_type, int_type, const char_type *), nullptr > DebugMessageInsert
Definition: c_api.hpp:4676
gl_api_function< void(enum_type, int_type, sizei_type), nullptr > DrawArrays
Definition: c_api.hpp:4255
gl_api_function< void(uint_type, sizei_type), nullptr > DeletePathsNV
Definition: c_api.hpp:5153
gl_api_function< void(uint_type, int_type, int_type, int_type, sizei_type, sizei_type, enum_type, enum_type, const_void_ptr_type), nullptr > TextureSubImage2D
Definition: c_api.hpp:926
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type, sizei_type), nullptr > NamedRenderbufferStorageMultisample
Definition: c_api.hpp:1664
GLint int_type
Signed integer type.
Definition: config.hpp:70
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix4x2fv
Definition: c_api.hpp:2926
basic_block< true > const_block
Alias for const byte memory span.
Definition: block.hpp:32
gl_api_function< void(sizei_type, uint_type *), nullptr > GenProgramPipelines
Definition: c_api.hpp:2263
gl_api_function< void(enum_type), nullptr > EndQuery
Definition: c_api.hpp:2230
basic_handle_view< gl_object_name< Tag > > gl_object_name_view
Alias for template wrapping a const span of GL object handles.
Definition: object_name.hpp:44
gl_api_function< void(uint_type, uint_type, sizei_type, sizei_type *, int_type *, enum_type *, char_type *), nullptr > GetActiveAttrib
Definition: c_api.hpp:2596
prog_var_location< EAGINE_ID_V(Resource)> program_resource_location
Alias for generic shader program resource location wrapper.
Definition: prog_var_loc.hpp:93
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix2fv
Definition: c_api.hpp:2884
gl_api_function< void(uint_type, int_type, enum_type, uint_type), nullptr > VertexAttribIFormat
Definition: c_api.hpp:3759
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, int_type), nullptr > ProgramUniform4i
Definition: c_api.hpp:3024
gl_object_name< sampler_tag > sampler_name
Alias for GL sampler object handle.
Definition: object_name.hpp:143
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetNamedFramebufferParameteriv
Definition: c_api.hpp:1863
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix4x3fv
Definition: c_api.hpp:2940
gl_api_function< void_ptr_type(uint_type, enum_type), nullptr > MapNamedBuffer
Definition: c_api.hpp:478
gl_api_function< void(uint_type, int_type, sizei_type, const int_type *), nullptr > ProgramUniform3iv
Definition: c_api.hpp:3045
gl_api_function< void(enum_type, enum_type, uint_type), nullptr > TexBuffer
Definition: c_api.hpp:1147
gl_api_function< void(enum_type, enum_type, float_type), nullptr > TexParameterf
Definition: c_api.hpp:1175
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type), nullptr > CopyTexSubImage2D
Definition: c_api.hpp:843
gl_api_function< void(uint_type, int_type, sizei_type, const uint_type *), nullptr > ProgramUniform2uiv
Definition: c_api.hpp:3094
EAGINE_MSG_TYPE(gl, Frmebuffer) framebuffer_tag
Tag type denoting GL framebuffer objects.
Definition: object_name.hpp:68
gl_api_function< void(uint_type, int_type, sizei_type, const uint_type *), nullptr > ProgramUniform3uiv
Definition: c_api.hpp:3101
basic_handle_span< gl_object_name< Tag > > gl_object_name_span
Alias for template wrapping a mutable span of GL object handles.
Definition: object_name.hpp:37
gl_api_function< void(enum_type, sizeiptr_type, const_void_ptr_type, enum_type), nullptr > BufferData
Definition: c_api.hpp:401
gl_api_function< void(uint_type), nullptr > GenerateTextureMipmap
Definition: c_api.hpp:1426
gl_api_function< int_type(uint_type, const char_type *), nullptr > GetFragDataIndex
Definition: c_api.hpp:2701
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetFramebufferParameteriv
Definition: c_api.hpp:1856
gl_api_function< void(uint_type, int_type, enum_type, sizei_type, const_void_ptr_type), nullptr > VertexAttribLPointer
Definition: c_api.hpp:3814
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix3x4fv
Definition: c_api.hpp:2933
gl_api_function< bool_type(uint_type), nullptr > IsTransformFeedback
Definition: c_api.hpp:2052
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetTexParameteriv
Definition: c_api.hpp:1266
gl_api_function< void(enum_type, uint_type), nullptr > BindRenderbuffer
Definition: c_api.hpp:1636
static constexpr auto head(basic_span< T, P, S > s, L l) noexcept -> basic_span< T, P, S >
Returns the first l elements from the front of a span.
Definition: span_algo.hpp:99
gl_api_function< void(uint_type, enum_type, uint_type *), nullptr > GetQueryObjectuiv
Definition: c_api.hpp:2170
gl_api_function< void(enum_type, int_type, int_type), nullptr > MultiTexCoord2i
Definition: c_api.hpp:4846
gl_api_function< void(uint_type, sizeiptr_type, const_void_ptr_type, enum_type), nullptr > NamedBufferData
Definition: c_api.hpp:408
gl_api_function< void(enum_type, uint_type), nullptr > BindBuffer
Definition: c_api.hpp:366
gl_api_function< void(uint_type, enum_type, uint_type), nullptr > TextureBuffer
Definition: c_api.hpp:1161
gl_api_function< void(uint_type, int_type, sizei_type, const float_type *), nullptr > ProgramUniform2fv
Definition: c_api.hpp:3150
gl_api_function< void(int_type, sizei_type, const float_type *), nullptr > Uniform4fv
Definition: c_api.hpp:2877
gl_api_function< void(const double_type[16]), nullptr > MultTransposeMatrixd
Definition: c_api.hpp:5089
gl_api_function< bool_type(uint_type), nullptr > UnmapNamedBuffer
Definition: c_api.hpp:518
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > Vertex4f
Definition: c_api.hpp:4764
gl_api_function< void(double_type), nullptr > ClearDepth
Definition: c_api.hpp:4056
gl_api_function< void(uint_type, uint_type, enum_type, intptr_type), nullptr > GetQueryBufferObjectiv
Definition: c_api.hpp:2191
gl_api_function< void(uint_type, enum_type, uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetProgramResourceName
Definition: c_api.hpp:2524
basic_block< false > block
Alias for non-const byte memory span.
Definition: block.hpp:27
gl_api_function< void(enum_type, int_type), nullptr > MultiTexCoord1i
Definition: c_api.hpp:4841
gl_api_function< void(uint_type, enum_type, uint_type, sizei_type, const enum_type *, sizei_type, sizei_type *, float_type *), nullptr > GetProgramResourcefvNV
Definition: c_api.hpp:2568
EAGINE_MSG_TYPE(gl, TransfFdbk) transform_feedback_tag
Tag type denoting GL transform feedback objects.
Definition: object_name.hpp:100
gl_api_function< void(uint_type, enum_type, uint_type, sizei_type, const enum_type *, sizei_type, sizei_type *, int_type *), nullptr > GetProgramResourceiv
Definition: c_api.hpp:2553
EAGINE_MSG_TYPE(gl, VertexArry) vertex_array_tag
Tag type denoting GL vertex array objects.
Definition: object_name.hpp:104
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > ShaderStorageBlockBinding
Definition: c_api.hpp:3241
gl_api_function< void(enum_type, int_type, enum_type, sizei_type, int_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexImage1D
Definition: c_api.hpp:1023
gl_api_function< bool_type(uint_type), nullptr > IsPathNV
Definition: c_api.hpp:5158
gl_api_function< void(enum_type, enum_type, const_void_ptr_type), nullptr > DrawElementsIndirect
Definition: c_api.hpp:4392
gl_api_function< void(uint_type, uint_type), nullptr > VertexBindingDivisor
Definition: c_api.hpp:319
gl_api_function< void(), nullptr > ResumeTransformFeedback
Definition: c_api.hpp:2076
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type, sizei_type), nullptr > DrawElementsInstanced
Definition: c_api.hpp:4337
gl_api_function< bool_type(uint_type), nullptr > IsQuery
Definition: c_api.hpp:2142
GLuint64 uint64_type
Unsigned 64-bit integer type.
Definition: config.hpp:79
prog_var_location< EAGINE_ID_V(FragData)> frag_data_location
Alias for shader program fragment data variable location wrapper.
Definition: prog_var_loc.hpp:148
gl_api_function< void(const float_type[16]), nullptr > LoadTransposeMatrixf
Definition: c_api.hpp:5067
gl_api_function< void(uint_type), nullptr > PrimitiveRestartIndex
Definition: c_api.hpp:4072
gl_api_function< void(int_type, float_type, float_type, float_type), nullptr > Uniform3f
Definition: c_api.hpp:2842
gl_api_function< void(uint_type, enum_type, uint_type, intptr_type, sizeiptr_type), nullptr > TextureBufferRange
Definition: c_api.hpp:1168
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix4fv
Definition: c_api.hpp:2898
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetSamplerParameterIiv
Definition: c_api.hpp:1596
gl_object_name< program_tag > program_name
Alias for GL program object handle.
Definition: object_name.hpp:128
gl_api_function< void(enum_type, enum_type, enum_type, int_type *), nullptr > GetFramebufferAttachmentParameteriv
Definition: c_api.hpp:1870
gl_api_function< void(float_type, float_type, float_type), nullptr > Color3f
Definition: c_api.hpp:4777
gl_api_function< void(int_type, sizei_type, const int_type *), nullptr > Uniform4iv
Definition: c_api.hpp:2769
gl_api_function< void(enum_type, int64_type *), nullptr > GetInteger64v
Definition: c_api.hpp:4550
gl_api_function< void(uint_type, enum_type), nullptr > NamedFramebufferDrawBuffer
Definition: c_api.hpp:1723
gl_api_function< void(enum_type, int_type, enum_type, sizei_type, sizei_type, int_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexImage2D
Definition: c_api.hpp:1009
gl_api_function< void(enum_type, enum_type, int64_type *), nullptr > GetBufferParameteri64v
Definition: c_api.hpp:558
gl_api_function< void(enum_type), nullptr > Disable
Definition: c_api.hpp:125
@ float_type
Floating-point pixel data.
gl_api_function< void(uint_type, uint_type, int_type, bool_type, int_type, enum_type, enum_type), nullptr > BindImageTexture
Definition: c_api.hpp:645
gl_api_function< void(enum_type, const_void_ptr_type), nullptr > DrawArraysIndirect
Definition: c_api.hpp:4276
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetTextureParameterIiv
Definition: c_api.hpp:1343
gl_api_function< void(uint_type, sizei_type, const char_type *const *, const int_type *), nullptr > CompileShaderInclude
Definition: c_api.hpp:2365
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type, sizei_type, bool_type), nullptr > TextureStorage2DMultisample
Definition: c_api.hpp:892
gl_api_function< void(enum_type, int_type, int_type, sizei_type, int_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexImage1D
Definition: c_api.hpp:742
gl_api_function< void_ptr_type(enum_type, enum_type), nullptr > MapBuffer
Definition: c_api.hpp:471
GLuint uint_type
Unsigned integer type.
Definition: config.hpp:73
gl_object_name< program_pipeline_tag > program_pipeline_name
Alias for GL program pipeline object handle.
Definition: object_name.hpp:123
gl_api_function< void(enum_type, enum_type, const uint_type *), nullptr > TexParameterIuiv
Definition: c_api.hpp:1210
gl_api_function< void(enum_type, int_type, int_type, int_type, sizei_type, sizei_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexSubImage2D
Definition: c_api.hpp:798
gl_api_function< void(enum_type, enum_type, const int_type *), nullptr > TexParameterIiv
Definition: c_api.hpp:1203
gl_api_function< void(enum_type, int_type, const char_type *, int_type, const char_type *), nullptr > NamedString
Definition: c_api.hpp:4627
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetNamedRenderbufferParameteriv
Definition: c_api.hpp:1678
gl_api_function< void(float_type), nullptr > LineWidth
Definition: c_api.hpp:4082
gl_api_function< void(int_type, int_type), nullptr > Uniform1i
Definition: c_api.hpp:2720
gl_api_function< void(uint_type, int_type, int_type, int_type), nullptr > ProgramUniform2i
Definition: c_api.hpp:3010
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type), nullptr > MultiTexCoord4i
Definition: c_api.hpp:4858
gl_api_function< void(int_type, sizei_type, const float_type *), nullptr > Uniform1fv
Definition: c_api.hpp:2856
gl_api_function< void(uint_type, int_type, sizei_type, const float_type *), nullptr > ProgramUniform3fv
Definition: c_api.hpp:3157
gl_api_function< void(uint_type, int_type, uint_type, uint_type), nullptr > ProgramUniform2ui
Definition: c_api.hpp:3066
gl_object_name< texture_tag > texture_name
Alias for GL texture object handle.
Definition: object_name.hpp:153
gl_api_function< void(enum_type), nullptr > Begin
Definition: c_api.hpp:4734
gl_api_function< void(uint_type, uint_type, int_type, enum_type, uint_type), nullptr > VertexArrayAttribIFormat
Definition: c_api.hpp:3780
@ int64_type
64-bit integer value type.
gl_api_function< void(sizei_type, uint_type *), nullptr > GenRenderbuffers
Definition: c_api.hpp:1610
gl_api_function< void(), nullptr > End
Definition: c_api.hpp:4738
gl_api_function< bool_type(uint_type), nullptr > IsFramebuffer
Definition: c_api.hpp:1704
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteTransformFeedbacks
Definition: c_api.hpp:2045
gl_api_function< void(uint_type, uint_type), nullptr > VertexAttribBinding
Definition: c_api.hpp:277
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetQueryiv
Definition: c_api.hpp:2149
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetNamedBufferParameteriv
Definition: c_api.hpp:565
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTextureSubImage3D
Definition: c_api.hpp:1089
gl_api_function< void(enum_type, enum_type, intptr_type, intptr_type, sizeiptr_type), nullptr > CopyBufferSubData
Definition: c_api.hpp:537
gl_api_function< void_ptr_type(uint_type, intptr_type, sizeiptr_type, bitfield_type), nullptr > MapNamedBufferRange
Definition: c_api.hpp:492
Typed enumeration for GL object type constants.
Definition: enum_types.hpp:106
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetShaderiv
Definition: c_api.hpp:2391
gl_api_function< void(const double_type[16]), nullptr > MultMatrixd
Definition: c_api.hpp:5053
gl_api_function< int_type(uint_type, enum_type, const char_type *), nullptr > GetSubroutineUniformLocation
Definition: c_api.hpp:2645
gl_api_function< void(enum_type, float_type), nullptr > PointParameterf
Definition: c_api.hpp:4101
Non-owning wrapper for C-API opaque handle types.
Definition: handle.hpp:26
gl_api_function< bool_type(uint_type), nullptr > IsShader
Definition: c_api.hpp:2346
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateVertexArrays
Definition: c_api.hpp:207
gl_api_function< bool_type(uint_type), nullptr > IsVertexArray
Definition: c_api.hpp:219
gl_api_function< void(uint_type, uint_type, enum_type, intptr_type), nullptr > GetQueryBufferObjectui64v
Definition: c_api.hpp:2212
gl_api_function< bool_type(uint_type), nullptr > IsTexture
Definition: c_api.hpp:612
gl_api_function< void(int_type, float_type, float_type, float_type, float_type), nullptr > Uniform4f
Definition: c_api.hpp:2849
gl_api_function< void(uint_type, int_type, float_type, float_type, float_type), nullptr > ProgramUniform3f
Definition: c_api.hpp:3129
gl_api_function< void(enum_type, intptr_type, sizeiptr_type), nullptr > FlushMappedBufferRange
Definition: c_api.hpp:499
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteVertexArrays
Definition: c_api.hpp:214
gl_api_function< void(uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetProgramPipelineInfoLog
Definition: c_api.hpp:2324
gl_api_function< void(enum_type, uint_type), nullptr > Disablei
Definition: c_api.hpp:130
gl_api_function< uint_type(uint_type, enum_type, const char_type *), nullptr > GetProgramResourceIndex
Definition: c_api.hpp:2517
gl_api_function< uint_type(sizei_type), nullptr > GenPathsNV
Definition: c_api.hpp:5146
gl_api_function< void(uint_type, enum_type, int_type), nullptr > SamplerParameteri
Definition: c_api.hpp:1547
gl_api_function< void(enum_type, enum_type, uint_type, intptr_type, sizeiptr_type), nullptr > TexBufferRange
Definition: c_api.hpp:1154
gl_api_function< bool_type(int_type, const char_type *), nullptr > IsNamedString
Definition: c_api.hpp:4641
gl_api_function< void(sync_type), nullptr > DeleteSync
Definition: c_api.hpp:168
gl_api_function< void(enum_type, enum_type, intptr_type, sizeiptr_type, enum_type, enum_type, const_void_ptr_type), nullptr > ClearBufferSubData
Definition: c_api.hpp:450
gl_api_function< void(int_type, int_type, sizei_type, sizei_type), nullptr > Viewport
Definition: c_api.hpp:3926
gl_api_function< void(enum_type, int_type, enum_type, int_type, int_type, sizei_type, int_type), nullptr > CopyTexImage1D
Definition: c_api.hpp:764
gl_api_function< void(uint_type, sizeiptr_type, const_void_ptr_type, bitfield_type), nullptr > NamedBufferStorage
Definition: c_api.hpp:394
gl_api_function< void(enum_type), nullptr > BlendEquation
Definition: c_api.hpp:4190
gl_api_function< void(float_type, float_type, float_type), nullptr > Translatef
Definition: c_api.hpp:4912
gl_object_name< framebuffer_tag > framebuffer_name
Alias for GL framebuffer object handle.
Definition: object_name.hpp:118
gl_api_function< void(), nullptr > Flush
Definition: c_api.hpp:5669
gl_api_function< void(enum_type, uint_type), nullptr > EndQueryIndexed
Definition: c_api.hpp:2237
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type, sizei_type, sizei_type, bool_type), nullptr > TextureStorage3DMultisample
Definition: c_api.hpp:885
gl_api_function< void(uint_type, int_type, float_type, float_type, float_type, float_type), nullptr > ProgramUniform4f
Definition: c_api.hpp:3136
gl_api_function< void(uint_type, enum_type, const int_type *), nullptr > TextureParameterIiv
Definition: c_api.hpp:1245
gl_api_function< uint_type(uint_type, enum_type, const char_type *), nullptr > GetSubroutineIndex
Definition: c_api.hpp:2624
gl_api_function< void(enum_type, enum_type, const int_type *), nullptr > TexParameteriv
Definition: c_api.hpp:1196
gl_api_function< void(uint_type, enum_type, int64_type *), nullptr > GetNamedBufferParameteri64v
Definition: c_api.hpp:572
gl_api_function< void(uint_type, int_type, float_type, float_type), nullptr > ProgramUniform2f
Definition: c_api.hpp:3122
gl_api_function< void(float_type), nullptr > PointSize
Definition: c_api.hpp:4087
gl_api_function< void(int_type, uint_type, uint_type), nullptr > Uniform2ui
Definition: c_api.hpp:2781
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type), nullptr > TextureStorage1D
Definition: c_api.hpp:871
GLsizeiptr sizeiptr_type
Signed integer size type.
Definition: config.hpp:91
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetProgramiv
Definition: c_api.hpp:2496
gl_api_function< void(int_type, uint_type), nullptr > Uniform1ui
Definition: c_api.hpp:2774
const GLvoid * const_void_ptr_type
Untyped const pointer type.
Definition: config.hpp:43
gl_api_function< void(debug_callback_type *, const_void_ptr_type), nullptr > DebugMessageCallback
Definition: c_api.hpp:4662
gl_api_function< void(int_type, const char_type *), nullptr > DeleteNamedString
Definition: c_api.hpp:4634
gl_api_function< void(int_type, int_type, int_type), nullptr > Uniform2i
Definition: c_api.hpp:2727
prog_var_location< EAGINE_ID_V(SubrtUnfrm)> subroutine_uniform_location
Alias for shader program subroutine uniform location wrapper.
Definition: prog_var_loc.hpp:126
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix2x3fv
Definition: c_api.hpp:2905
gl_api_function< void(enum_type, sizei_type, uint_type *), nullptr > CreateTextures
Definition: c_api.hpp:600
gl_object_name< shader_tag > shader_name
Alias for GL shader object handle.
Definition: object_name.hpp:148
gl_api_function< void(enum_type, float_type *), nullptr > GetFloatv
Definition: c_api.hpp:4564
gl_api_function< void(int_type, float_type), nullptr > Uniform1f
Definition: c_api.hpp:2828
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type, sizei_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexSubImage3D
Definition: c_api.hpp:782
gl_api_function< void(enum_type, uint_type, uint_type, intptr_type, sizeiptr_type), nullptr > BindBufferRange
Definition: c_api.hpp:380
gl_api_function< enum_type(), nullptr > GetError
Definition: c_api.hpp:107
gl_api_function< void(float_type, float_type, float_type), nullptr > Vertex3f
Definition: c_api.hpp:4759
gl_api_function< void(bool_type, bool_type, bool_type, bool_type), nullptr > ColorMask
Definition: c_api.hpp:4015
gl_api_function< void(uint_type, enum_type, const int_type *), nullptr > SamplerParameterIiv
Definition: c_api.hpp:1568
gl_api_function< void(enum_type, enum_type, enum_type, uint_type, int_type), nullptr > FramebufferTexture2D
Definition: c_api.hpp:1919
gl_api_function< void(int_type, sizei_type, const float_type *), nullptr > Uniform2fv
Definition: c_api.hpp:2863
gl_api_function< void(uint_type, enum_type, int_type), nullptr > NamedFramebufferParameteri
Definition: c_api.hpp:1849
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix2x3fv
Definition: c_api.hpp:3192
gl_api_function< void(uint_type, int_type, enum_type, bool_type, uint_type), nullptr > VertexAttribFormat
Definition: c_api.hpp:3752
gl_api_function< void(uint_type, uint_type, uint_type, intptr_type, sizeiptr_type), nullptr > TransformFeedbackBufferRange
Definition: c_api.hpp:2095
gl_api_function< void(uint_type, enum_type, uint_type *), nullptr > GetSamplerParameterIuiv
Definition: c_api.hpp:1603
extension ARB_debug_output
Definition: api.hpp:70
gl_api_function< void(uint_type, uint_type), nullptr > DetachShader
Definition: c_api.hpp:2453
Class wrapping the functions from the GL API.
Definition: api.hpp:32
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateBuffers
Definition: c_api.hpp:347
gl_api_function< void(enum_type), nullptr > MatrixMode
Definition: c_api.hpp:4883
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetQueryObjectiv
Definition: c_api.hpp:2163
gl_api_function< void(int_type, sizei_type, const int_type *), nullptr > Uniform2iv
Definition: c_api.hpp:2755
GLboolean bool_type
Boolean type.
Definition: config.hpp:49
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetTextureParameteriv
Definition: c_api.hpp:1336
prog_var_location< EAGINE_ID_V(VertexAttr)> vertex_attrib_location
Alias for program vertex attribute location wrapper.
Definition: prog_var_loc.hpp:104
gl_api_function< void(double_type, double_type, double_type), nullptr > Scaled
Definition: c_api.hpp:4963
gl_api_function< void(int_type, int_type, int_type), nullptr > Vertex3i
Definition: c_api.hpp:4746
gl_api_function< void(uint_type), nullptr > DisableVertexAttribArray
Definition: c_api.hpp:305
gl_api_function< void(uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetShaderInfoLog
Definition: c_api.hpp:2398
gl_api_function< void(sizei_type, uint_type *), nullptr > GenTransformFeedbacks
Definition: c_api.hpp:2031
gl_api_function< void(uint_type, enum_type, enum_type, int_type *), nullptr > GetNamedFramebufferAttachmentParameteriv
Definition: c_api.hpp:1877
gl_api_function< void(), nullptr > LoadIdentity
Definition: c_api.hpp:4903
gl_api_function< void(int_type), nullptr > TexCoord1i
Definition: c_api.hpp:4806
gl_api_function< void(uint_type, uint_type, uint_type, const char_type *), nullptr > BindFragDataLocationIndexed
Definition: c_api.hpp:2687
gl_api_function< void(enum_type, int_type, enum_type, int_type, int_type, sizei_type, sizei_type, int_type), nullptr > CopyTexImage2D
Definition: c_api.hpp:757
static auto finally(Func func) -> func_on_scope_exit< Func >
Function constructing on-scope-exit actions.
Definition: scope_exit.hpp:144
gl_api_function< void(int_type), nullptr > ClearStencil
Definition: c_api.hpp:4061
gl_api_function< void(enum_type, intptr_type, sizeiptr_type, const_void_ptr_type), nullptr > BufferSubData
Definition: c_api.hpp:415
gl_api_function< void(int_type, sizei_type, const int_type *), nullptr > Uniform3iv
Definition: c_api.hpp:2762
gl_api_function< void(float_type, float_type, float_type), nullptr > PolygonOffsetClamp
Definition: c_api.hpp:4159
gl_api_function< void(enum_type, int_type, int_type, int_type), nullptr > MultiTexCoord3i
Definition: c_api.hpp:4851
gl_object_name< transform_feedback_tag > transform_feedback_name
Alias for GL transform feedback object handle.
Definition: object_name.hpp:158
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateSamplers
Definition: c_api.hpp:1507
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type, sizei_type, bool_type), nullptr > TexStorage2DMultisample
Definition: c_api.hpp:694
gl_api_function< void(int_type, int_type, int_type, int_type, int_type), nullptr > Uniform4i
Definition: c_api.hpp:2741
gl_api_function< void(uint_type, enum_type, uint64_type *), nullptr > GetQueryObjectui64v
Definition: c_api.hpp:2184
gl_api_function< bool_type(uint_type), nullptr > IsProgram
Definition: c_api.hpp:2439
gl_api_function< void(uint_type, enum_type, uint_type, int_type *), nullptr > GetTransformFeedbacki_v
Definition: c_api.hpp:2109
gl_api_function< void(enum_type, enum_type, enum_type), nullptr > StencilOp
Definition: c_api.hpp:3996
gl_api_function< void(uint_type, int_type, int_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTextureSubImage1D
Definition: c_api.hpp:1119
void(enum_type, enum_type, uint_type, enum_type, sizei_type, const char_type *, const_void_ptr_type) debug_callback_type
Alias for the debug callback function type.
Definition: c_api.hpp:91
gl_api_function< void(uint_type, enum_type, uint_type *), nullptr > GetTextureParameterIuiv
Definition: c_api.hpp:1350
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix2x4fv
Definition: c_api.hpp:3206
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateRenderbuffers
Definition: c_api.hpp:1617
gl_api_function< void(uint_type, enum_type, uint_type, int64_type *), nullptr > GetTransformFeedbacki64_v
Definition: c_api.hpp:2116
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteRenderbuffers
Definition: c_api.hpp:1624
gl_api_function< void(enum_type, uint_type, sizei_type, const char_type *), nullptr > ObjectLabel
Definition: c_api.hpp:4694
EAGINE_MSG_TYPE(gl, Query) query_tag
Tag type denoting GL query objects.
Definition: object_name.hpp:80
gl_api_function< void(uint_type, uint_type), nullptr > DisableVertexArrayAttrib
Definition: c_api.hpp:312
EAGINE_MSG_TYPE(gl, Rndrbuffer) renderbuffer_tag
Tag type denoting GL renderbuffer objects.
Definition: object_name.hpp:84
gl_api_function< void(sizei_type, uint_type *), nullptr > GenFramebuffers
Definition: c_api.hpp:1685
gl_api_function< void(uint_type), nullptr > BindProgramPipeline
Definition: c_api.hpp:2289
EAGINE_MSG_TYPE(gl, Texture) texture_tag
Tag type denoting GL texture objects.
Definition: object_name.hpp:96
gl_api_function< void(enum_type, enum_type, enum_type, enum_type), nullptr > StencilOpSeparate
Definition: c_api.hpp:4003
gl_api_function< void(enum_type, float_type, float_type, float_type, float_type), nullptr > MultiTexCoord4f
Definition: c_api.hpp:4879
gl_api_function< void(enum_type, const_void_ptr_type, sizei_type, sizei_type), nullptr > MultiDrawArraysIndirect
Definition: c_api.hpp:4290
gl_api_function< void(uint_type, enum_type, enum_type, enum_type, const_void_ptr_type), nullptr > ClearNamedBufferData
Definition: c_api.hpp:436
gl_api_function< void(uint_type, int_type, uint_type, uint_type, uint_type), nullptr > ProgramUniform3ui
Definition: c_api.hpp:3073
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix4x3fv
Definition: c_api.hpp:3227
gl_api_function< void(uint_type, int_type, uint_type, uint_type, uint_type, uint_type), nullptr > ProgramUniform4ui
Definition: c_api.hpp:3080
gl_api_function< void(enum_type, uint_type), nullptr > BindTransformFeedback
Definition: c_api.hpp:2059
gl_api_function< void(uint_type), nullptr > InvalidateBufferData
Definition: c_api.hpp:523
gl_api_function< void(int_type, int_type, int_type, int_type), nullptr > Color4i
Definition: c_api.hpp:4773
gl_api_function< void(int_type, int_type, sizei_type, sizei_type, enum_type, enum_type, void_ptr_type), nullptr > ReadPixels
Definition: c_api.hpp:4500
gl_api_function< void(enum_type, enum_type, uint_type, int_type, int_type), nullptr > FramebufferTextureLayer
Definition: c_api.hpp:1933
gl_api_function< void(uint_type), nullptr > DeleteProgram
Definition: c_api.hpp:2434
gl_api_function< void(int_type, sizei_type, const uint_type *), nullptr > Uniform3uiv
Definition: c_api.hpp:2816
gl_api_function< void(int_type, uint_type, uint_type, uint_type, uint_type), nullptr > Uniform4ui
Definition: c_api.hpp:2795
gl_api_function< void(uint_type, uint_type, uint_type), nullptr > TransformFeedbackBufferBase
Definition: c_api.hpp:2088
gl_api_function< void(float_type, float_type, float_type, float_type), nullptr > ClearColor
Definition: c_api.hpp:4046
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteProgramPipelines
Definition: c_api.hpp:2277
gl_api_function< void(const double_type[16]), nullptr > LoadTransposeMatrixd
Definition: c_api.hpp:5071
GLintptr intptr_type
Signed integer size type.
Definition: config.hpp:94
GLdouble double_type
Double-precision floating-point type.
Definition: config.hpp:85
gl_api_function< void(enum_type, const float_type *), nullptr > PatchParameterfv
Definition: c_api.hpp:4129
gl_api_function< void(enum_type, enum_type, uint_type, int_type), nullptr > FramebufferTexture
Definition: c_api.hpp:1898
basic_gl_c_api< ApiTraits > c_api
Alias for the basic GL API wrapper.
Definition: api.hpp:39
gl_api_function< void(uint_type, int_type, sizei_type, const float_type *), nullptr > ProgramUniform1fv
Definition: c_api.hpp:3143
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type), nullptr > ProgramUniform3i
Definition: c_api.hpp:3017
gl_api_function< void(), nullptr > Finish
Definition: c_api.hpp:5673
gl_api_function< void(uint_type, enum_type, float_type *), nullptr > GetTextureParameterfv
Definition: c_api.hpp:1329
gl_api_function< void(enum_type), nullptr > GenerateMipmap
Definition: c_api.hpp:1419
gl_api_function< void(int_type, int_type, int_type, int_type), nullptr > Vertex4i
Definition: c_api.hpp:4751
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type), nullptr > TexStorage1D
Definition: c_api.hpp:673
GLfloat float_type
Floating-point type.
Definition: config.hpp:82
gl_api_function< void(), nullptr > EndTransformFeedback
Definition: c_api.hpp:2081
gl_api_function< void(int_type, int_type), nullptr > TexCoord2i
Definition: c_api.hpp:4810
gl_api_function< void(enum_type, const_void_ptr_type, intptr_type, sizei_type, sizei_type), nullptr > MultiDrawArraysIndirectCount
Definition: c_api.hpp:4297
gl_api_function< void(double_type, double_type, double_type), nullptr > Translated
Definition: c_api.hpp:4917
gl_api_function< void(uint_type, int_type, sizei_type, const uint_type *), nullptr > ProgramUniform1uiv
Definition: c_api.hpp:3087
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteSamplers
Definition: c_api.hpp:1514
gl_api_function< void(float_type, float_type), nullptr > PolygonOffset
Definition: c_api.hpp:4152
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type, int_type), nullptr > DrawElementsBaseVertex
Definition: c_api.hpp:4344
gl_api_function< void(uint_type, bitfield_type, uint_type), nullptr > UseProgramStages
Definition: c_api.hpp:2303
gl_api_function< void(uint_type, sizei_type, const char_type *const *, const int_type *), nullptr > ShaderSource
Definition: c_api.hpp:2353
gl_api_function< void(const float_type[16]), nullptr > MultMatrixf
Definition: c_api.hpp:5049
gl_api_function< void(bitfield_type), nullptr > MemoryBarrier
Definition: c_api.hpp:147
gl_api_function< void(float_type, float_type), nullptr > TexCoord2f
Definition: c_api.hpp:4827
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteFramebuffers
Definition: c_api.hpp:1699
GLvoid * void_ptr_type
Untyped pointer type.
Definition: config.hpp:40
gl_api_function< void(uint_type, uint_type, enum_type, intptr_type), nullptr > GetQueryBufferObjectuiv
Definition: c_api.hpp:2198
gl_api_function< void(uint_type, uint_type, intptr_type, sizei_type), nullptr > BindVertexBuffer
Definition: c_api.hpp:238
gl_api_function< void(sizei_type, uint_type *), nullptr > GenVertexArrays
Definition: c_api.hpp:200
gl_api_function< void(uint_type, enum_type, const uint_type *), nullptr > TextureParameterIuiv
Definition: c_api.hpp:1252
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix2x4fv
Definition: c_api.hpp:2919
gl_api_function< void(), nullptr > EndConditionalRender
Definition: c_api.hpp:2256
gl_api_function< void(uint_type, enum_type), nullptr > QueryCounter
Definition: c_api.hpp:2244
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, sizei_type), nullptr > CopyTextureSubImage1D
Definition: c_api.hpp:978
gl_api_function< void(enum_type, int_type, int_type, sizei_type, sizei_type, sizei_type, int_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexImage3D
Definition: c_api.hpp:711
gl_api_function< void(enum_type), nullptr > BeginTransformFeedback
Definition: c_api.hpp:2066
gl_api_function< void(enum_type), nullptr > ReadBuffer
Definition: c_api.hpp:1959
gl_api_function< void(uint_type, enum_type, int_type *), nullptr > GetProgramPipelineiv
Definition: c_api.hpp:2317
gl_api_function< void(uint_type, enum_type), nullptr > BeginConditionalRender
Definition: c_api.hpp:2251
gl_api_function< void(uint_type, int_type, sizei_type, const float_type *), nullptr > ProgramUniform4fv
Definition: c_api.hpp:3164
gl_api_function< void(uint_type, uint_type, intptr_type, intptr_type, sizeiptr_type), nullptr > CopyNamedBufferSubData
Definition: c_api.hpp:544
gl_api_function< void(void), nullptr > PushMatrix
Definition: c_api.hpp:4887
gl_api_function< void(uint_type, enum_type, uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetActiveSubroutineUniformName
Definition: c_api.hpp:2638
uint_type name_type
Object handle type.
Definition: config.hpp:124
gl_api_function< void(const double_type[16]), nullptr > LoadMatrixd
Definition: c_api.hpp:5035
gl_api_function< void(enum_type, sizei_type, uint_type *), nullptr > CreateQueries
Definition: c_api.hpp:2130
gl_api_function< void(uint_type, enum_type, const float_type *), nullptr > TextureParameterfv
Definition: c_api.hpp:1231
gl_api_function< void(uint_type, uint_type), nullptr > BindTextureUnit
Definition: c_api.hpp:638
gl_api_function< void(uint_type, enum_type, int_type), nullptr > TextureParameteri
Definition: c_api.hpp:1224
gl_api_function< void(uint_type), nullptr > CompileShader
Definition: c_api.hpp:2358
gl_api_function< bool_type(enum_type, uint_type), nullptr > IsEnabledi
Definition: c_api.hpp:142
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type, sizei_type), nullptr > CopyTexSubImage1D
Definition: c_api.hpp:850
gl_api_function< void(uint_type, uint_type), nullptr > VertexAttribDivisor
Definition: c_api.hpp:333
gl_api_function< void(int_type, uint_type, uint_type, uint_type), nullptr > Uniform3ui
Definition: c_api.hpp:2788
gl_api_function< void(void), nullptr > PopMatrix
Definition: c_api.hpp:4891
gl_api_function< void(enum_type, uint_type, float_type *), nullptr > GetMultisamplefv
Definition: c_api.hpp:4185
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexSubImage3D
Definition: c_api.hpp:1041
gl_api_function< void(int_type, sizei_type, bool_type, const float_type *), nullptr > UniformMatrix3fv
Definition: c_api.hpp:2891
gl_api_function< bool_type(uint_type), nullptr > IsSampler
Definition: c_api.hpp:1519
gl_api_function< void(uint_type, uint_type, const char_type *), nullptr > BindAttribLocation
Definition: c_api.hpp:2575
gl_api_function< void(float_type, float_type, float_type), nullptr > TexCoord3f
Definition: c_api.hpp:4832
gl_api_function< void(enum_type, enum_type), nullptr > PolygonMode
Definition: c_api.hpp:4145
gl_api_function< void(uint_type, enum_type, float_type), nullptr > TextureParameterf
Definition: c_api.hpp:1217
gl_api_function< void(float_type), nullptr > MinSampleShading
Definition: c_api.hpp:4178
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetTexParameterIiv
Definition: c_api.hpp:1273
gl_api_function< void(sizei_type, uint_type *), nullptr > GenSamplers
Definition: c_api.hpp:1500
gl_api_function< void(int_type, sizei_type, const uint_type *), nullptr > Uniform4uiv
Definition: c_api.hpp:2823
gl_api_function< void(int_type, sizei_type, const int_type *), nullptr > Uniform1iv
Definition: c_api.hpp:2748
gl_api_function< void(uint_type, uint_type, int_type, enum_type, bool_type, uint_type), nullptr > VertexArrayAttribFormat
Definition: c_api.hpp:3773
gl_api_function< void(enum_type, int_type *), nullptr > GetIntegerv
Definition: c_api.hpp:4536
gl_api_function< void(uint_type, uint_type), nullptr > AttachShader
Definition: c_api.hpp:2446
gl_api_function< void(enum_type, uint_type, enum_type, int_type *), nullptr > GetQueryIndexediv
Definition: c_api.hpp:2156
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type, sizei_type), nullptr > TextureStorage2D
Definition: c_api.hpp:864
gl_api_function< void(enum_type, enum_type, enum_type, uint_type, int_type), nullptr > FramebufferTexture1D
Definition: c_api.hpp:1912
gl_api_function< void(uint_type, uint_type, const char_type *), nullptr > BindFragDataLocation
Definition: c_api.hpp:2680
gl_api_function< void(int_type, int_type, int_type, int_type), nullptr > SecondaryColor4i
Definition: c_api.hpp:4792
Class wrapping the C-functions from the GL API.
Definition: c_api.hpp:35
gl_api_function< void(int_type, int_type, int_type, int_type), nullptr > TexCoord4i
Definition: c_api.hpp:4819
gl_api_function< void(uint_type, enum_type, const int_type *), nullptr > TextureParameteriv
Definition: c_api.hpp:1238
gl_api_function< void(uint_type, int_type, int_type), nullptr > ProgramUniform1i
Definition: c_api.hpp:3003
gl_api_function< void(uint_type, enum_type, uint_type, int_type, int_type), nullptr > NamedFramebufferTextureLayer
Definition: c_api.hpp:1940
gl_api_function< void(enum_type, const int_type *, const sizei_type *, sizei_type), nullptr > MultiDrawArrays
Definition: c_api.hpp:4283
prog_var_location< EAGINE_ID_V(ShdrStrBlk)> shader_storage_block_index
Alias for program shader storage block location wrapper.
Definition: prog_var_loc.hpp:170
gl_api_function< void(enum_type, double_type *), nullptr > GetDoublev
Definition: c_api.hpp:4578
gl_api_function< void(enum_type, int_type, int_type, int_type, sizei_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexSubImage2D
Definition: c_api.hpp:1057
gl_api_function< void(int_type, sizei_type, const uint_type *), nullptr > Uniform1uiv
Definition: c_api.hpp:2802
gl_api_function< void(enum_type), nullptr > FrontFace
Definition: c_api.hpp:4134
gl_api_function< void(uint_type, enum_type, uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetActiveSubroutineName
Definition: c_api.hpp:2631
gl_api_function< void(enum_type, enum_type, int_type, uint_type), nullptr > StencilFuncSeparate
Definition: c_api.hpp:3989
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type), nullptr > CopyTextureSubImage2D
Definition: c_api.hpp:971
gl_api_function< void(uint_type, enum_type, intptr_type, sizeiptr_type, enum_type, enum_type, const_void_ptr_type), nullptr > ClearNamedBufferSubData
Definition: c_api.hpp:464
gl_api_function< int_type(uint_type, const char_type *), nullptr > GetFragDataLocation
Definition: c_api.hpp:2694
gl_api_function< void(sizei_type, const uint_type *), nullptr > DeleteBuffers
Definition: c_api.hpp:354
gl_api_function< void(enum_type, float_type, float_type), nullptr > MultiTexCoord2f
Definition: c_api.hpp:4867
gl_api_function< bool_type(uint_type), nullptr > IsProgramPipeline
Definition: c_api.hpp:2284
gl_api_function< void(enum_type, uint_type, uint_type), nullptr > BeginQueryIndexed
Definition: c_api.hpp:2226
gl_api_function< void(int_type, int_type, int_type), nullptr > SecondaryColor3i
Definition: c_api.hpp:4787
gl_api_function< void(uint_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type, sizei_type, enum_type, enum_type, const_void_ptr_type), nullptr > TextureSubImage3D
Definition: c_api.hpp:910
extension ARB_compatibility
Definition: api.hpp:74
gl_api_function< void(float_type, float_type, float_type), nullptr > Scalef
Definition: c_api.hpp:4959
gl_api_function< void(float_type, float_type, float_type), nullptr > SecondaryColor3f
Definition: c_api.hpp:4797
gl_api_function< void(enum_type, int_type), nullptr > PatchParameteri
Definition: c_api.hpp:4122
gl_api_function< bool_type(enum_type), nullptr > UnmapBuffer
Definition: c_api.hpp:511
gl_api_function< void(uint_type, enum_type, sizei_type, sizei_type), nullptr > NamedRenderbufferStorage
Definition: c_api.hpp:1650
gl_api_function< void(enum_type, int_type, int_type, sizei_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexSubImage1D
Definition: c_api.hpp:812
gl_api_function< void(enum_type, enum_type, int_type), nullptr > FramebufferParameteri
Definition: c_api.hpp:1842
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateProgramPipelines
Definition: c_api.hpp:2270
gl_api_function< void(enum_type), nullptr > CullFace
Definition: c_api.hpp:4138
gl_api_function< int_type(uint_type, enum_type, const char_type *), nullptr > GetProgramResourceLocation
Definition: c_api.hpp:2531
gl_api_function< void(uint_type), nullptr > ValidateProgramPipeline
Definition: c_api.hpp:2296
gl_object_name< query_tag > query_name
Alias for GL query object handle.
Definition: object_name.hpp:133
gl_api_function< void(uint_type), nullptr > BindVertexArray
Definition: c_api.hpp:224
GLint64 int64_type
Signed 64-bit integer type.
Definition: config.hpp:76
gl_api_function< void(uint_type, uint_type, int_type, enum_type, uint_type), nullptr > VertexArrayAttribLFormat
Definition: c_api.hpp:3787
gl_api_function< void(uint_type, int_type, sizei_type, const int_type *), nullptr > ProgramUniform4iv
Definition: c_api.hpp:3052
gl_api_function< void(float_type, bool_type), nullptr > SampleCoverage
Definition: c_api.hpp:4166
gl_api_function< void(enum_type, enum_type, const float_type *), nullptr > TexParameterfv
Definition: c_api.hpp:1189
gl_api_function< void(sizei_type, uint_type *), nullptr > GenQueries
Definition: c_api.hpp:2123
gl_api_function< void(enum_type), nullptr > ProvokingVertex
Definition: c_api.hpp:4077
gl_api_function< void(uint_type, enum_type, const int_type *), nullptr > SamplerParameteriv
Definition: c_api.hpp:1561
gl_api_function< void(enum_type, int_type, sizei_type, sizei_type, uint_type), nullptr > DrawArraysInstancedBaseInstance
Definition: c_api.hpp:4262
prog_var_location< EAGINE_ID_V(UniformBlk)> uniform_block_index
Alias for shader program uniform block location wrapper.
Definition: prog_var_loc.hpp:159
gl_api_function< int_type(uint_type, const char_type *), nullptr > GetAttribLocation
Definition: c_api.hpp:2582
gl_api_function< void(uint_type), nullptr > StencilMask
Definition: c_api.hpp:4032
gl_api_function< void(uint_type, uint_type, enum_type, intptr_type), nullptr > GetQueryBufferObjecti64v
Definition: c_api.hpp:2205
gl_api_function< void(int_type, sizei_type, const float_type *), nullptr > Uniform3fv
Definition: c_api.hpp:2870
gl_api_function< void(enum_type, int_type, int_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTexSubImage1D
Definition: c_api.hpp:1071
extension ARB_shading_language_include
Definition: api.hpp:82
gl_api_function< void(uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetProgramInfoLog
Definition: c_api.hpp:2503
GLsync sync_type
Sync handle type.
Definition: config.hpp:97
gl_api_function< void(enum_type, enum_type, enum_type, uint_type, int_type, int_type), nullptr > FramebufferTexture3D
Definition: c_api.hpp:1926
EAGINE_MSG_TYPE(gl, Program) program_tag
Tag type denoting GL program objects.
Definition: object_name.hpp:76
gl_api_function< void(int_type, int_type, int_type, int_type, int_type, int_type, int_type, int_type, bitfield_type, enum_type), nullptr > BlitFramebuffer
Definition: c_api.hpp:1983
gl_api_function< void(enum_type, int_type), nullptr > PointParameteri
Definition: c_api.hpp:4094
gl_api_function< void(int_type, sizei_type, const uint_type *), nullptr > Uniform2uiv
Definition: c_api.hpp:2809
gl_api_function< enum_type(uint_type, enum_type), nullptr > CheckNamedFramebufferStatus
Definition: c_api.hpp:1954
gl_api_function< void(enum_type, int_type, int_type, int_type, int_type, int_type, int_type, sizei_type, sizei_type), nullptr > CopyTexSubImage3D
Definition: c_api.hpp:828
index_data_type
Shape element index type enumeration.
Definition: drawing.hpp:111
gl_api_function< void(uint_type, enum_type, uint_type, int_type), nullptr > NamedFramebufferTexture
Definition: c_api.hpp:1905
gl_api_function< void(intptr_type), nullptr > DispatchComputeIndirect
Definition: c_api.hpp:4479
gl_api_function< void(uint_type, enum_type, const float_type *), nullptr > SamplerParameterfv
Definition: c_api.hpp:1554
gl_api_function< void(enum_type, uint_type, uint_type, sizei_type, enum_type, const_void_ptr_type), nullptr > DrawRangeElements
Definition: c_api.hpp:4317
gl_api_function< void(enum_type, enum_type, int_type *), nullptr > GetRenderbufferParameteriv
Definition: c_api.hpp:1671
gl_api_function< enum_type(enum_type), nullptr > CheckFramebufferStatus
Definition: c_api.hpp:1947
gl_api_function< void(uint_type, int_type, enum_type, bool_type, sizei_type, const_void_ptr_type), nullptr > VertexAttribPointer
Definition: c_api.hpp:3800
gl_api_function< void(uint_type), nullptr > LinkProgram
Definition: c_api.hpp:2470
gl_api_function< void(enum_type, uint_type), nullptr > BindTexture
Definition: c_api.hpp:624
gl_api_function< void(sizei_type, uint_type *), nullptr > CreateFramebuffers
Definition: c_api.hpp:1692
gl_api_function< void(uint_type, uint_type, int_type, int_type, int_type, int_type, int_type, int_type, int_type, int_type, bitfield_type, enum_type), nullptr > BlitNamedFramebuffer
Definition: c_api.hpp:2002
gl_api_function< void(uint_type, uint_type), nullptr > VertexArrayElementBuffer
Definition: c_api.hpp:231
gl_api_function< void(uint_type, sizei_type, const uint_type *), nullptr > BindTextures
Definition: c_api.hpp:631
gl_api_function< void(const float_type[16]), nullptr > LoadMatrixf
Definition: c_api.hpp:5031
gl_api_function< void(uint_type, enum_type, enum_type, int_type *), nullptr > GetProgramStageiv
Definition: c_api.hpp:2310
gl_api_function< void(uint_type, uint_type, uint_type, intptr_type, sizei_type), nullptr > VertexArrayVertexBuffer
Definition: c_api.hpp:245
gl_api_function< void(enum_type), nullptr > DepthFunc
Definition: c_api.hpp:4008
gl_api_function< uint_type(enum_type), nullptr > CreateShader
Definition: c_api.hpp:2336
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix3x2fv
Definition: c_api.hpp:3199
gl_api_function< void(uint_type, enum_type, enum_type, int_type *), nullptr > GetProgramInterfaceiv
Definition: c_api.hpp:2510
gl_api_function< void(uint_type, enum_type), nullptr > NamedFramebufferReadBuffer
Definition: c_api.hpp:1966
gl_api_function< void(int_type, int_type, int_type, int_type), nullptr > Uniform3i
Definition: c_api.hpp:2734
gl_api_function< void(enum_type, float_type, float_type, float_type), nullptr > MultiTexCoord3f
Definition: c_api.hpp:4872
gl_api_function< void(float_type), nullptr > TexCoord1f
Definition: c_api.hpp:4823
gl_api_function< void(bitfield_type), nullptr > Clear
Definition: c_api.hpp:4065
Wrapper for GL extension information getter.
Definition: extensions.hpp:21
gl_api_function< void(uint_type, int_type, sizei_type, bool_type, const float_type *), nullptr > ProgramUniformMatrix4fv
Definition: c_api.hpp:3185
gl_api_function< void(uint_type, int_type, int_type, int_type, sizei_type, sizei_type, enum_type, sizei_type, const_void_ptr_type), nullptr > CompressedTextureSubImage2D
Definition: c_api.hpp:1105
gl_api_function< bool_type(sync_type), nullptr > IsSync
Definition: c_api.hpp:172
gl_owned_object_name< program_tag > owned_program_name
Alias for owned GL program object handle.
Definition: object_name.hpp:188
extension ARB_robustness
Definition: api.hpp:78
gl_api_function< void(uint_type, int_type, sizei_type, const int_type *), nullptr > ProgramUniform2iv
Definition: c_api.hpp:3038
gl_api_function< void(uint_type), nullptr > DeleteShader
Definition: c_api.hpp:2341
gl_api_function< void(enum_type, sizei_type, enum_type, sizei_type, sizei_type, sizei_type, bool_type), nullptr > TexStorage3DMultisample
Definition: c_api.hpp:687
gl_api_function< void(uint_type, uint_type), nullptr > BindSampler
Definition: c_api.hpp:1526
gl_api_function< void(enum_type, enum_type, int_type), nullptr > TexParameteri
Definition: c_api.hpp:1182
gl_api_function< void(uint_type, uint_type, sizei_type, sizei_type *, char_type *), nullptr > GetActiveUniformName
Definition: c_api.hpp:2617
gl_api_function< void(enum_type, enum_type, enum_type, uint_type), nullptr > FramebufferRenderbuffer
Definition: c_api.hpp:1884
gl_api_function< void(uint_type, int_type, float_type), nullptr > ProgramUniform1f
Definition: c_api.hpp:3115
gl_api_function< void(enum_type, uint_type, sizei_type, const char_type *), nullptr > PushDebugGroup
Definition: c_api.hpp:4683
gl_api_function< void(enum_type, sizei_type, enum_type, const_void_ptr_type), nullptr > DrawElements
Definition: c_api.hpp:4304
EAGINE_MSG_TYPE(gl, Shader) shader_tag
Tag type denoting GL shader objects.
Definition: object_name.hpp:92
EAGINE_MSG_TYPE(gl, PathNV) path_nv_tag
Tag type denoting GL path objects.
Definition: object_name.hpp:108
gl_api_function< void(), nullptr > PopDebugGroup
Definition: c_api.hpp:4687
gl_api_function< void(int_type, int_type, int_type), nullptr > TexCoord3i
Definition: c_api.hpp:4814
gl_api_function< void(enum_type, int_type, int_type, sizei_type, sizei_type, int_type, enum_type, enum_type, const_void_ptr_type), nullptr > TexImage2D
Definition: c_api.hpp:727
gl_api_function< void(float_type, float_type), nullptr > Vertex2f
Definition: c_api.hpp:4755
gl_api_function< void(uint_type, int_type, uint_type), nullptr > ProgramUniform1ui
Definition: c_api.hpp:3059
gl_api_function< void(uint_type, enum_type, float_type *), nullptr > GetSamplerParameterfv
Definition: c_api.hpp:1582
gl_api_function< void(uint_type, sizei_type, enum_type, sizei_type, sizei_type, sizei_type), nullptr > TextureStorage3D
Definition: c_api.hpp:857
gl_api_function< int_type(uint_type, const char_type *), nullptr > GetUniformBlockIndex
Definition: c_api.hpp:2610
prog_var_location< EAGINE_ID_V(Subroutine)> subroutine_location
Alias for shader program subroutine location wrapper.
Definition: prog_var_loc.hpp:137
gl_api_function< void(enum_type, enum_type, enum_type, sizei_type, const uint_type *, bool_type), nullptr > DebugMessageControl
Definition: c_api.hpp:4669

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).