28 gl_uniform_location{gl_uniform_location},
34 glUniform1i(gl_uniform_location,
static_cast<GLint
>(value));
39 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLint
>(value));
44 for (std::size_t i = 0; i < values.size(); ++i)
46 ivalues[i] =
static_cast<GLint
>(values[i]);
49 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), ivalues.data());
54 gl_uniform_location{gl_uniform_location},
60 glUniform2i(gl_uniform_location,
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]));
65 glUniform2i(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]));
70 GLint* ivalue = ivalues.data();
71 for (
const auto& value: values)
73 *(++ivalue) =
static_cast<GLint
>(value[0]);
74 *(++ivalue) =
static_cast<GLint
>(value[1]);
77 glUniform2iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), ivalues.data());
82 gl_uniform_location{gl_uniform_location},
88 glUniform3i(gl_uniform_location,
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]),
static_cast<GLint
>(value[2]));
93 glUniform3i(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]),
static_cast<GLint
>(value[2]));
98 GLint* ivalue = ivalues.data();
99 for (
const auto& value: values)
101 *(++ivalue) =
static_cast<GLint
>(value[0]);
102 *(++ivalue) =
static_cast<GLint
>(value[1]);
103 *(++ivalue) =
static_cast<GLint
>(value[2]);
106 glUniform3iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), ivalues.data());
111 gl_uniform_location{gl_uniform_location},
117 glUniform4i(gl_uniform_location,
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]),
static_cast<GLint
>(value[2]),
static_cast<GLint
>(value[3]));
122 glUniform4i(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLint
>(value[0]),
static_cast<GLint
>(value[1]),
static_cast<GLint
>(value[2]),
static_cast<GLint
>(value[3]));
127 GLint* ivalue = ivalues.data();
128 for (
const auto& value: values)
130 *(++ivalue) =
static_cast<GLint
>(value[0]);
131 *(++ivalue) =
static_cast<GLint
>(value[1]);
132 *(++ivalue) =
static_cast<GLint
>(value[2]);
133 *(++ivalue) =
static_cast<GLint
>(value[3]);
136 glUniform4iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), ivalues.data());
141 gl_uniform_location{gl_uniform_location}
146 glUniform1i(gl_uniform_location, value);
151 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index), value);
156 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data());
161 gl_uniform_location{gl_uniform_location}
166 glUniform2iv(gl_uniform_location, 1, value.data());
171 glUniform2iv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
176 glUniform2iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
181 gl_uniform_location{gl_uniform_location}
186 glUniform3iv(gl_uniform_location, 1, value.data());
191 glUniform3iv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
196 glUniform3iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
201 gl_uniform_location{gl_uniform_location}
206 glUniform4iv(gl_uniform_location, 1, value.data());
211 glUniform4iv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
216 glUniform4iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
221 gl_uniform_location{gl_uniform_location}
226 glUniform1ui(gl_uniform_location, value);
231 glUniform1ui(gl_uniform_location +
static_cast<GLint
>(index), value);
236 glUniform1uiv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data());
241 gl_uniform_location{gl_uniform_location}
246 glUniform2uiv(gl_uniform_location, 1, value.data());
251 glUniform2uiv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
256 glUniform2uiv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
261 gl_uniform_location{gl_uniform_location}
266 glUniform3uiv(gl_uniform_location, 1, value.data());
271 glUniform3uiv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
276 glUniform3uiv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
281 gl_uniform_location{gl_uniform_location}
286 glUniform4uiv(gl_uniform_location, 1, value.data());
291 glUniform4uiv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
296 glUniform4uiv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
301 gl_uniform_location{gl_uniform_location}
306 glUniform1f(gl_uniform_location, value);
311 glUniform1f(gl_uniform_location +
static_cast<GLint
>(index), value);
316 glUniform1fv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data());
321 gl_uniform_location{gl_uniform_location}
326 glUniform2fv(gl_uniform_location, 1, value.data());
331 glUniform2fv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
336 glUniform2fv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
341 gl_uniform_location{gl_uniform_location}
346 glUniform3fv(gl_uniform_location, 1, value.data());
351 glUniform3fv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
356 glUniform3fv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
361 gl_uniform_location{gl_uniform_location}
366 glUniform4fv(gl_uniform_location, 1, value.data());
371 glUniform4fv(gl_uniform_location +
static_cast<GLint
>(index), 1, value.
data());
376 glUniform4fv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), values.data()->data());
381 gl_uniform_location{gl_uniform_location}
386 glUniformMatrix2fv(gl_uniform_location, 1, GL_FALSE, value.data());
391 glUniformMatrix2fv(gl_uniform_location +
static_cast<GLint
>(index) * 2, 1, GL_FALSE, value.
data());
396 glUniformMatrix2fv(gl_uniform_location +
static_cast<GLint
>(index) * 2,
static_cast<GLsizei
>(values.size()), GL_FALSE, values.data()->data());
401 gl_uniform_location{gl_uniform_location}
406 glUniformMatrix3fv(gl_uniform_location, 1, GL_FALSE, value.data());
411 glUniformMatrix3fv(gl_uniform_location +
static_cast<GLint
>(index) * 3, 1, GL_FALSE, value.
data());
416 glUniformMatrix3fv(gl_uniform_location +
static_cast<GLint
>(index) * 3,
static_cast<GLsizei
>(values.size()), GL_FALSE, values.data()->data());
421 gl_uniform_location{gl_uniform_location}
426 glUniformMatrix4fv(gl_uniform_location, 1, GL_FALSE, value.data());
431 glUniformMatrix4fv(gl_uniform_location +
static_cast<GLint
>(index) * 4, 1, GL_FALSE, value.
data());
436 glUniformMatrix4fv(gl_uniform_location +
static_cast<GLint
>(index) * 4,
static_cast<GLsizei
>(values.size()), GL_FALSE, values.data()->data());
441 gl_uniform_location{gl_uniform_location},
442 gl_texture_unit_indices(size)
444 std::iota(gl_texture_unit_indices.begin(), gl_texture_unit_indices.end(), gl_first_texture_unit_index);
450 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_image_view() ? value.get_image_view()->m_gl_texture_name : 0);
451 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_sampler() ? value.get_sampler()->m_gl_named_sampler : 0);
454 glUniform1i(gl_uniform_location, gl_texture_unit_indices.front());
459 const GLint gl_texture_index = gl_texture_unit_indices[index];
463 glBindSampler(
static_cast<GLuint
>(gl_texture_index), value.
get_sampler() ? value.
get_sampler()->m_gl_named_sampler : 0);
466 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index), gl_texture_index);
472 for (std::size_t i = 0; i < values.size(); ++i)
474 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
475 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
479 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
485 for (std::size_t i = 0; i < values.size(); ++i)
487 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
488 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
492 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
497 gl_uniform_location{gl_uniform_location},
498 gl_texture_unit_indices(size)
500 std::iota(gl_texture_unit_indices.begin(), gl_texture_unit_indices.end(), gl_first_texture_unit_index);
506 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_image_view() ? value.get_image_view()->m_gl_texture_name : 0);
507 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_sampler() ? value.get_sampler()->m_gl_named_sampler : 0);
510 glUniform1i(gl_uniform_location, gl_texture_unit_indices.front());
515 const GLint gl_texture_index = gl_texture_unit_indices[index];
519 glBindSampler(
static_cast<GLuint
>(gl_texture_index), value.
get_sampler() ? value.
get_sampler()->m_gl_named_sampler : 0);
522 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index), gl_texture_index);
528 for (std::size_t i = 0; i < values.size(); ++i)
530 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
531 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
535 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
541 for (std::size_t i = 0; i < values.size(); ++i)
543 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
544 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
548 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
553 gl_uniform_location{gl_uniform_location},
554 gl_texture_unit_indices(size)
556 std::iota(gl_texture_unit_indices.begin(), gl_texture_unit_indices.end(), gl_first_texture_unit_index);
562 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_image_view() ? value.get_image_view()->m_gl_texture_name : 0);
563 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_sampler() ? value.get_sampler()->m_gl_named_sampler : 0);
566 glUniform1i(gl_uniform_location, gl_texture_unit_indices.front());
571 const GLint gl_texture_index = gl_texture_unit_indices[index];
575 glBindSampler(
static_cast<GLuint
>(gl_texture_index), value.
get_sampler() ? value.
get_sampler()->m_gl_named_sampler : 0);
578 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index), gl_texture_index);
584 for (std::size_t i = 0; i < values.size(); ++i)
586 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
587 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
591 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
597 for (std::size_t i = 0; i < values.size(); ++i)
599 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
600 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
604 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
609 gl_uniform_location{gl_uniform_location},
610 gl_texture_unit_indices(size)
612 std::iota(gl_texture_unit_indices.begin(), gl_texture_unit_indices.end(), gl_first_texture_unit_index);
618 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_image_view() ? value.get_image_view()->m_gl_texture_name : 0);
619 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices.front()), value.get_sampler() ? value.get_sampler()->m_gl_named_sampler : 0);
622 glUniform1i(gl_uniform_location, gl_texture_unit_indices.front());
627 const GLint gl_texture_index = gl_texture_unit_indices[index];
631 glBindSampler(
static_cast<GLuint
>(gl_texture_index), value.
get_sampler() ? value.
get_sampler()->m_gl_named_sampler : 0);
634 glUniform1i(gl_uniform_location +
static_cast<GLint
>(index), gl_texture_index);
640 for (std::size_t i = 0; i < values.size(); ++i)
642 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
643 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
647 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
653 for (std::size_t i = 0; i < values.size(); ++i)
655 glBindTextureUnit(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_image_view() ? values[i]->get_image_view()->m_gl_texture_name : 0);
656 glBindSampler(
static_cast<GLuint
>(gl_texture_unit_indices[index + i]), values[i]->get_sampler() ? values[i]->get_sampler()->m_gl_named_sampler : 0);
660 glUniform1iv(gl_uniform_location +
static_cast<GLint
>(index),
static_cast<GLsizei
>(values.size()), &gl_texture_unit_indices[index]);
void update(bool value) const noexcept override
Updates the value of the variable.
gl_shader_bool(std::size_t size, GLint gl_uniform_location)
gl_shader_bvec2(std::size_t size, GLint gl_uniform_location)
void update(const math::bvec2 &value) const noexcept override
Updates the value of the variable.
void update(const math::bvec3 &value) const noexcept override
Updates the value of the variable.
gl_shader_bvec3(std::size_t size, GLint gl_uniform_location)
void update(const math::bvec4 &value) const noexcept override
Updates the value of the variable.
gl_shader_bvec4(std::size_t size, GLint gl_uniform_location)
gl_shader_float(std::size_t size, GLint gl_uniform_location)
void update(float value) const noexcept override
Updates the value of the variable.
void update(const math::fmat2 &value) const noexcept override
Updates the value of the variable.
gl_shader_fmat2(std::size_t size, GLint gl_uniform_location)
void update(const math::fmat3 &value) const noexcept override
Updates the value of the variable.
gl_shader_fmat3(std::size_t size, GLint gl_uniform_location)
void update(const math::fmat4 &value) const noexcept override
Updates the value of the variable.
gl_shader_fmat4(std::size_t size, GLint gl_uniform_location)
void update(const math::fvec2 &value) const noexcept override
Updates the value of the variable.
gl_shader_fvec2(std::size_t size, GLint gl_uniform_location)
void update(const math::fvec3 &value) const noexcept override
Updates the value of the variable.
gl_shader_fvec3(std::size_t size, GLint gl_uniform_location)
gl_shader_fvec4(std::size_t size, GLint gl_uniform_location)
void update(const math::fvec4 &value) const noexcept override
Updates the value of the variable.
void update(int value) const noexcept override
Updates the value of the variable.
gl_shader_int(std::size_t size, GLint gl_uniform_location)
void update(const math::ivec2 &value) const noexcept override
Updates the value of the variable.
gl_shader_ivec2(std::size_t size, GLint gl_uniform_location)
void update(const math::ivec3 &value) const noexcept override
Updates the value of the variable.
gl_shader_ivec3(std::size_t size, GLint gl_uniform_location)
void update(const math::ivec4 &value) const noexcept override
Updates the value of the variable.
gl_shader_ivec4(std::size_t size, GLint gl_uniform_location)
void update(const texture_1d &value) const noexcept override
Updates the value of the variable.
gl_shader_texture_1d(std::size_t size, GLint gl_uniform_location, GLint gl_first_texture_index)
gl_shader_texture_2d(std::size_t size, GLint gl_uniform_location, GLint gl_first_texture_unit_index)
void update(const texture_2d &value) const noexcept override
Updates the value of the variable.
void update(const texture_3d &value) const noexcept override
Updates the value of the variable.
gl_shader_texture_3d(std::size_t size, GLint gl_uniform_location, GLint gl_first_texture_index)
gl_shader_texture_cube(std::size_t size, GLint gl_uniform_location, GLint gl_first_texture_index)
void update(const texture_cube &value) const noexcept override
Updates the value of the variable.
void update(unsigned int value) const noexcept override
Updates the value of the variable.
gl_shader_uint(std::size_t size, GLint gl_uniform_location)
void update(const math::uvec2 &value) const noexcept override
Updates the value of the variable.
gl_shader_uvec2(std::size_t size, GLint gl_uniform_location)
gl_shader_uvec3(std::size_t size, GLint gl_uniform_location)
void update(const math::uvec3 &value) const noexcept override
Updates the value of the variable.
void update(const math::uvec4 &value) const noexcept override
Updates the value of the variable.
gl_shader_uvec4(std::size_t size, GLint gl_uniform_location)
constexpr const std::shared_ptr< image_view_1d > & get_image_view() const noexcept
Returns the image view.
constexpr const std::shared_ptr< image_view_2d > & get_image_view() const noexcept
Returns the image view.
constexpr const std::shared_ptr< image_view_3d > & get_image_view() const noexcept
Returns the image view.
constexpr const std::shared_ptr< image_view_cube > & get_image_view() const noexcept
Returns the image view.
constexpr const std::shared_ptr< sampler > & get_sampler() const noexcept
Returns the sampler object.
Graphics library interface.
n by m column-major matrix.
constexpr element_type * data() noexcept
Returns a pointer to the first element.
constexpr element_type * data() noexcept
Returns a pointer to the element array.