♻️ extract get_uniform_locations
parent
358e139c9c
commit
88e58d5677
16
src/main.rs
16
src/main.rs
|
@ -238,26 +238,14 @@ fn main () {
|
||||||
|
|
||||||
let shader_program = ShaderProgram::new (&vert_shader, &frag_shader).unwrap ();
|
let shader_program = ShaderProgram::new (&vert_shader, &frag_shader).unwrap ();
|
||||||
|
|
||||||
let unis: HashMap <_, _> = vec! [
|
let unis = shader_program.get_uniform_locations (vec! [
|
||||||
"mvp",
|
"mvp",
|
||||||
"object_space_light",
|
"object_space_light",
|
||||||
"albedo",
|
"albedo",
|
||||||
"min_albedo",
|
"min_albedo",
|
||||||
"min_bright",
|
"min_bright",
|
||||||
"texture",
|
"texture",
|
||||||
].iter ()
|
].into_iter ());
|
||||||
.map (|name| {
|
|
||||||
let mut s = String::from ("uni_");
|
|
||||||
s.push_str (name);
|
|
||||||
|
|
||||||
let c_str = CString::new (s.as_bytes ()).unwrap ();
|
|
||||||
let loc = shader_program.get_uniform_location (&c_str);
|
|
||||||
|
|
||||||
println! ("Uni {} --> {}", name, loc);
|
|
||||||
|
|
||||||
(String::from (*name), loc)
|
|
||||||
})
|
|
||||||
.collect ();
|
|
||||||
|
|
||||||
let attrs: HashMap <_, Option <u32>> = vec! [
|
let attrs: HashMap <_, Option <u32>> = vec! [
|
||||||
"pos",
|
"pos",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
use std::collections::*;
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
use std::ffi::CStr;
|
use std::ffi::{CStr, CString};
|
||||||
|
|
||||||
pub struct ShaderObject {
|
pub struct ShaderObject {
|
||||||
id: u32,
|
id: u32,
|
||||||
|
@ -116,6 +117,29 @@ impl ShaderProgram {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_uniform_locations <'a, I> (&self, names: I)
|
||||||
|
-> HashMap <String, i32>
|
||||||
|
where I: Iterator <Item = &'a str>
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
gl::UseProgram (self.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
names
|
||||||
|
.map (|name| {
|
||||||
|
let mut s = String::from ("uni_");
|
||||||
|
s.push_str (name);
|
||||||
|
|
||||||
|
let c_str = CString::new (s.as_bytes ()).unwrap ();
|
||||||
|
let loc = unsafe {
|
||||||
|
gl::GetUniformLocation (self.id, c_str.as_ptr ())
|
||||||
|
};
|
||||||
|
|
||||||
|
(String::from (name), loc)
|
||||||
|
})
|
||||||
|
.collect ()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_attribute_location (&self, name: &CStr) -> i32 {
|
pub fn get_attribute_location (&self, name: &CStr) -> i32 {
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::UseProgram (self.id);
|
gl::UseProgram (self.id);
|
||||||
|
|
Loading…
Reference in New Issue