initial commit

master
Able 2022-03-25 19:47:55 -05:00
commit 943412986c
Signed by: able
GPG Key ID: D164AF5F5700BE51
5 changed files with 327 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/target

154
Cargo.lock generated Normal file
View File

@ -0,0 +1,154 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "bgfx-rs"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d70c350be673dbbe40eb048e6542e1f20b3f2a04462a248d078b76dd2281fd"
dependencies = [
"bgfx-sys",
"bitflags",
"cfixed-string",
]
[[package]]
name = "bgfx-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2947cb050bee39d214c166ba8931b0ee3b5fb4d44ac0aebb3b05637d421ef"
dependencies = [
"cc",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cc"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
dependencies = [
"jobserver",
]
[[package]]
name = "cfixed-string"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9234271d550b2b3898521602c86dbea82bd97ae31c22fbc5969474a4934e0ac"
[[package]]
name = "cmake"
version = "0.1.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
dependencies = [
"cc",
]
[[package]]
name = "cty"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
[[package]]
name = "glfw"
version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "103c29fa9d30c5371187895a10948d4f54b4111450328b4e439133d88243c5e3"
dependencies = [
"bitflags",
"glfw-sys",
"objc",
"raw-window-handle",
"winapi",
]
[[package]]
name = "glfw-sys"
version = "3.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b0cbb12e2dfac494316e91f6bf7cf070ccd9c61501a02f4af14d71222c9f67f"
dependencies = [
"cmake",
]
[[package]]
name = "jobserver"
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
dependencies = [
"libc",
]
[[package]]
name = "libc"
version = "0.2.121"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
dependencies = [
"libc",
]
[[package]]
name = "objc"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
dependencies = [
"malloc_buf",
]
[[package]]
name = "raw-window-handle"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fba75eee94a9d5273a68c9e1e105d9cffe1ef700532325788389e5a83e2522b7"
dependencies = [
"cty",
]
[[package]]
name = "vox"
version = "0.1.0"
dependencies = [
"bgfx-rs",
"glfw",
"raw-window-handle",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"

13
Cargo.toml Normal file
View File

@ -0,0 +1,13 @@
[package]
name = "vox"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bgfx-rs = "0.7.0"
glfw = "0.44.0"
raw-window-handle = "0.4.2"

104
src/main.rs Normal file
View File

@ -0,0 +1,104 @@
pub mod platform;
pub struct Position3D {
pub x: f64,
pub y: f64,
pub z: f64,
}
pub struct VoxelGrid {
pub name: String,
pub position: Position3D,
}
use bgfx::*;
use bgfx_rs::bgfx;
use glfw::{Action, Key, Window};
use platform::{get_platform_data, get_render_type};
const WIDTH: usize = 1280;
const HEIGHT: usize = 720;
fn main() {
let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap();
glfw.window_hint(glfw::WindowHint::ClientApi(glfw::ClientApiHint::NoApi));
let (mut window, events) = glfw
.create_window(
WIDTH as _,
HEIGHT as _,
"Vox - ESC to close",
glfw::WindowMode::Windowed,
)
.expect("Failed to create GLFW window.");
window.set_key_polling(true);
let init = init(&window);
if !bgfx::init(&init) {
panic!("failed to init bgfx");
}
// bgfx::set_debug(DebugFlags::TEXT.bits());
bgfx::set_view_clear(
0,
ClearFlags::COLOR.bits() | ClearFlags::DEPTH.bits(),
SetViewClearArgs {
rgba: 0x00000000,
..Default::default()
},
);
let mut old_size = (0, 0);
while !window.should_close() {
glfw.poll_events();
for (_, event) in glfw::flush_messages(&events) {
if let glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) = event {
window.set_should_close(true)
}
}
let size = window.get_framebuffer_size();
if old_size != size {
bgfx::reset(size.0 as _, size.1 as _, ResetArgs::default());
old_size = size;
}
bgfx::set_view_rect(0, 0, 0, size.0 as _, size.1 as _);
bgfx::touch(0);
/*
bgfx::dbg_text_clear(DbgTextClearArgs::default());
bgfx::dbg_text(0, 1, 0x0f, "Color can be changed with ANSI \x1b[9;me\x1b[10;ms\x1b[11;mc\x1b[12;ma\x1b[13;mp\x1b[14;me\x1b[0m code too.");
bgfx::dbg_text(80, 1, 0x0f, "\x1b[;0m \x1b[;1m \x1b[; 2m \x1b[; 3m \x1b[; 4m \x1b[; 5m \x1b[; 6m \x1b[; 7m \x1b[0m");
bgfx::dbg_text(80, 2, 0x0f, "\x1b[;8m \x1b[;9m \x1b[;10m \x1b[;11m \x1b[;12m \x1b[;13m \x1b[;14m \x1b[;15m \x1b[0m");
bgfx::dbg_text(
0,
4,
0x3f,
"Description: Initialization and debug text with bgfx-rs Rust API.",
);
*/
bgfx::frame(false);
}
shutdown_handler();
}
pub fn shutdown_handler() {
bgfx::shutdown();
println!("shutdown");
}
pub fn init(window: &Window) -> Init {
let mut init = Init::new();
init.type_r = get_render_type();
init.resolution.width = WIDTH as u32;
init.resolution.height = HEIGHT as u32;
init.resolution.reset = ResetFlags::VSYNC.bits();
init.platform_data = get_platform_data(&window);
init
}

55
src/platform.rs Normal file
View File

@ -0,0 +1,55 @@
use bgfx_rs::static_lib::PlatformData;
use bgfx_rs::static_lib::RendererType;
use glfw::Window;
use raw_window_handle::{HasRawWindowHandle, RawWindowHandle};
pub fn get_platform_data(window: &Window) -> PlatformData {
let mut pd = PlatformData::new();
match window.raw_window_handle() {
#[cfg(any(
target_os = "linux",
target_os = "dragonfly",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd"
))]
RawWindowHandle::Xlib(data) => {
pd.nwh = data.window as *mut _;
pd.ndt = data.display as *mut _;
}
#[cfg(any(
target_os = "linux",
target_os = "dragonfly",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd"
))]
RawWindowHandle::Wayland(data) => {
pd.ndt = data.surface; // same as window, on wayland there ins't a concept of windows
pd.nwh = data.display;
}
#[cfg(target_os = "macos")]
RawWindowHandle::MacOS(data) => {
pd.nwh = data.ns_window;
}
#[cfg(target_os = "windows")]
RawWindowHandle::Windows(data) => {
pd.nwh = data.hwnd;
}
_ => panic!("Unsupported Window Manager"),
}
return pd;
}
#[cfg(target_os = "linux")]
pub fn get_render_type() -> RendererType {
RendererType::OpenGL
}
#[cfg(not(target_os = "linux"))]
pub fn get_render_type() -> RendererType {
RendererType::Count
}