Add explicit OpenGL 3.2 support

Some old OS X environments refuse to work with OpenGL 3.0 even though
they support later versions.
This commit is contained in:
Joonas Javanainen 2018-10-28 12:19:17 +02:00
parent 1750aa5e72
commit 4da1e5f54a
No known key found for this signature in database
GPG Key ID: D39CCA5CB19B9179
7 changed files with 77 additions and 1 deletions

View File

@ -36,7 +36,11 @@ pub fn run<F: FnMut(&Ui) -> 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
}

View File

@ -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"),

View File

@ -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);
}

View File

@ -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);
}

View File

@ -197,6 +197,11 @@ fn compile_default_program<F: Facade>(
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"),

View File

@ -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);
}

View File

@ -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);
}