Move to virtual workspace

This commit is contained in:
Thom Chiovoloni 2020-12-06 08:25:56 -08:00
parent 413ecc05a0
commit 0df089ab29
61 changed files with 107 additions and 2962 deletions

View File

@ -31,30 +31,20 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
${{ runner.os }}-cargo-
- name: Cache cargo target dirs
uses: actions/cache@v2
with:
path: |
target
imgui-examples/target
imgui-gfx-examples/target
imgui-sys-bindgen/target
key: ${{ runner.os }}-target-lint-stable-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
path: target
key: ${{ runner.os }}-target-lint-stable-${{ hashFiles('**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-target-lint-stable-${{ hashFiles('**/Cargo.toml') }}-
${{ runner.os }}-target-lint-stable-${{ hashFiles('**/Cargo.toml') }}
${{ runner.os }}-target-lint-stable-
${{ runner.os }}-target-lint-
${{ runner.os }}-target-
- run: cargo clippy --workspace --all-targets
# excluded crates
# ... why do only these two have lockfiles? Oh well, keep them up to date if they're in there...
- run: cargo clippy --manifest-path imgui-examples/Cargo.toml --all-targets --locked
- run: cargo clippy --manifest-path imgui-gfx-examples/Cargo.toml --all-targets --locked
- run: cargo clippy --manifest-path imgui-sys-bindgen/Cargo.toml --all-targets
# supported winit versions
- run: cargo clippy --manifest-path imgui-winit-support/Cargo.toml --all-features --all-targets
- run: cargo clippy --manifest-path imgui-winit-support/Cargo.toml --no-default-features --features winit-19 --all-targets
@ -78,12 +68,7 @@ jobs:
- uses: hecrj/setup-rust-action@v1
with:
components: rustfmt
# workspace
- run: cargo fmt --all -- --check
# excluded crates
- run: cargo fmt --manifest-path imgui-examples/Cargo.toml -- --check
- run: cargo fmt --manifest-path imgui-gfx-examples/Cargo.toml -- --check
- run: cargo fmt --manifest-path imgui-sys-bindgen/Cargo.toml -- --check
test:
name: Run tests
@ -130,32 +115,23 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
${{ runner.os }}-cargo-
- name: Cache cargo target dirs
uses: actions/cache@v2
with:
path: |
target
imgui-examples/target
imgui-gfx-examples/target
imgui-sys-bindgen/target
path: target
# note `cargo test` and `cargo clippy` don't use the same build
# artifacts, so this has a different key
key: ${{ runner.os }}-target-test-${{ matrix.rust }}-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-target-test-${{ matrix.rust }}-${{ hashFiles('**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-target-test-${{ matrix.rust }}-${{ hashFiles('**/Cargo.toml') }}-
${{ runner.os }}-target-test-${{ matrix.rust }}-${{ hashFiles('**/Cargo.toml') }}
${{ runner.os }}-target-test-${{ matrix.rust }}-
${{ runner.os }}-target-test-
${{ runner.os }}-target-
- run: cargo test --all
- run: cargo test --manifest-path imgui-examples/Cargo.toml
- run: cargo test --manifest-path imgui-gfx-examples/Cargo.toml
- run: cargo test --manifest-path imgui-sys-bindgen/Cargo.toml
- run: cargo test --manifest-path imgui-gfx-examples/Cargo.toml --no-default-features --features directx
if: runner.os == 'Windows'
- run: cargo test --workspace
# - run: cargo test --manifest-path imgui-gfx-examples/Cargo.toml --no-default-features --features directx
# if: runner.os == 'Windows'
- run: cargo test --manifest-path imgui-winit-support/Cargo.toml --no-default-features --features winit-19
- run: cargo test --manifest-path imgui-winit-support/Cargo.toml --no-default-features --features winit-20
- run: cargo test --manifest-path imgui-winit-support/Cargo.toml --no-default-features --features winit-22

View File

@ -1,41 +1,11 @@
[package]
name = "imgui"
version = "0.6.0"
edition = "2018"
authors = ["The imgui-rs Developers"]
description = "High-level Rust bindings to dear imgui"
homepage = "https://github.com/imgui-rs/imgui-rs"
repository = "https://github.com/imgui-rs/imgui-rs"
license = "MIT/Apache-2.0"
categories = ["gui", "api-bindings"]
readme = "README.markdown"
exclude = [
"/resources"
]
[dependencies]
bitflags = "1.0"
glium = { version = "0.28", default-features = false, optional = true }
gfx = { version = "0.18", optional = true }
imgui-sys = { version = "0.6.0", path = "imgui-sys" }
parking_lot = "0.11"
[features]
wasm = ["imgui-sys/wasm"]
[dev-dependencies]
memoffset = "0.6"
[workspace]
members = [
"imgui",
"imgui-sys",
"imgui-gfx-renderer",
"imgui-glium-renderer",
"imgui-winit-support"
]
exclude = [
"imgui-winit-support",
"imgui-examples",
"imgui-gfx-examples",
"imgui-sys-bindgen"
"imgui-sys-bindgen",
]

1587
imgui-examples/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
[package]
name = "imgui-examples"
name = "examples"
version = "0.0.0"
edition = "2018"
authors = ["The imgui-rs Developers"]
@ -13,6 +13,6 @@ publish = false
clipboard = "0.5"
glium = { version = "0.28", default-features = true }
image = "0.23"
imgui = { path = "../" }
imgui = { path = "../imgui" }
imgui-glium-renderer = { path = "../imgui-glium-renderer" }
imgui-winit-support = { path = "../imgui-winit-support" }

File diff suppressed because it is too large Load Diff

View File

@ -11,18 +11,19 @@ publish = false
[features]
opengl = ["imgui-gfx-renderer/opengl"]
directx = ["imgui-gfx-renderer/directx"]
# FIXME
# directx = ["imgui-gfx-renderer/directx"]
default = ["opengl"]
[dev-dependencies]
gfx = "0.18"
gfx_device_gl = "0.16"
gfx_window_glutin = "0.31"
glutin = "0.21"
glutin = "0.25"
image = "0.23"
imgui = { path = "../" }
imgui = { path = "../imgui" }
imgui-gfx-renderer = { path = "../imgui-gfx-renderer" }
imgui-winit-support = { path = "../imgui-winit-support", default-features = false, features = ["winit-19"] }
imgui-winit-support = { path = "../imgui-winit-support" }
old_school_gfx_glutin_ext = "0.25"
[target.'cfg(windows)'.dev-dependencies]
gfx_device_dx11 = "0.8"

View File

@ -92,7 +92,7 @@ impl Lenna {
let image = image::load_from_memory_with_format(lenna_bytes, ImageFormat::Jpeg)?;
// gfx doesn't support easily RGB8 without alpha, so we need to convert
let image = image.to_rgba();
let image = image.to_rgba8();
let (width, height) = image.dimensions();
let raw_data = image.into_raw();

View File

@ -5,11 +5,11 @@ mod support;
fn main() {
let system = support::init(file!());
#[cfg(feature = "opengl")]
let window_title = im_str!("Hello world (OpenGL)");
#[cfg(feature = "directx")]
let window_title = im_str!("Hello world (DirectX)");
let window_title = if cfg!(all(feature = "directx", windows)) {
im_str!("Hello world (OpenGL)")
} else {
im_str!("Hello world (DirectX)")
};
system.main_loop(|_, ui| {
Window::new(window_title)

View File

@ -1,14 +1,25 @@
use gfx::Device;
use glutin::{Event, WindowEvent};
use glutin::{
dpi::LogicalSize,
event::{Event, WindowEvent},
event_loop::{ControlFlow, EventLoop},
// XXX for easier porting...
platform::desktop::EventLoopExtDesktop,
window::WindowBuilder,
};
use imgui::{Context, FontConfig, FontGlyphRanges, FontSource, Ui};
use imgui_gfx_renderer::{Renderer, Shaders};
use imgui_winit_support::{HiDpiMode, WinitPlatform};
use old_school_gfx_glutin_ext::*;
use std::time::Instant;
type ColorFormat = gfx::format::Rgba8;
type DepthFormat = gfx::format::DepthStencil;
// hack
type EventsLoop = EventLoop<()>;
pub struct System {
pub events_loop: glutin::EventsLoop,
pub events_loop: EventsLoop,
pub imgui: Context,
pub platform: WinitPlatform,
pub render_sys: RenderSystem,
@ -20,10 +31,10 @@ pub fn init(title: &str) -> System {
Some(idx) => title.split_at(idx + 1).1,
None => title,
};
let events_loop = glutin::EventsLoop::new();
let builder = glutin::WindowBuilder::new()
let events_loop = EventsLoop::new();
let builder = WindowBuilder::new()
.with_title(title.to_owned())
.with_dimensions(glutin::dpi::LogicalSize::new(1024f64, 768f64));
.with_inner_size(LogicalSize::new(1024f64, 768f64));
let mut imgui = Context::create();
imgui.set_ini_filename(None);
@ -78,17 +89,22 @@ impl System {
let mut run = true;
while run {
events_loop.poll_events(|event| {
events_loop.run_return(|event, _, control_flow| {
platform.handle_event(imgui.io_mut(), render_sys.window(), &event);
if let Event::WindowEvent { event, .. } = event {
match event {
WindowEvent::Resized(size) => render_sys.update_views(size),
WindowEvent::CloseRequested => run = false,
WindowEvent::Resized(_) => render_sys.update_views(),
WindowEvent::CloseRequested => {
run = false;
}
_ => (),
}
}
*control_flow = ControlFlow::Exit;
});
if !run {
break;
}
let io = imgui.io_mut();
platform
@ -132,15 +148,15 @@ pub struct RenderSystem {
pub device: types::Device,
pub factory: types::Factory,
pub main_color: Option<gfx::handle::RenderTargetView<types::Resources, ColorFormat>>,
pub main_depth: gfx::handle::DepthStencilView<types::Resources, gfx::format::DepthStencil>,
pub main_depth: gfx::handle::DepthStencilView<types::Resources, DepthFormat>,
}
#[cfg(feature = "opengl")]
impl RenderSystem {
pub fn init(
imgui: &mut Context,
builder: glutin::WindowBuilder,
events_loop: &glutin::EventsLoop,
builder: WindowBuilder,
events_loop: &EventsLoop,
) -> RenderSystem {
{
// Fix incorrect colors with sRGB framebuffer
@ -158,10 +174,14 @@ impl RenderSystem {
}
}
let context = glutin::ContextBuilder::new().with_vsync(true);
let (windowed_context, device, mut factory, main_color, main_depth) =
gfx_window_glutin::init(builder, context, &events_loop)
.expect("Failed to initialize graphics");
glutin::ContextBuilder::new()
.with_vsync(true)
.with_gfx_color_depth::<ColorFormat, DepthFormat>()
.build_windowed(builder, events_loop)
.expect("Failed to initialize graphics")
.init_gfx::<ColorFormat, DepthFormat>();
let shaders = {
let version = device.get_info().shading_language;
if version.is_embedded {
@ -193,16 +213,13 @@ impl RenderSystem {
main_depth,
}
}
pub fn window(&self) -> &glutin::Window {
pub fn window(&self) -> &glutin::window::Window {
self.windowed_context.window()
}
pub fn update_views(&mut self, _: glutin::dpi::LogicalSize) {
pub fn update_views(&mut self) {
if let Some(main_color) = self.main_color.as_mut() {
gfx_window_glutin::update_views(
&self.windowed_context,
main_color,
&mut self.main_depth,
);
self.windowed_context
.update_gfx(main_color, &mut self.main_depth);
}
}
pub fn swap_buffers(&mut self) {
@ -210,14 +227,14 @@ impl RenderSystem {
}
}
#[cfg(feature = "directx")]
#[cfg(all(feature = "directx", windows))]
mod types {
pub type Device = gfx_device_dx11::Device;
pub type Factory = gfx_device_dx11::Factory;
pub type Resources = gfx_device_dx11::Resources;
}
#[cfg(feature = "directx")]
#[cfg(all(feature = "directx", windows))]
pub struct RenderSystem {
pub renderer: Renderer<ColorFormat, types::Resources>,
pub window: gfx_window_dxgi::Window,
@ -226,12 +243,12 @@ pub struct RenderSystem {
pub main_color: Option<gfx::handle::RenderTargetView<types::Resources, ColorFormat>>,
}
#[cfg(feature = "directx")]
#[cfg(all(feature = "directx", windows))]
impl RenderSystem {
pub fn init(
imgui: &mut Context,
builder: glutin::WindowBuilder,
events_loop: &glutin::EventsLoop,
builder: WindowBuilder,
events_loop: &EventsLoop,
) -> RenderSystem {
let (window, device, mut factory, main_color) =
gfx_window_dxgi::init(builder, &events_loop).expect("Failed to initialize graphics");
@ -248,7 +265,7 @@ impl RenderSystem {
pub fn window(&self) -> &glutin::Window {
&self.window.inner
}
pub fn update_views(&mut self, size: glutin::dpi::LogicalSize) {
pub fn update_views(&mut self, size: LogicalSize) {
let physical = size.to_physical(self.window().get_hidpi_factor());
let (width, height): (u32, u32) = physical.into();
let _ = self.main_color.take(); // we need to drop main_color before calling update_views

View File

@ -16,7 +16,7 @@ default = ["opengl"]
[dependencies]
gfx = "0.18"
imgui = { version = "0.6.0", path = "../", features = ["gfx"] }
imgui = { version = "0.6.0", path = "../imgui", features = ["gfx"] }
[target.'cfg(windows)'.build-dependencies]
winapi = { version = "0.3", features = ["d3dcompiler"] }

View File

@ -11,4 +11,4 @@ categories = ["gui", "rendering"]
[dependencies]
glium = { version = "0.28", default-features = false }
imgui = { version = "0.6.0", path = "../", features = ["glium"] }
imgui = { version = "0.6.0", path = "../imgui", features = ["glium"] }

View File

@ -10,7 +10,7 @@ license = "MIT/Apache-2.0"
publish = false
[dependencies]
bindgen = "0.55"
bindgen = { version = "0.56", default-features = false }
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"

View File

@ -10,9 +10,9 @@ license = "MIT/Apache-2.0"
categories = ["gui"]
[dependencies]
imgui = { version = "0.6.0", path = "../" }
winit-19 = { version = ">= 0.16, <= 0.19", package = "winit", optional = true }
winit-20 = { version = ">= 0.20, <= 0.21", package = "winit", optional = true }
imgui = { version = "0.6.0", path = "../imgui" }
winit-19 = { version = ">= 0.16, < 0.20", package = "winit", optional = true }
winit-20 = { version = ">= 0.20, < 0.22", package = "winit", optional = true }
winit-22 = { version = "0.22", package = "winit", optional = true }
winit-23 = { version = "0.23", package = "winit", optional = true }

26
imgui/Cargo.toml Normal file
View File

@ -0,0 +1,26 @@
[package]
name = "imgui"
version = "0.6.0"
edition = "2018"
authors = ["The imgui-rs Developers"]
description = "High-level Rust bindings to dear imgui"
homepage = "https://github.com/imgui-rs/imgui-rs"
repository = "https://github.com/imgui-rs/imgui-rs"
license = "MIT/Apache-2.0"
categories = ["gui", "api-bindings"]
readme = "README.markdown"
exclude = ["/resources"]
[dependencies]
bitflags = "1.0"
glium = { version = "0.28", default-features = false, optional = true }
gfx = { version = "0.18", optional = true }
imgui-sys = { version = "0.6.0", path = "../imgui-sys" }
parking_lot = "0.11"
[features]
wasm = ["imgui-sys/wasm"]
[dev-dependencies]
memoffset = "0.6"