44 lines
1.2 KiB
Rust
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
|
|
}
|
|
}
|
|
}
|