gui changes, use glsl 3.0 es

This commit is contained in:
griffi-gh 2023-02-10 00:46:20 +01:00
parent c9cfa478d3
commit 39b97eb990
12 changed files with 83 additions and 28 deletions

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
out vec4 out_color; out vec4 out_color;
uniform vec4 color; uniform vec4 color;

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
in vec3 position; in vec3 position;
uniform mat4 model; uniform mat4 model;

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
in vec2 v_uv; in vec2 v_uv;
out vec4 out_color; out vec4 out_color;

View file

@ -1,4 +1,4 @@
#version 150 core #version 300 es
in vec2 position; in vec2 position;
out vec2 v_uv; out vec2 v_uv;

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
out vec4 color; out vec4 color;
uniform vec4 u_color; uniform vec4 u_color;

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
in vec3 position; in vec3 position;
uniform ivec3 u_position; uniform ivec3 u_position;

View file

@ -1,4 +1,7 @@
#version 150 core #version 300 es
precision highp float;
precision lowp sampler2DArray;
in vec3 v_normal; in vec3 v_normal;
in vec2 v_uv; in vec2 v_uv;

View file

@ -1,4 +1,6 @@
#version 150 core #version 300 es
precision highp float;
//TODO pack this data: //TODO pack this data:
// uint position_normal_uv // uint position_normal_uv

View file

@ -1,6 +1,7 @@
use glam::UVec2; use glam::UVec2;
use shipyard::{World, Component, AllStoragesViewMut, SparseSet}; use shipyard::{World, Component, AllStoragesViewMut, SparseSet, NonSendSync, UniqueView};
use glium::glutin::event::{Event, DeviceEvent, DeviceId, WindowEvent}; use glium::glutin::event::{Event, DeviceEvent, DeviceId, WindowEvent};
use crate::rendering::Renderer;
pub mod player_actions; pub mod player_actions;
@ -50,6 +51,19 @@ pub fn process_glutin_events(world: &mut World, event: &Event<'_, ()>) {
} }
} }
pub fn initial_resize_event(
mut storages: AllStoragesViewMut,
) {
let (w, h) = {
let renderer = storages.borrow::<NonSendSync<UniqueView<Renderer>>>().unwrap();
renderer.display.get_framebuffer_dimensions()
};
storages.add_entity((
EventComponent,
WindowResizedEvent(UVec2::new(w, h))
));
}
pub fn clear_events( pub fn clear_events(
mut all_storages: AllStoragesViewMut, mut all_storages: AllStoragesViewMut,
) { ) {

View file

@ -1,6 +1,6 @@
use shipyard::{Component, Unique, Workload, IntoWorkload, AllStoragesView, AllStoragesViewMut}; use shipyard::{Component, Unique, Workload, IntoWorkload, AllStoragesView, AllStoragesViewMut, View, UniqueView, NonSendSync, UniqueViewMut, IntoIter};
use glam::{Vec2, Vec4, Mat3, vec2, Mat4}; use glam::{Vec4, Mat3, vec2, Mat4};
use crate::{color::color_hex, transform::Transform2d}; use crate::{color::color_hex, transform::Transform2d, events::WindowResizedEvent, rendering::Renderer};
pub mod text_widget; pub mod text_widget;
pub mod progressbar; pub mod progressbar;
@ -8,7 +8,7 @@ pub mod progressbar;
use progressbar::{render_progressbars, ProgressbarComponent}; use progressbar::{render_progressbars, ProgressbarComponent};
//TODO compute gui scale on window resize //TODO compute gui scale on window resize
#[derive(Unique, Clone, Copy, Debug)] #[derive(Unique, Clone, Copy, Debug, Default)]
pub struct GuiView(pub Mat4); pub struct GuiView(pub Mat4);
#[derive(Component, Clone, Copy, Debug, Default)] #[derive(Component, Clone, Copy, Debug, Default)]
@ -30,27 +30,44 @@ impl Default for SecondaryColor {
} }
} }
fn update_gui_view(
mut view: UniqueViewMut<GuiView>,
resize: View<WindowResizedEvent>,
) {
let Some(&size) = resize.iter().next() else {
return
};
let [w, h] = size.0.to_array();
view.0 = Mat4::orthographic_rh_gl(0.0, w as f32, h as f32, 0.0, -1.0, 1.0);
}
pub fn init_gui(
storages: AllStoragesView
) {
storages.add_unique(GuiView::default());
}
pub fn update_gui() -> Workload {
(
update_gui_view
).into_workload()
}
pub fn render_gui() -> Workload { pub fn render_gui() -> Workload {
( (
render_progressbars render_progressbars
).into_workload() ).into_workload()
} }
pub fn init_gui(
storages: AllStoragesView,
) {
storages.add_unique(GuiView(Mat4::orthographic_rh_gl(0.0, 1.0, 1.0, 0.0, 0.0, 1.0)));
}
pub fn gui_testing( pub fn gui_testing(
mut storages: AllStoragesViewMut, mut storages: AllStoragesViewMut,
) { ) {
storages.add_entity(( storages.add_entity((
GuiComponent, GuiComponent,
Transform2d(Mat3::from_scale_angle_translation( Transform2d(Mat3::from_scale_angle_translation(
vec2(0.25, 0.05), vec2(1920., 16.),
0., 0.,
vec2(0.5, 0.25) vec2(0., 0.)
)), )),
ProgressbarComponent { ProgressbarComponent {
progress: 0.33 progress: 0.33

View file

@ -1,11 +1,17 @@
use std::net::SocketAddr; use shipyard::{AllStoragesView, NonSendSync, UniqueView};
use shipyard::AllStoragesView; use glium::{Version, Api};
use std::env; use std::{env, net::SocketAddr};
use crate::{ use crate::{
networking::{GameType, ServerAddress}, networking::{GameType, ServerAddress},
state::GameState state::GameState, rendering::Renderer
}; };
pub fn assert_renderer(
renderer: NonSendSync<UniqueView<Renderer>>
) {
assert!(renderer.display.is_glsl_version_supported(&Version(Api::GlEs, 3, 0)), "GLES 3.0 is not supported");
}
pub fn initialize_from_args( pub fn initialize_from_args(
all_storages: AllStoragesView, all_storages: AllStoragesView,
) { ) {

View file

@ -48,7 +48,7 @@ use settings::load_settings;
use camera::compute_cameras; use camera::compute_cameras;
use events::{ use events::{
clear_events, process_glutin_events, clear_events, process_glutin_events,
player_actions::generate_move_events player_actions::generate_move_events, initial_resize_event
}; };
use input::{init_input, process_inputs}; use input::{init_input, process_inputs};
use fly_controller::update_controllers; use fly_controller::update_controllers;
@ -67,11 +67,13 @@ use delta_time::{DeltaTime, init_delta_time};
use cursor_lock::{insert_lock_state, update_cursor_lock_state, lock_cursor_now}; use cursor_lock::{insert_lock_state, update_cursor_lock_state, lock_cursor_now};
use control_flow::{exit_on_esc, insert_control_flow_unique, SetControlFlow}; use control_flow::{exit_on_esc, insert_control_flow_unique, SetControlFlow};
use state::{is_ingame, is_ingame_or_loading, is_loading}; use state::{is_ingame, is_ingame_or_loading, is_loading};
use init::initialize_from_args; use init::{initialize_from_args, assert_renderer};
use gui::{render_gui, init_gui, gui_testing}; use gui::{render_gui, init_gui, gui_testing, update_gui};
fn startup() -> Workload { fn startup() -> Workload {
( (
assert_renderer,
initial_resize_event,
load_settings, load_settings,
load_prefabs, load_prefabs,
init_primitives, init_primitives,
@ -106,6 +108,7 @@ fn update() -> Workload {
apply_queued_blocks, apply_queued_blocks,
).into_workload().run_if(is_ingame), ).into_workload().run_if(is_ingame),
compute_cameras, compute_cameras,
update_gui,
).into_workload() ).into_workload()
} }
fn render() -> Workload { fn render() -> Workload {