diff options
Diffstat (limited to 'alacritty/src/renderer/shader.rs')
-rw-r--r-- | alacritty/src/renderer/shader.rs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/alacritty/src/renderer/shader.rs b/alacritty/src/renderer/shader.rs index 9326796b..588937cc 100644 --- a/alacritty/src/renderer/shader.rs +++ b/alacritty/src/renderer/shader.rs @@ -30,11 +30,14 @@ impl ShaderVersion { impl ShaderProgram { pub fn new( shader_version: ShaderVersion, + shader_header: Option<&str>, vertex_shader: &'static str, fragment_shader: &'static str, ) -> Result<Self, ShaderError> { - let vertex_shader = Shader::new(shader_version, gl::VERTEX_SHADER, vertex_shader)?; - let fragment_shader = Shader::new(shader_version, gl::FRAGMENT_SHADER, fragment_shader)?; + let vertex_shader = + Shader::new(shader_version, shader_header, gl::VERTEX_SHADER, vertex_shader)?; + let fragment_shader = + Shader::new(shader_version, shader_header, gl::FRAGMENT_SHADER, fragment_shader)?; let program = unsafe { Self(gl::CreateProgram()) }; @@ -82,12 +85,23 @@ struct Shader(GLuint); impl Shader { fn new( shader_version: ShaderVersion, + shader_header: Option<&str>, kind: GLenum, source: &'static str, ) -> Result<Self, ShaderError> { - let header = shader_version.shader_header(); - let len: [GLint; 2] = [header.len() as GLint, source.len() as GLint]; - let source = [header.as_ptr() as *const _, source.as_ptr() as *const _]; + let version_header = shader_version.shader_header(); + let mut sources = Vec::<*const GLchar>::with_capacity(3); + let mut lengthes = Vec::<GLint>::with_capacity(3); + sources.push(version_header.as_ptr().cast()); + lengthes.push(version_header.len() as GLint); + + if let Some(shader_header) = shader_header { + sources.push(shader_header.as_ptr().cast()); + lengthes.push(shader_header.len() as GLint); + } + + sources.push(source.as_ptr().cast()); + lengthes.push(source.len() as GLint); let shader = unsafe { Self(gl::CreateShader(kind)) }; @@ -95,9 +109,9 @@ impl Shader { unsafe { gl::ShaderSource( shader.id(), - len.len() as GLint, - source.as_ptr() as *const _, - len.as_ptr(), + lengthes.len() as GLint, + sources.as_ptr().cast(), + lengthes.as_ptr(), ); gl::CompileShader(shader.id()); gl::GetShaderiv(shader.id(), gl::COMPILE_STATUS, &mut success); |