mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-12 14:08:37 +00:00
[glium-examples] Add custom_textures example
This commit is contained in:
parent
ea8121b539
commit
8689824dea
83
imgui-glium-examples/examples/custom_textures.rs
Normal file
83
imgui-glium-examples/examples/custom_textures.rs
Normal file
@ -0,0 +1,83 @@
|
||||
extern crate glium;
|
||||
extern crate imgui;
|
||||
extern crate imgui_glium_renderer;
|
||||
extern crate imgui_glutin_support;
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
||||
use glium::{
|
||||
backend::Facade,
|
||||
texture::{ClientFormat, RawImage2d},
|
||||
Texture2d,
|
||||
};
|
||||
use imgui::*;
|
||||
|
||||
mod support;
|
||||
use support::Textures;
|
||||
|
||||
const CLEAR_COLOR: [f32; 4] = [1.0, 1.0, 1.0, 1.0];
|
||||
|
||||
#[derive(Default)]
|
||||
struct CustomTexturesApp {
|
||||
my_texture_id: Option<ImTexture>,
|
||||
}
|
||||
|
||||
impl CustomTexturesApp {
|
||||
fn register_textures<F>(&mut self, gl_ctx: &F, textures: &mut Textures)
|
||||
where
|
||||
F: Facade,
|
||||
{
|
||||
const WIDTH: usize = 100;
|
||||
const HEIGHT: usize = 100;
|
||||
|
||||
if self.my_texture_id.is_none() {
|
||||
// Generate dummy texture
|
||||
let mut data = Vec::with_capacity(WIDTH * HEIGHT);
|
||||
for i in 0..WIDTH {
|
||||
for j in 0..HEIGHT {
|
||||
// Insert RGB values
|
||||
data.push(i as u8);
|
||||
data.push(j as u8);
|
||||
data.push((i + j) as u8);
|
||||
}
|
||||
}
|
||||
|
||||
let raw = RawImage2d {
|
||||
data: Cow::Borrowed(&data),
|
||||
width: WIDTH as u32,
|
||||
height: HEIGHT as u32,
|
||||
format: ClientFormat::U8U8U8,
|
||||
};
|
||||
let gl_texture = Texture2d::new(gl_ctx, raw).expect("Create texture");
|
||||
let texture_id = textures.insert(gl_texture);
|
||||
|
||||
self.my_texture_id = Some(texture_id);
|
||||
}
|
||||
}
|
||||
|
||||
fn show_textures(&self, ui: &Ui) {
|
||||
ui.window(im_str!("Hello textures"))
|
||||
.size((300.0, 400.0), ImGuiCond::FirstUseEver)
|
||||
.build(|| {
|
||||
ui.text(im_str!("Hello textures!"));
|
||||
if let Some(my_texture_id) = self.my_texture_id {
|
||||
ui.image(my_texture_id, (100.0, 100.0)).build();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut my_app = CustomTexturesApp::default();
|
||||
|
||||
support::run(
|
||||
"custom_textures.rs".to_owned(),
|
||||
CLEAR_COLOR,
|
||||
|ui, gl_ctx, textures| {
|
||||
my_app.register_textures(gl_ctx, textures);
|
||||
my_app.show_textures(ui);
|
||||
|
||||
true
|
||||
},
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user