Source code for picogl.backend.modern.core.uniform.mvp

import numpy as np
from OpenGL.GL import glUniformMatrix4fv
from OpenGL.raw.GL._types import GL_FALSE
from pyglm import glm

from picogl.backend.modern.core.shader.program import ShaderProgram
from picogl.backend.modern.core.uniform.location import get_uniform_location
from picogl.logger import Logger as log


[docs] def set_mvp_uniform(shader: ShaderProgram = None, mvp: glm.mat4 = None) -> None: """ set_mvp_uniform :param shader: :param mvp: :return: None Set the model_matrix-view-projection matrix uniform in the shader program. """ mvp_loc = get_uniform_location(shader.program, "mvp_matrix") glUniformMatrix4fv(mvp_loc, 1, GL_FALSE, glm.value_ptr(mvp))
[docs] def shader_uniform_set_mvp(shader_program: int, mvp_matrix: np.ndarray | glm.mat4): """ shader_uniform_set_mvp :param mvp_matrix: np.ndarray or glm.mat4 - model_matrix-view-projection matrix :param shader_program: int :return: None """ mvp_loc = get_uniform_location(shader_program, "mvp") if mvp_loc == -1: log.warning("Uniform 'mvp' not found in shader.") else: # Convert numpy data or glm.mat4 to float pointer if isinstance(mvp_matrix, np.ndarray): glUniformMatrix4fv( mvp_loc, 1, GL_FALSE, mvp_matrix.astype(np.float32).flatten() ) else: glUniformMatrix4fv(mvp_loc, 1, GL_FALSE, glm.value_ptr(mvp_matrix))