gdk-graphics 0a0aef92e917cfbac53dffbc32c295e4de914093
Loading...
Searching...
No Matches
limits.h
1// © Joseph Cameron - MIT License
2
3#ifndef GDK_GRAPHICS_LIMITS_H
4#define GDK_GRAPHICS_LIMITS_H
5
6#include <cstddef>
7#include <limits>
8
9namespace gdk::graphics {
12 struct limits final {
14 static constexpr std::size_t UNRESTRICTED = std::numeric_limits<std::size_t>::max();
15
18
26
29
32
35
38
41
44
45 [[nodiscard]] bool operator==(const limits &) const = default;
46 };
47
49 [[nodiscard]] constexpr limits narrowest(const limits &aA, const limits &aB) {
50 const auto least = [](const std::size_t aX, const std::size_t aY) { return aX < aY ? aX : aY; };
51
52 limits out;
53 out.texture_size = least(aA.texture_size, aB.texture_size);
54 out.non_power_of_two_textures = aA.non_power_of_two_textures && aB.non_power_of_two_textures;
55 out.vertex_uniform_vectors = least(aA.vertex_uniform_vectors, aB.vertex_uniform_vectors);
56 out.fragment_uniform_vectors = least(aA.fragment_uniform_vectors, aB.fragment_uniform_vectors);
57 out.texture_units = least(aA.texture_units, aB.texture_units);
58 out.vertex_texture_units = least(aA.vertex_texture_units, aB.vertex_texture_units);
59 out.vertex_attributes = least(aA.vertex_attributes, aB.vertex_attributes);
60 out.varying_vectors = least(aA.varying_vectors, aB.varying_vectors);
61
62 return out;
63 }
64}
65
66#endif
used to (optionally) enforce limits on graphical types used across graphics apis
Definition limits.h:12
static constexpr std::size_t UNRESTRICTED
no limit at all
Definition limits.h:14
std::size_t vertex_texture_units
samplers a vertex shader may declare (GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS)
Definition limits.h:37
std::size_t vertex_uniform_vectors
uniform vectors a vertex shader may declare (GL_MAX_VERTEX_UNIFORM_VECTORS)
Definition limits.h:28
std::size_t fragment_uniform_vectors
uniform vectors a fragment shader may declare (GL_MAX_FRAGMENT_UNIFORM_VECTORS)
Definition limits.h:31
std::size_t varying_vectors
varying vectors between the stages (GL_MAX_VARYING_VECTORS)
Definition limits.h:43
bool non_power_of_two_textures
whether a texture may be other than a power of two wide and tall with any filter and wrapping
Definition limits.h:25
std::size_t vertex_attributes
attribute vectors a vertex shader, or a model, may have (GL_MAX_VERTEX_ATTRIBS)
Definition limits.h:40
std::size_t texture_size
the widest and tallest a texture may be, in texels (GL_MAX_TEXTURE_SIZE)
Definition limits.h:17
std::size_t texture_units
samplers a fragment shader may declare (GL_MAX_TEXTURE_IMAGE_UNITS)
Definition limits.h:34