forked from Dav1dde/glad
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rust: adds mx example and minor impl polishing
- Loading branch information
Showing
6 changed files
with
117 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
[package] | ||
name = "gl-glfw" | ||
version = "0.1.0" | ||
|
||
[dependencies] | ||
glfw = "0.37.0" | ||
glad-gl = { path = "./build/glad-gl" } | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
Example: gl-glfw-mx | ||
================ | ||
|
||
|
||
This is basic example showcasing `glad-gl` in combination with | ||
[`glfw`](https://crates.io/crates/glfw). And multiple OpenGL contexts | ||
in different windows. | ||
|
||
To run the example use the following command: | ||
|
||
```sh | ||
./init.sh && cargo run | ||
``` | ||
|
||
The `init.sh` script is just a small utility used to generate | ||
the `glad-gl` crate into the `build/` directory. The `Cargo.toml` | ||
references the dependency using: | ||
|
||
```toml | ||
[dependencies] | ||
glad-gl = { path = "./build/glad-gl" } | ||
``` | ||
|
||
This example is the basic example of the | ||
[glfw crate](https://crates.io/crates/glfw) with some | ||
OpenGL instructions added and just one additional line | ||
to initialize `glad`: | ||
|
||
```rust | ||
gl::load(|e| glfw.get_proc_address_raw(e) as *const std::os::raw::c_void); | ||
``` | ||
|
||
That's all that is needed to initialize and use OpenGL using `glad`! | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/sh | ||
|
||
BASE_PATH="$(dirname $(realpath $0))" | ||
|
||
|
||
cd "${BASE_PATH}/../../../" | ||
|
||
python -m glad --out-path "${BASE_PATH}/build" --extensions="" --api="gl:core=3.3" rust --mx | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
extern crate glfw; | ||
extern crate glad_gl; | ||
use std::sync::mpsc::Receiver; | ||
use glfw::{Action, Context, Key}; | ||
use glad_gl::gl; | ||
|
||
|
||
struct Window { | ||
source: glfw::Window, | ||
events: Receiver<(f64, glfw::WindowEvent)>, | ||
gl: gl::Gl | ||
} | ||
|
||
fn main() { | ||
let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap(); | ||
|
||
let mut w1 = create_window(&mut glfw); | ||
let mut w2 = create_window(&mut glfw); | ||
|
||
while !w1.source.should_close() && !w2.source.should_close() { | ||
glfw.poll_events(); | ||
|
||
draw(&mut w1); | ||
draw(&mut w2); | ||
} | ||
} | ||
|
||
fn create_window(glfw: &mut glfw::Glfw) -> Window { | ||
let (mut window, events) = glfw | ||
.create_window(300, 300, "[glad] Rust - OpenGL with GLFW", glfw::WindowMode::Windowed) | ||
.expect("Failed to create GLFW window."); | ||
|
||
window.set_key_polling(true); | ||
window.make_current(); | ||
|
||
let gl = gl::load(|e| glfw.get_proc_address_raw(e) as *const std::os::raw::c_void); | ||
|
||
Window { | ||
source: window, events, gl | ||
} | ||
} | ||
|
||
fn draw(window: &mut Window) { | ||
for (_, event) in glfw::flush_messages(&window.events) { | ||
handle_window_event(&mut window.source, event); | ||
} | ||
|
||
window.source.make_current(); | ||
unsafe { | ||
window.gl.ClearColor(0.7, 0.9, 0.1, 1.0); | ||
window.gl.Clear(gl::GL_COLOR_BUFFER_BIT); | ||
} | ||
window.source.swap_buffers(); | ||
} | ||
|
||
fn handle_window_event(window: &mut glfw::Window, event: glfw::WindowEvent) { | ||
match event { | ||
glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) => { | ||
window.set_should_close(true) | ||
} | ||
_ => {} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters