opengl_sdk/src/shaders/shader.rs

44 lines
1.2 KiB
Rust

use crate::{app::gl, models::{Mat4, Vec3}};
pub struct Shader {
pub program: gl::types::GLuint,
pub gl: std::rc::Rc<gl::Gl>,
}
impl Shader {
pub fn use_program(&self) {
unsafe { self.gl.UseProgram(self.program) };
}
pub fn set_uniform_mat4(&self, name: &str, mat: &Mat4) {
unsafe {
let loc = self.gl.GetUniformLocation(
self.program,
name.as_ptr() as *const i8
);
self.gl.UniformMatrix4fv(loc, 1, gl::FALSE, mat.as_ptr());
}
}
pub fn set_uniform_vec3(&self, name: &str, v: &Vec3) {
unsafe {
let loc = self.gl.GetUniformLocation(self.program, name.as_ptr() as *const i8);
self.gl.Uniform3f(loc, v.x, v.y, v.z);
}
}
pub fn set_uniform_f32(&self, name: &str, v: f32) {
unsafe {
let loc = self.gl.GetUniformLocation(self.program, name.as_ptr() as *const i8);
self.gl.Uniform1f(loc, v);
}
}
pub fn set_uniform_i32(&self, name: &str, v: i32) {
unsafe {
let loc = self.gl.GetUniformLocation(self.program, name.as_ptr() as *const i8);
self.gl.Uniform1i(loc, v); // used for texture slots
}
}
}