mirror of
https://github.com/italicsjenga/mini_gl_fb.git
synced 2024-11-22 23:41:30 +11:00
Save created shaders internally
This commit is contained in:
parent
8557bfece8
commit
18fac37072
42
src/lib.rs
42
src/lib.rs
|
@ -28,9 +28,20 @@ pub fn gotta_go_fast<S: ToString>(window_title: S, window_width: i32, window_hei
|
||||||
gl::load_with(|symbol| gl_window.get_proc_address(symbol) as *const _);
|
gl::load_with(|symbol| gl_window.get_proc_address(symbol) as *const _);
|
||||||
}
|
}
|
||||||
|
|
||||||
let vertex_source = include_str!("./default_vertex_shader.glsl");
|
let vertex_shader = rustic_gl::raw::create_shader(
|
||||||
let fragment_source = include_str!("./default_fragment_shader.glsl");
|
gl::VERTEX_SHADER,
|
||||||
let program = rustic_gl::raw::create_basic_program(vertex_source, fragment_source).unwrap();
|
include_str!("./default_vertex_shader.glsl"),
|
||||||
|
).unwrap();
|
||||||
|
let fragment_shader = rustic_gl::raw::create_shader(
|
||||||
|
gl::FRAGMENT_SHADER,
|
||||||
|
include_str!("./default_fragment_shader.glsl"),
|
||||||
|
).unwrap();
|
||||||
|
let program = unsafe {
|
||||||
|
build_program(&[
|
||||||
|
Some(vertex_shader),
|
||||||
|
Some(fragment_shader),
|
||||||
|
])
|
||||||
|
};
|
||||||
|
|
||||||
let sampler_location = unsafe {
|
let sampler_location = unsafe {
|
||||||
let location = gl::GetUniformLocation(program, b"u_tex0\0".as_ptr() as *const _);
|
let location = gl::GetUniformLocation(program, b"u_tex0\0".as_ptr() as *const _);
|
||||||
|
@ -70,6 +81,9 @@ pub fn gotta_go_fast<S: ToString>(window_title: S, window_width: i32, window_hei
|
||||||
gl_window,
|
gl_window,
|
||||||
program,
|
program,
|
||||||
sampler_location,
|
sampler_location,
|
||||||
|
vertex_shader: Some(vertex_shader),
|
||||||
|
geometry_shader: None,
|
||||||
|
fragment_shader: Some(fragment_shader),
|
||||||
texture,
|
texture,
|
||||||
vao,
|
vao,
|
||||||
vbo,
|
vbo,
|
||||||
|
@ -84,6 +98,9 @@ pub struct Framebuffer {
|
||||||
gl_window: glutin::GlWindow,
|
gl_window: glutin::GlWindow,
|
||||||
program: GLuint,
|
program: GLuint,
|
||||||
sampler_location: GLint,
|
sampler_location: GLint,
|
||||||
|
vertex_shader: Option<GLuint>,
|
||||||
|
geometry_shader: Option<GLuint>,
|
||||||
|
fragment_shader: Option<GLuint>,
|
||||||
texture: GLuint,
|
texture: GLuint,
|
||||||
vao: GLuint,
|
vao: GLuint,
|
||||||
vbo: GLuint,
|
vbo: GLuint,
|
||||||
|
@ -232,3 +249,22 @@ fn create_gl_buffer() -> Option<GLuint> {
|
||||||
Some(b)
|
Some(b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsafe fn build_program(shaders: &[Option<GLuint>]) -> GLuint {
|
||||||
|
let program = rustic_gl::raw::create_program()
|
||||||
|
.unwrap();
|
||||||
|
for shader in shaders.iter() {
|
||||||
|
if let &Some(shader) = shader {
|
||||||
|
gl::AttachShader(program, shader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gl::LinkProgram(program);
|
||||||
|
rustic_gl::raw::get_link_status(program)
|
||||||
|
.unwrap();
|
||||||
|
for shader in shaders {
|
||||||
|
if let &Some(shader) = shader {
|
||||||
|
gl::DetachShader(program, shader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue