diff --git a/imgui-examples/examples/support_gfx/mod.rs b/imgui-examples/examples/support_gfx/mod.rs index 8f97e3a..788d4a2 100644 --- a/imgui-examples/examples/support_gfx/mod.rs +++ b/imgui-examples/examples/support_gfx/mod.rs @@ -36,7 +36,11 @@ pub fn run bool>(title: String, clear_color: [f32; 4], mut run_ } else if version.major >= 4 { Shaders::GlSl400 } else if version.major >= 3 { - Shaders::GlSl130 + if version.minor >= 2 { + Shaders::GlSl150 + } else { + Shaders::GlSl130 + } } else { Shaders::GlSl110 } diff --git a/imgui-gfx-renderer/src/lib.rs b/imgui-gfx-renderer/src/lib.rs index 66afa63..8d99966 100644 --- a/imgui-gfx-renderer/src/lib.rs +++ b/imgui-gfx-renderer/src/lib.rs @@ -97,6 +97,7 @@ extended_defines! { #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum Shaders { GlSl400, // OpenGL 4.0+ + GlSl150, // OpenGL 3.2+ GlSl130, // OpenGL 3.0+ GlSl110, // OpenGL 2.0+ GlSlEs300, // OpenGL ES 3.0+ @@ -111,6 +112,10 @@ impl Shaders { include_bytes!("shader/glsl_400.vert"), include_bytes!("shader/glsl_400.frag"), ), + GlSl150 => ( + include_bytes!("shader/glsl_150.vert"), + include_bytes!("shader/glsl_150.frag"), + ), GlSl130 => ( include_bytes!("shader/glsl_130.vert"), include_bytes!("shader/glsl_130.frag"), diff --git a/imgui-gfx-renderer/src/shader/glsl_150.frag b/imgui-gfx-renderer/src/shader/glsl_150.frag new file mode 100644 index 0000000..675af2e --- /dev/null +++ b/imgui-gfx-renderer/src/shader/glsl_150.frag @@ -0,0 +1,12 @@ +#version 150 + +uniform sampler2D tex; + +in vec2 f_uv; +in vec4 f_color; + +out vec4 Target0; + +void main() { + Target0 = f_color * texture(tex, f_uv.st); +} diff --git a/imgui-gfx-renderer/src/shader/glsl_150.vert b/imgui-gfx-renderer/src/shader/glsl_150.vert new file mode 100644 index 0000000..b8593d1 --- /dev/null +++ b/imgui-gfx-renderer/src/shader/glsl_150.vert @@ -0,0 +1,19 @@ +#version 150 + +uniform mat4 matrix; + +in vec2 pos; +in vec2 uv; +in vec4 col; + +out vec2 f_uv; +out vec4 f_color; + +// Built-in: +// vec4 gl_Position + +void main() { + f_uv = uv; + f_color = col; + gl_Position = matrix * vec4(pos.xy, 0, 1); +} diff --git a/imgui-glium-renderer/src/lib.rs b/imgui-glium-renderer/src/lib.rs index 6a55a46..8eaa8ee 100644 --- a/imgui-glium-renderer/src/lib.rs +++ b/imgui-glium-renderer/src/lib.rs @@ -197,6 +197,11 @@ fn compile_default_program( fragment: include_str!("shader/glsl_400.frag"), outputs_srgb: true, }, + 150 => { + vertex: include_str!("shader/glsl_150.vert"), + fragment: include_str!("shader/glsl_150.frag"), + outputs_srgb: true, + }, 130 => { vertex: include_str!("shader/glsl_130.vert"), fragment: include_str!("shader/glsl_130.frag"), diff --git a/imgui-glium-renderer/src/shader/glsl_150.frag b/imgui-glium-renderer/src/shader/glsl_150.frag new file mode 100644 index 0000000..26e56b5 --- /dev/null +++ b/imgui-glium-renderer/src/shader/glsl_150.frag @@ -0,0 +1,12 @@ +#version 150 + +uniform sampler2D tex; + +in vec2 f_uv; +in vec4 f_color; + +out vec4 out_color; + +void main() { + out_color = f_color * texture(tex, f_uv.st); +} diff --git a/imgui-glium-renderer/src/shader/glsl_150.vert b/imgui-glium-renderer/src/shader/glsl_150.vert new file mode 100644 index 0000000..039d50b --- /dev/null +++ b/imgui-glium-renderer/src/shader/glsl_150.vert @@ -0,0 +1,19 @@ +#version 150 + +uniform mat4 matrix; + +in vec2 pos; +in vec2 uv; +in vec4 col; + +out vec2 f_uv; +out vec4 f_color; + +// Built-in: +// vec4 gl_Position + +void main() { + f_uv = uv; + f_color = col / 255.0; + gl_Position = matrix * vec4(pos.xy, 0, 1); +}