mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Use modern GL code for the examples
This commit is contained in:
parent
4ab83a23e5
commit
9261408cc8
11
build.rs
11
build.rs
|
@ -135,15 +135,8 @@ fn main() {
|
||||||
|
|
||||||
let mut file = File::create(&dest.join("test_gl_bindings.rs")).unwrap();
|
let mut file = File::create(&dest.join("test_gl_bindings.rs")).unwrap();
|
||||||
gl_generator::generate_bindings(gl_generator::StructGenerator,
|
gl_generator::generate_bindings(gl_generator::StructGenerator,
|
||||||
gl_generator::registry::Ns::Gl,
|
gl_generator::registry::Ns::Gles2,
|
||||||
gl_generator::Fallbacks::All,
|
gl_generator::Fallbacks::All,
|
||||||
khronos_api::GL_XML, vec![],
|
khronos_api::GL_XML, vec![],
|
||||||
"1.1", "core", &mut file).unwrap();
|
"2.0", "core", &mut file).unwrap();
|
||||||
|
|
||||||
let mut file = File::create(&dest.join("test_gles1_bindings.rs")).unwrap();
|
|
||||||
gl_generator::generate_bindings(gl_generator::StructGenerator,
|
|
||||||
gl_generator::registry::Ns::Gles1,
|
|
||||||
gl_generator::Fallbacks::All,
|
|
||||||
khronos_api::GL_XML, vec![],
|
|
||||||
"1.1", "core", &mut file).unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
|
||||||
#[cfg(feature = "window")]
|
#[cfg(feature = "window")]
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
let window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let window = glutin::WindowBuilder::new().build().unwrap();
|
||||||
window.set_title("A fantastic window!");
|
window.set_title("A fantastic window!");
|
||||||
unsafe { window.make_current() };
|
unsafe { window.make_current() };
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@ fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
let window = glutin::WindowBuilder::new()
|
let window = glutin::WindowBuilder::new()
|
||||||
.with_gl_profile(glutin::GlProfile::Compatibility)
|
|
||||||
.with_title("Hello world!".to_string())
|
.with_title("Hello world!".to_string())
|
||||||
.with_fullscreen(monitor)
|
.with_fullscreen(monitor)
|
||||||
.build()
|
.build()
|
||||||
|
|
|
@ -16,7 +16,7 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
|
||||||
|
|
||||||
#[cfg(feature = "window")]
|
#[cfg(feature = "window")]
|
||||||
fn main() {
|
fn main() {
|
||||||
let window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let window = glutin::WindowBuilder::new().build().unwrap();
|
||||||
window.set_title("glutin - Cursor grabbing test");
|
window.set_title("glutin - Cursor grabbing test");
|
||||||
unsafe { window.make_current() };
|
unsafe { window.make_current() };
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
|
||||||
|
|
||||||
#[cfg(feature = "window")]
|
#[cfg(feature = "window")]
|
||||||
fn main() {
|
fn main() {
|
||||||
let window1 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let window1 = glutin::WindowBuilder::new().build().unwrap();
|
||||||
let window2 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let window2 = glutin::WindowBuilder::new().build().unwrap();
|
||||||
let window3 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let window3 = glutin::WindowBuilder::new().build().unwrap();
|
||||||
|
|
||||||
let t1 = thread::spawn(move || {
|
let t1 = thread::spawn(move || {
|
||||||
run(window1, (0.0, 1.0, 0.0, 1.0));
|
run(window1, (0.0, 1.0, 0.0, 1.0));
|
||||||
|
|
|
@ -1,19 +1,15 @@
|
||||||
#![cfg(feature = "window")]
|
#![cfg(feature = "window")]
|
||||||
|
|
||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
|
use std::mem;
|
||||||
|
use std::ptr;
|
||||||
use glutin;
|
use glutin;
|
||||||
|
|
||||||
#[cfg(not(target_os = "android"))]
|
|
||||||
mod gl {
|
mod gl {
|
||||||
|
pub use self::Gles2 as Gl;
|
||||||
include!(concat!(env!("OUT_DIR"), "/test_gl_bindings.rs"));
|
include!(concat!(env!("OUT_DIR"), "/test_gl_bindings.rs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
|
||||||
mod gl {
|
|
||||||
pub use self::Gles1 as Gl;
|
|
||||||
include!(concat!(env!("OUT_DIR"), "/test_gles1_bindings.rs"));
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Context {
|
pub struct Context {
|
||||||
gl: gl::Gl
|
gl: gl::Gl
|
||||||
}
|
}
|
||||||
|
@ -28,30 +24,47 @@ pub fn load(window: &glutin::Window) -> Context {
|
||||||
|
|
||||||
println!("OpenGL version {}", version);
|
println!("OpenGL version {}", version);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let vs = gl.CreateShader(gl::VERTEX_SHADER);
|
||||||
|
gl.ShaderSource(vs, 1, [VS_SRC.as_ptr() as *const i8].as_ptr(), ptr::null());
|
||||||
|
gl.CompileShader(vs);
|
||||||
|
|
||||||
|
let fs = gl.CreateShader(gl::FRAGMENT_SHADER);
|
||||||
|
gl.ShaderSource(fs, 1, [FS_SRC.as_ptr() as *const i8].as_ptr(), ptr::null());
|
||||||
|
gl.CompileShader(fs);
|
||||||
|
|
||||||
|
let program = gl.CreateProgram();
|
||||||
|
gl.AttachShader(program, vs);
|
||||||
|
gl.AttachShader(program, fs);
|
||||||
|
gl.LinkProgram(program);
|
||||||
|
gl.UseProgram(program);
|
||||||
|
|
||||||
|
let mut vb = mem::uninitialized();
|
||||||
|
gl.GenBuffers(1, &mut vb);
|
||||||
|
gl.BindBuffer(gl::ARRAY_BUFFER, vb);
|
||||||
|
gl.BufferData(gl::ARRAY_BUFFER,
|
||||||
|
(VERTEX_DATA.len() * mem::size_of::<f32>()) as gl::types::GLsizeiptr,
|
||||||
|
VERTEX_DATA.as_ptr() as *const _, gl::STATIC_DRAW);
|
||||||
|
|
||||||
|
/*let mut vao = mem::uninitialized();
|
||||||
|
gl.GenVertexArrays(1, &mut vao);
|
||||||
|
gl.BindVertexArray(vao);*/
|
||||||
|
let pos_attrib = gl.GetAttribLocation(program, b"position\0".as_ptr() as *const _);
|
||||||
|
let color_attrib = gl.GetAttribLocation(program, b"color\0".as_ptr() as *const _);
|
||||||
|
gl.VertexAttribPointer(pos_attrib as gl::types::GLuint, 2, gl::FLOAT, 0,
|
||||||
|
5 * mem::size_of::<f32>() as gl::types::GLsizei,
|
||||||
|
ptr::null());
|
||||||
|
gl.VertexAttribPointer(color_attrib as gl::types::GLuint, 3, gl::FLOAT, 0,
|
||||||
|
5 * mem::size_of::<f32>() as gl::types::GLsizei,
|
||||||
|
(2 * mem::size_of::<f32>()) as *const () as *const _);
|
||||||
|
gl.EnableVertexAttribArray(pos_attrib as gl::types::GLuint);
|
||||||
|
gl.EnableVertexAttribArray(color_attrib as gl::types::GLuint);
|
||||||
|
}
|
||||||
|
|
||||||
Context { gl: gl }
|
Context { gl: gl }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Context {
|
impl Context {
|
||||||
#[cfg(not(target_os = "android"))]
|
|
||||||
pub fn draw_frame(&self, color: (f32, f32, f32, f32)) {
|
|
||||||
unsafe {
|
|
||||||
self.gl.ClearColor(color.0, color.1, color.2, color.3);
|
|
||||||
self.gl.Clear(gl::COLOR_BUFFER_BIT);
|
|
||||||
|
|
||||||
self.gl.Begin(gl::TRIANGLES);
|
|
||||||
self.gl.Color3f(1.0, 0.0, 0.0);
|
|
||||||
self.gl.Vertex2f(-0.5, -0.5);
|
|
||||||
self.gl.Color3f(0.0, 1.0, 0.0);
|
|
||||||
self.gl.Vertex2f(0.0, 0.5);
|
|
||||||
self.gl.Color3f(0.0, 0.0, 1.0);
|
|
||||||
self.gl.Vertex2f(0.5, -0.5);
|
|
||||||
self.gl.End();
|
|
||||||
|
|
||||||
self.gl.Flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
|
||||||
pub fn draw_frame(&self, color: (f32, f32, f32, f32)) {
|
pub fn draw_frame(&self, color: (f32, f32, f32, f32)) {
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
@ -59,26 +72,37 @@ impl Context {
|
||||||
self.gl.ClearColor(color.0, color.1, color.2, color.3);
|
self.gl.ClearColor(color.0, color.1, color.2, color.3);
|
||||||
self.gl.Clear(gl::COLOR_BUFFER_BIT);
|
self.gl.Clear(gl::COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
self.gl.EnableClientState(gl::VERTEX_ARRAY);
|
|
||||||
self.gl.EnableClientState(gl::COLOR_ARRAY);
|
|
||||||
|
|
||||||
self.gl.VertexPointer(2, gl::FLOAT, (mem::size_of::<f32>() * 5) as i32,
|
|
||||||
mem::transmute(VERTEX_DATA.as_ptr()));
|
|
||||||
self.gl.ColorPointer(3, gl::FLOAT, (mem::size_of::<f32>() * 5) as i32,
|
|
||||||
mem::transmute(VERTEX_DATA.as_ptr().offset(2)));
|
|
||||||
|
|
||||||
self.gl.DrawArrays(gl::TRIANGLES, 0, 3);
|
self.gl.DrawArrays(gl::TRIANGLES, 0, 3);
|
||||||
self.gl.DisableClientState(gl::VERTEX_ARRAY);
|
|
||||||
self.gl.DisableClientState(gl::COLOR_ARRAY);
|
|
||||||
|
|
||||||
self.gl.Flush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
|
||||||
static VERTEX_DATA: [f32; 15] = [
|
static VERTEX_DATA: [f32; 15] = [
|
||||||
-0.5, -0.5, 1.0, 0.0, 0.0,
|
-0.5, -0.5, 1.0, 0.0, 0.0,
|
||||||
0.0, 0.5, 0.0, 1.0, 0.0,
|
0.0, 0.5, 0.0, 1.0, 0.0,
|
||||||
0.5, -0.5, 0.0, 0.0, 1.0
|
0.5, -0.5, 0.0, 0.0, 1.0
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const VS_SRC: &'static [u8] = b"
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
lowp attribute vec2 position;
|
||||||
|
lowp attribute vec3 color;
|
||||||
|
|
||||||
|
lowp varying vec3 v_color;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = vec4(position, 0.0, 1.0);
|
||||||
|
v_color = color;
|
||||||
|
}
|
||||||
|
\0";
|
||||||
|
|
||||||
|
const FS_SRC: &'static [u8] = b"
|
||||||
|
#version 100
|
||||||
|
|
||||||
|
lowp varying vec3 v_color;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_FragColor = vec4(v_color, 1.0);
|
||||||
|
}
|
||||||
|
\0";
|
||||||
|
|
|
@ -19,8 +19,7 @@ fn resize_callback(width: u32, height: u32) {
|
||||||
|
|
||||||
#[cfg(feature = "window")]
|
#[cfg(feature = "window")]
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility)
|
let mut window = glutin::WindowBuilder::new().with_decorations(false)
|
||||||
.with_decorations(false)
|
|
||||||
.with_transparency(true)
|
.with_transparency(true)
|
||||||
.build().unwrap();
|
.build().unwrap();
|
||||||
window.set_title("A fantastic window!");
|
window.set_title("A fantastic window!");
|
||||||
|
|
|
@ -19,7 +19,7 @@ fn resize_callback(width: u32, height: u32) {
|
||||||
|
|
||||||
#[cfg(feature = "window")]
|
#[cfg(feature = "window")]
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
|
let mut window = glutin::WindowBuilder::new().build().unwrap();
|
||||||
window.set_title("A fantastic window!");
|
window.set_title("A fantastic window!");
|
||||||
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
|
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
|
||||||
unsafe { window.make_current() };
|
unsafe { window.make_current() };
|
||||||
|
|
Loading…
Reference in a new issue