target os build
This commit is contained in:
parent
6d6836a83f
commit
b588115b7d
@ -158,10 +158,11 @@ impl AttaWithBuffer for AggFastPath {
|
|||||||
|
|
||||||
let len = ebo.len() as i32;
|
let len = ebo.len() as i32;
|
||||||
|
|
||||||
attach.bind_data(&vbo, Some(&ebo), len, glow::STATIC_DRAW);
|
attach.bind_data(gl,&vbo, Some(&ebo), len, glow::STATIC_DRAW);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
fn init(
|
fn init(
|
||||||
&self,
|
&self,
|
||||||
gl: &glow::Context,
|
gl: &glow::Context,
|
||||||
@ -197,6 +198,48 @@ impl AttaWithBuffer for AggFastPath {
|
|||||||
(vao, vbo, Some(ebo), None)
|
(vao, vbo, Some(ebo), None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
fn init(
|
||||||
|
&self,
|
||||||
|
gl: &glow::Context,
|
||||||
|
) -> (
|
||||||
|
NativeVertexArray,
|
||||||
|
NativeBuffer,
|
||||||
|
Option<NativeBuffer>,
|
||||||
|
Option<NativeTexture>,
|
||||||
|
) {
|
||||||
|
unsafe {
|
||||||
|
let vao = gl.create_vertex_array().unwrap();
|
||||||
|
let vbo = gl.create_buffer().unwrap();
|
||||||
|
|
||||||
|
gl.vertex_array_vertex_buffer(vao, 0, Some(vbo), 0, 40);
|
||||||
|
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 0);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 0, 4, glow::FLOAT, 0);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 1);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 1, 3, glow::FLOAT, 12);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 2);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 2, 3, glow::FLOAT, 24);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 3);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 3, 3, glow::FLOAT, 36);
|
||||||
|
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 0, 0);
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 1, 0);
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 2, 0);
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 3, 0);
|
||||||
|
|
||||||
|
let ebo = gl.create_buffer().unwrap();
|
||||||
|
gl.vertex_array_element_buffer(vao, Some(ebo));
|
||||||
|
|
||||||
|
|
||||||
|
(vao, vbo, Some(ebo), None)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Debug, Clone, Copy, Zeroable, Pod)]
|
#[derive(Debug, Clone, Copy, Zeroable, Pod)]
|
||||||
|
|||||||
@ -54,6 +54,7 @@ impl ColorMap for LinearColormap {
|
|||||||
program: &crate::components::Program,
|
program: &crate::components::Program,
|
||||||
) -> crate::errors::Result<()> {
|
) -> crate::errors::Result<()> {
|
||||||
use bytemuck::cast_slice;
|
use bytemuck::cast_slice;
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
unsafe {
|
unsafe {
|
||||||
if self.color_changed {
|
if self.color_changed {
|
||||||
let texture = gl.create_texture().unwrap();
|
let texture = gl.create_texture().unwrap();
|
||||||
@ -92,6 +93,27 @@ impl ColorMap for LinearColormap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
unsafe {
|
||||||
|
let texture = gl.create_named_texture(glow::TEXTURE_1D).unwrap();
|
||||||
|
gl.texture_parameter_i32(
|
||||||
|
texture,
|
||||||
|
glow::TEXTURE_MIN_FILTER,
|
||||||
|
glow::NEAREST as i32,
|
||||||
|
);
|
||||||
|
gl.texture_parameter_i32(
|
||||||
|
texture,
|
||||||
|
glow::TEXTURE_MAG_FILTER,
|
||||||
|
glow::NEAREST as i32,
|
||||||
|
);
|
||||||
|
|
||||||
|
// gl.tex_storage_1d(texture, 0, glow::RGBA, self.colors.len() as i32)
|
||||||
|
|
||||||
|
todo!("implement this");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -310,10 +310,11 @@ impl AttaWithBuffer for Text {
|
|||||||
&mut *self.font_manager.borrow_mut(),
|
&mut *self.font_manager.borrow_mut(),
|
||||||
&mut *self.cache.borrow_mut(),
|
&mut *self.cache.borrow_mut(),
|
||||||
)?;
|
)?;
|
||||||
attach.bind_data(&v.vertex(), None, v.len() as i32, glow::STATIC_DRAW);
|
attach.bind_data(gl,&v.vertex(), None, v.len() as i32, glow::STATIC_DRAW);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
fn init(
|
fn init(
|
||||||
&self,
|
&self,
|
||||||
gl: &glow::Context,
|
gl: &glow::Context,
|
||||||
@ -337,6 +338,36 @@ impl AttaWithBuffer for Text {
|
|||||||
gl.bind_vertex_array(None);
|
gl.bind_vertex_array(None);
|
||||||
gl.bind_buffer(glow::ARRAY_BUFFER, None);
|
gl.bind_buffer(glow::ARRAY_BUFFER, None);
|
||||||
|
|
||||||
|
(vao, vbo, None, None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OpenGl 4.6
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
fn init(
|
||||||
|
&self,
|
||||||
|
gl: &glow::Context,
|
||||||
|
) -> (
|
||||||
|
glow::NativeVertexArray,
|
||||||
|
glow::NativeBuffer,
|
||||||
|
Option<glow::NativeBuffer>,
|
||||||
|
Option<glow::NativeTexture>,
|
||||||
|
) {
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let vao = gl.create_vertex_array().unwrap();
|
||||||
|
let vbo = gl.create_buffer().unwrap();
|
||||||
|
gl.vertex_array_vertex_buffer(vao, 0, Some(vbo), 0, 48);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 0);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 0, 4, glow::FLOAT, 0);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 1);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 0, 4, glow::FLOAT, 16);
|
||||||
|
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 0, 0);
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 1, 0);
|
||||||
|
|
||||||
(vao, vbo, None, None)
|
(vao, vbo, None, None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -304,7 +304,7 @@ impl AttaWithBuffer for GeoQuadMesh {
|
|||||||
0.0,
|
0.0,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
attach.bind_data(&vertices, None, 4, glow::STATIC_DRAW);
|
attach.bind_data(gl,&vertices, None, 4, glow::STATIC_DRAW);
|
||||||
|
|
||||||
// Texture
|
// Texture
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -376,6 +376,7 @@ impl AttaWithBuffer for GeoQuadMesh {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
fn init(
|
fn init(
|
||||||
&self,
|
&self,
|
||||||
gl: &glow::Context,
|
gl: &glow::Context,
|
||||||
@ -398,6 +399,65 @@ impl AttaWithBuffer for GeoQuadMesh {
|
|||||||
gl.bind_vertex_array(None);
|
gl.bind_vertex_array(None);
|
||||||
gl.bind_buffer(glow::ARRAY_BUFFER, None);
|
gl.bind_buffer(glow::ARRAY_BUFFER, None);
|
||||||
|
|
||||||
|
// Create Texture
|
||||||
|
let texture = gl.create_texture().unwrap();
|
||||||
|
gl.bind_texture(glow::TEXTURE_3D, Some(texture));
|
||||||
|
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_3D,
|
||||||
|
glow::TEXTURE_MIN_FILTER,
|
||||||
|
glow::NEAREST as i32,
|
||||||
|
);
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_3D,
|
||||||
|
glow::TEXTURE_MAG_FILTER,
|
||||||
|
glow::NEAREST as i32,
|
||||||
|
);
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_3D,
|
||||||
|
glow::TEXTURE_WRAP_S,
|
||||||
|
glow::CLAMP_TO_EDGE as i32,
|
||||||
|
);
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_3D,
|
||||||
|
glow::TEXTURE_WRAP_T,
|
||||||
|
glow::CLAMP_TO_EDGE as i32,
|
||||||
|
);
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_3D,
|
||||||
|
glow::TEXTURE_WRAP_R,
|
||||||
|
glow::CLAMP_TO_EDGE as i32,
|
||||||
|
);
|
||||||
|
|
||||||
|
(vao, vbo, None, Some(texture))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
fn init(
|
||||||
|
&self,
|
||||||
|
gl: &glow::Context,
|
||||||
|
) -> (
|
||||||
|
glow::NativeVertexArray,
|
||||||
|
glow::NativeBuffer,
|
||||||
|
Option<glow::NativeBuffer>,
|
||||||
|
Option<glow::NativeTexture>,
|
||||||
|
) {
|
||||||
|
unsafe {
|
||||||
|
let vao = gl.create_vertex_array().unwrap();
|
||||||
|
let vbo = gl.create_buffer().unwrap();
|
||||||
|
|
||||||
|
gl.vertex_array_vertex_buffer(vao, 0, Some(vbo), 0, 24);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 0);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 0, 3, glow::FLOAT, 0);
|
||||||
|
gl.enable_vertex_array_attrib(vao, 1);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 1, 3, glow::FLOAT, 12);
|
||||||
|
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 0, 0);
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 1, 0);
|
||||||
|
|
||||||
|
|
||||||
// Create Texture
|
// Create Texture
|
||||||
let texture = gl.create_texture().unwrap();
|
let texture = gl.create_texture().unwrap();
|
||||||
gl.bind_texture(glow::TEXTURE_3D, Some(texture));
|
gl.bind_texture(glow::TEXTURE_3D, Some(texture));
|
||||||
|
|||||||
@ -204,18 +204,19 @@ impl AttaWithBuffer for PPI {
|
|||||||
|
|
||||||
let last_range = *range.last().unwrap() as f32;
|
let last_range = *range.last().unwrap() as f32;
|
||||||
|
|
||||||
|
let data = &data.data.cast_to::<f32>();
|
||||||
|
|
||||||
for azi_idx in 0..azimuth_len {
|
for azi_idx in 0..azimuth_len {
|
||||||
for r_idx in 0..r_len {
|
for r_idx in 0..r_len {
|
||||||
let azi = *azimuth.get(azi_idx).unwrap() as f32;
|
let azi = *azimuth.get(azi_idx).unwrap() as f32;
|
||||||
let r = *range.get(r_idx).unwrap() as f32 / last_range;
|
let r = *range.get(r_idx).unwrap() as f32 / last_range;
|
||||||
let data = &data.data.cast_to::<f32>();
|
|
||||||
let dt = data.get([layer, azi_idx, r_idx]).unwrap();
|
let dt = data.get([layer, azi_idx, r_idx]).unwrap();
|
||||||
vertices.extend([r, azi, ele, *dt]);
|
vertices.extend([r, azi, ele, *dt]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let len = vertices.len() as i32 / 4;
|
let len = vertices.len() as i32 / 4;
|
||||||
|
|
||||||
attach.bind_data(&vertices, None, len, glow::STATIC_DRAW);
|
attach.bind_data(gl,&vertices, None, len, glow::STATIC_DRAW);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@ -223,6 +224,9 @@ impl AttaWithBuffer for PPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OpenGl 4.1
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
fn init(
|
fn init(
|
||||||
&self,
|
&self,
|
||||||
gl: &glow::Context,
|
gl: &glow::Context,
|
||||||
@ -245,6 +249,33 @@ impl AttaWithBuffer for PPI {
|
|||||||
(vao, vbo, None, None)
|
(vao, vbo, None, None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// OpenGl 4.6
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
fn init(
|
||||||
|
&self,
|
||||||
|
gl: &glow::Context,
|
||||||
|
) -> (
|
||||||
|
NativeVertexArray,
|
||||||
|
NativeBuffer,
|
||||||
|
Option<NativeBuffer>,
|
||||||
|
Option<glow::NativeTexture>,
|
||||||
|
) {
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let vao = gl.create_vertex_array().unwrap();
|
||||||
|
let vbo = gl.create_buffer().unwrap();
|
||||||
|
gl.vertex_array_vertex_buffer(vao, 0, Some(vbo), 0, 16);
|
||||||
|
|
||||||
|
gl.enable_vertex_array_attrib(vao, 0);
|
||||||
|
gl.vertex_array_attrib_format_i32(vao, 0, 4, glow::FLOAT, 0);
|
||||||
|
|
||||||
|
gl.vertex_array_attrib_binding_f32(vao, 0, 0);
|
||||||
|
|
||||||
|
(vao, vbo, None, None)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Clone, Debug)]
|
#[derive(Default, Clone, Debug)]
|
||||||
|
|||||||
@ -62,7 +62,7 @@ pub struct ViewPort<T: Resource = NativeRenderbuffer> {
|
|||||||
|
|
||||||
impl<T: Resource> ViewPort<T> {
|
impl<T: Resource> ViewPort<T> {
|
||||||
pub fn bind(&self, gl: &glow::Context) {
|
pub fn bind(&self, gl: &glow::Context) {
|
||||||
self.main_fbo.bind(glow::FRAMEBUFFER);
|
self.main_fbo.bind(gl,glow::FRAMEBUFFER);
|
||||||
unsafe {
|
unsafe {
|
||||||
gl.viewport(
|
gl.viewport(
|
||||||
0,
|
0,
|
||||||
@ -110,12 +110,12 @@ impl ViewPort<NativeTexture> {
|
|||||||
let main_rbo: RcGlRcResource<NativeTexture> = gl.create_resource_rc();
|
let main_rbo: RcGlRcResource<NativeTexture> = gl.create_resource_rc();
|
||||||
let main_depth_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
let main_depth_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
||||||
|
|
||||||
main_fbo.bind(glow::FRAMEBUFFER);
|
main_fbo.bind(gl,glow::FRAMEBUFFER);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
// Color Attachment
|
// Color Attachment
|
||||||
gl.active_texture(glow::TEXTURE0);
|
gl.active_texture(glow::TEXTURE0);
|
||||||
main_rbo.bind(glow::TEXTURE_2D);
|
main_rbo.bind(gl,glow::TEXTURE_2D);
|
||||||
gl.tex_image_2d(
|
gl.tex_image_2d(
|
||||||
glow::TEXTURE_2D,
|
glow::TEXTURE_2D,
|
||||||
0,
|
0,
|
||||||
@ -149,7 +149,7 @@ impl ViewPort<NativeTexture> {
|
|||||||
|
|
||||||
if depth {
|
if depth {
|
||||||
// Depth Attachment
|
// Depth Attachment
|
||||||
main_depth_rbo.bind(glow::RENDERBUFFER);
|
main_depth_rbo.bind(gl,glow::RENDERBUFFER);
|
||||||
gl.renderbuffer_storage(
|
gl.renderbuffer_storage(
|
||||||
glow::RENDERBUFFER,
|
glow::RENDERBUFFER,
|
||||||
glow::DEPTH_COMPONENT24,
|
glow::DEPTH_COMPONENT24,
|
||||||
@ -195,11 +195,11 @@ impl ViewPort<NativeRenderbuffer> {
|
|||||||
let main_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
let main_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
||||||
let main_depth_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
let main_depth_rbo: RcGlRcResource<NativeRenderbuffer> = gl.create_resource_rc();
|
||||||
|
|
||||||
main_fbo.bind(glow::FRAMEBUFFER);
|
main_fbo.bind(gl,glow::FRAMEBUFFER);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
// Color Attachment
|
// Color Attachment
|
||||||
main_rbo.bind(glow::RENDERBUFFER);
|
main_rbo.bind(gl,glow::RENDERBUFFER);
|
||||||
gl.renderbuffer_storage(glow::RENDERBUFFER, glow::RGBA8, RBO_WIDTH, RBO_HEIGHT);
|
gl.renderbuffer_storage(glow::RENDERBUFFER, glow::RGBA8, RBO_WIDTH, RBO_HEIGHT);
|
||||||
gl.framebuffer_renderbuffer(
|
gl.framebuffer_renderbuffer(
|
||||||
glow::FRAMEBUFFER,
|
glow::FRAMEBUFFER,
|
||||||
@ -211,7 +211,7 @@ impl ViewPort<NativeRenderbuffer> {
|
|||||||
|
|
||||||
if depth {
|
if depth {
|
||||||
// Depth Attachment
|
// Depth Attachment
|
||||||
main_depth_rbo.bind(glow::RENDERBUFFER);
|
main_depth_rbo.bind(gl,glow::RENDERBUFFER);
|
||||||
gl.renderbuffer_storage(
|
gl.renderbuffer_storage(
|
||||||
glow::RENDERBUFFER,
|
glow::RENDERBUFFER,
|
||||||
glow::DEPTH_COMPONENT24,
|
glow::DEPTH_COMPONENT24,
|
||||||
|
|||||||
@ -194,8 +194,10 @@ impl<'b, 'a: 'b> Module for GeoQuadMeshModule<'b, 'a> {
|
|||||||
.set_config(&self.gl, &config.to_quad_config())?;
|
.set_config(&self.gl, &config.to_quad_config())?;
|
||||||
|
|
||||||
// Quad Draw
|
// Quad Draw
|
||||||
quad_attach.bind_self(self.geo_quad_mesh_program.program_ref());
|
quad_attach.bind_self(&self.gl,self.geo_quad_mesh_program.program_ref());
|
||||||
// Bind the texture
|
// Bind the texture
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
self.bind_attach_tex(quad_attach)?;
|
self.bind_attach_tex(quad_attach)?;
|
||||||
|
|
||||||
// Draw the quad
|
// Draw the quad
|
||||||
|
|||||||
@ -9,6 +9,7 @@ use crate::{
|
|||||||
utils::resources::{ManagedResource, RcGlBuffer, RcGlVertexArray},
|
utils::resources::{ManagedResource, RcGlBuffer, RcGlVertexArray},
|
||||||
GL,
|
GL,
|
||||||
};
|
};
|
||||||
|
use cgmath::num_traits::cast;
|
||||||
use femtovg::{renderer::OpenGl, Canvas};
|
use femtovg::{renderer::OpenGl, Canvas};
|
||||||
use glow::{HasContext, NativeBuffer, NativeTexture, NativeVertexArray};
|
use glow::{HasContext, NativeBuffer, NativeTexture, NativeVertexArray};
|
||||||
use radarg_core::{config::Setting, Data};
|
use radarg_core::{config::Setting, Data};
|
||||||
@ -64,12 +65,20 @@ impl Attach {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bind_self(&self, program: &Program) {
|
fn bind_self(&self,gl: &glow::Context, program: &Program) {
|
||||||
self.vao.bind(glow::VERTEX_ARRAY);
|
#[cfg(target_os = "macos")]
|
||||||
self.vbo.bind(glow::ARRAY_BUFFER);
|
{
|
||||||
if let Some(ebo) = self.ebo.as_ref() {
|
self.vao.bind(gl,glow::VERTEX_ARRAY);
|
||||||
ebo.bind(glow::ELEMENT_ARRAY_BUFFER);
|
self.vbo.bind(gl,glow::ARRAY_BUFFER);
|
||||||
|
if let Some(ebo) = self.ebo.as_ref() {
|
||||||
|
ebo.bind(gl,glow::ELEMENT_ARRAY_BUFFER);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
unsafe {
|
||||||
|
gl.bind_vertex_array(Some(self.vao.native()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unbind_self(&self) {
|
fn unbind_self(&self) {
|
||||||
@ -80,24 +89,38 @@ impl Attach {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bind_data(&mut self, vbo: &Vec<f32>, ebo: Option<&Vec<u32>>, len: i32, usage: u32) {
|
pub fn bind_data(&mut self,gl:&glow::Context, vbo: &Vec<f32>, ebo: Option<&Vec<u32>>, len: i32, usage: u32) {
|
||||||
use bytemuck::cast_slice;
|
use bytemuck::cast_slice;
|
||||||
self.vbo.bind(glow::ARRAY_BUFFER);
|
#[cfg(target_os = "macos")]
|
||||||
unsafe {
|
{
|
||||||
self.gl
|
self.vbo.bind(gl,glow::ARRAY_BUFFER);
|
||||||
.buffer_data_u8_slice(glow::ARRAY_BUFFER, cast_slice(&vbo), usage);
|
unsafe {
|
||||||
if let Some(ebo) = ebo {
|
gl
|
||||||
self.gl.bind_buffer(
|
.buffer_data_u8_slice(glow::ARRAY_BUFFER, cast_slice(&vbo), usage);
|
||||||
glow::ELEMENT_ARRAY_BUFFER,
|
if let Some(ebo) = ebo {
|
||||||
Some(self.ebo.as_ref().unwrap().native()),
|
gl.bind_buffer(
|
||||||
);
|
glow::ELEMENT_ARRAY_BUFFER,
|
||||||
self.gl
|
Some(self.ebo.as_ref().unwrap().native()),
|
||||||
.buffer_data_u8_slice(glow::ELEMENT_ARRAY_BUFFER, cast_slice(&ebo), usage);
|
);
|
||||||
|
gl
|
||||||
|
.buffer_data_u8_slice(glow::ELEMENT_ARRAY_BUFFER, cast_slice(&ebo), usage);
|
||||||
|
|
||||||
self.gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, None);
|
gl.bind_buffer(glow::ELEMENT_ARRAY_BUFFER, None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.vbo.unbind(glow::ARRAY_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
{
|
||||||
|
unsafe {
|
||||||
|
gl.named_buffer_data_u8_slice(self.vbo.native(), cast_slice(&vbo), usage);
|
||||||
|
if let Some(ebo) = ebo {
|
||||||
|
gl.named_buffer_data_u8_slice(self.ebo.as_ref().unwrap().native(), cast_slice(ebo), usage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.vbo.unbind(glow::ARRAY_BUFFER);
|
|
||||||
self.len = len;
|
self.len = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -314,8 +314,11 @@ impl<'b, 'a: 'b> Module for PPIModule<'b, 'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PPI Draw
|
// PPI Draw
|
||||||
ppi_attach.bind_self(&self.ppi_program.program_ref());
|
ppi_attach.bind_self(&self.gl,&self.ppi_program.program_ref());
|
||||||
|
|
||||||
self.ppi_program.draw(&self.gl, ppi_attach.len())?;
|
self.ppi_program.draw(&self.gl, ppi_attach.len())?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
ppi_attach.unbind_self();
|
ppi_attach.unbind_self();
|
||||||
|
|
||||||
// Unmount PPI Program
|
// Unmount PPI Program
|
||||||
@ -343,7 +346,7 @@ impl<'b, 'a: 'b> Module for PPIModule<'b, 'a> {
|
|||||||
|
|
||||||
// PPI Tick Draw
|
// PPI Tick Draw
|
||||||
let attach = &mut cursor.line_attach;
|
let attach = &mut cursor.line_attach;
|
||||||
attach.bind_self(self.line_program.program_ref());
|
attach.bind_self(&self.gl,self.line_program.program_ref());
|
||||||
self.line_program.draw(&self.gl, attach.len())?;
|
self.line_program.draw(&self.gl, attach.len())?;
|
||||||
attach.unbind_self();
|
attach.unbind_self();
|
||||||
|
|
||||||
@ -358,7 +361,7 @@ impl<'b, 'a: 'b> Module for PPIModule<'b, 'a> {
|
|||||||
self.text_program
|
self.text_program
|
||||||
.set_config(&self.gl, &config.to_font_config());
|
.set_config(&self.gl, &config.to_font_config());
|
||||||
|
|
||||||
tick_attach.bind_self(self.text_program.program_ref());
|
tick_attach.bind_self(&self.gl,self.text_program.program_ref());
|
||||||
self.text_program.draw(&self.gl, tick_attach.len())?;
|
self.text_program.draw(&self.gl, tick_attach.len())?;
|
||||||
tick_attach.unbind_self();
|
tick_attach.unbind_self();
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ pub type RcGlRcBuffer = RcGlRcResource<NativeBuffer>;
|
|||||||
|
|
||||||
// pub type RcGlResource<'a, T> = Rc<GlResource<'a, T>>;
|
// pub type RcGlResource<'a, T> = Rc<GlResource<'a, T>>;
|
||||||
pub trait ManagedResource {
|
pub trait ManagedResource {
|
||||||
fn bind(&self, target: u32);
|
fn bind(&self, gl:&glow::Context, target: u32);
|
||||||
fn unbind(&self, target: u32);
|
fn unbind(&self, target: u32);
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
@ -305,8 +305,8 @@ impl Deref for GL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Resource> ManagedResource for RcGlResource<'_, T> {
|
impl<T: Resource> ManagedResource for RcGlResource<'_, T> {
|
||||||
fn bind(&self, target: u32) {
|
fn bind(&self,gl:&glow::Context, target: u32) {
|
||||||
self.0.resource.bind(self.0.gl, target);
|
self.0.resource.bind(gl, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unbind(&self, target: u32) {
|
fn unbind(&self, target: u32) {
|
||||||
@ -315,8 +315,8 @@ impl<T: Resource> ManagedResource for RcGlResource<'_, T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Resource> ManagedResource for RcGlRcResource<T> {
|
impl<T: Resource> ManagedResource for RcGlRcResource<T> {
|
||||||
fn bind(&self, target: u32) {
|
fn bind(&self,gl:&glow::Context, target: u32) {
|
||||||
self.0.resource.bind(&self.0.gl, target);
|
self.0.resource.bind(gl, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unbind(&self, target: u32) {
|
fn unbind(&self, target: u32) {
|
||||||
|
|||||||
@ -15,14 +15,14 @@ use components::app::AppModel;
|
|||||||
use gi::{App as GI, Helper, GL};
|
use gi::{App as GI, Helper, GL};
|
||||||
use once_cell::{sync::Lazy as SafeLazy, unsync::Lazy as UnsafeLazy};
|
use once_cell::{sync::Lazy as SafeLazy, unsync::Lazy as UnsafeLazy};
|
||||||
use relm4::RelmApp;
|
use relm4::RelmApp;
|
||||||
use surfman::declare_surfman;
|
// use surfman::declare_surfman;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
use tracing_subscriber;
|
use tracing_subscriber;
|
||||||
|
|
||||||
mod predefined;
|
mod predefined;
|
||||||
mod widgets;
|
mod widgets;
|
||||||
|
|
||||||
declare_surfman!();
|
// declare_surfman!();
|
||||||
|
|
||||||
const APP_ID: &str = "org.tsuki.radar_g";
|
const APP_ID: &str = "org.tsuki.radar_g";
|
||||||
static RUNTIME: SafeLazy<Runtime> =
|
static RUNTIME: SafeLazy<Runtime> =
|
||||||
|
|||||||
@ -127,9 +127,12 @@ impl ObjectImpl for Render {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl WidgetImpl for Render {
|
impl WidgetImpl for Render {
|
||||||
|
|
||||||
fn realize(&self) {
|
fn realize(&self) {
|
||||||
self.parent_realize();
|
self.parent_realize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn unrealize(&self) {
|
fn unrealize(&self) {
|
||||||
self.obj().make_current();
|
self.obj().make_current();
|
||||||
self.gi.borrow_mut().as_mut().unwrap().destroy();
|
self.gi.borrow_mut().as_mut().unwrap().destroy();
|
||||||
@ -139,6 +142,14 @@ impl WidgetImpl for Render {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl GLAreaImpl for Render {
|
impl GLAreaImpl for Render {
|
||||||
|
|
||||||
|
fn create_context(&self) -> Option<gtk::gdk::GLContext> {
|
||||||
|
let context = self.parent_create_context();
|
||||||
|
context.as_ref().map(|ctx| {
|
||||||
|
});
|
||||||
|
context
|
||||||
|
}
|
||||||
|
|
||||||
fn resize(&self, width: i32, height: i32) {
|
fn resize(&self, width: i32, height: i32) {
|
||||||
{
|
{
|
||||||
let mut status = self.status.borrow_mut();
|
let mut status = self.status.borrow_mut();
|
||||||
@ -173,21 +184,9 @@ impl GLAreaImpl for Render {
|
|||||||
|
|
||||||
if let Some(gi) = gi.as_mut() {
|
if let Some(gi) = gi.as_mut() {
|
||||||
let gl = &gi.context.gl;
|
let gl = &gi.context.gl;
|
||||||
unsafe {
|
|
||||||
let err = gl.get_error();
|
|
||||||
if err != glow::NO_ERROR {
|
|
||||||
panic!("GL Error: {:?}", err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let mut operation = self.opeartion.borrow_mut();
|
let mut operation = self.opeartion.borrow_mut();
|
||||||
let viewport = self.viewport.borrow();
|
let viewport = self.viewport.borrow();
|
||||||
operation.deal_io(&viewport.as_ref().unwrap(), &self.io.borrow());
|
operation.deal_io(&viewport.as_ref().unwrap(), &self.io.borrow());
|
||||||
unsafe {
|
|
||||||
let err = gl.get_error();
|
|
||||||
if err != glow::NO_ERROR {
|
|
||||||
panic!("GL Error: {:?}", err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gi.render(
|
gi.render(
|
||||||
&mut *self.modules.borrow_mut(),
|
&mut *self.modules.borrow_mut(),
|
||||||
@ -213,6 +212,8 @@ impl Render {
|
|||||||
info!("Creating canvas");
|
info!("Creating canvas");
|
||||||
widget.make_current();
|
widget.make_current();
|
||||||
widget.attach_buffers();
|
widget.attach_buffers();
|
||||||
|
|
||||||
|
info!("Debug enabled: {}", self.obj().context().unwrap().is_debug_enabled());
|
||||||
let (mut gi, viewport) = unsafe {
|
let (mut gi, viewport) = unsafe {
|
||||||
static LOAD_FN: fn(&str) -> *const std::ffi::c_void =
|
static LOAD_FN: fn(&str) -> *const std::ffi::c_void =
|
||||||
|s| epoxy::get_proc_addr(s) as *const _;
|
|s| epoxy::get_proc_addr(s) as *const _;
|
||||||
@ -316,16 +317,16 @@ fn gl_debug_output(
|
|||||||
fn enable_opengl_debugging(ctx: &mut glow::Context) {
|
fn enable_opengl_debugging(ctx: &mut glow::Context) {
|
||||||
unsafe {
|
unsafe {
|
||||||
if ctx.supported_extensions().contains("GL_ARB_debug_output") {
|
if ctx.supported_extensions().contains("GL_ARB_debug_output") {
|
||||||
unsafe {
|
|
||||||
ctx.debug_message_callback(|source, _type, id, severity, message| {
|
ctx.enable(glow::DEBUG_OUTPUT);
|
||||||
println!(
|
ctx.enable(glow::DEBUG_OUTPUT_SYNCHRONOUS);
|
||||||
"GL ARB Debug Message: Source: {:?}, ID: {}, Severity: {:?}, Message: {}",
|
ctx.debug_message_callback(|source, _type, id, severity, message| {
|
||||||
source, id, severity, message
|
println!(
|
||||||
);
|
"GL ARB Debug Message: Source: {:?}, ID: {}, Severity: {:?}, Message: {}",
|
||||||
});
|
source, id, severity, message
|
||||||
ctx.enable(glow::DEBUG_OUTPUT);
|
);
|
||||||
ctx.enable(glow::DEBUG_OUTPUT_SYNCHRONOUS);
|
});
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
info!("GL_ARB_debug_output not supported");
|
info!("GL_ARB_debug_output not supported");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user