This commit is contained in:
Tsuki 2024-09-03 17:40:54 +08:00
parent 5c338b18fa
commit 129732cd7e
2 changed files with 19 additions and 33 deletions

View File

@ -152,7 +152,7 @@ impl Component for MonitorModel {
}); });
} }
MonitorInputMsg::QueueDraw => { MonitorInputMsg::QueueDraw => {
widgets.renderer.queue_draw(); widgets.renderer.queue_render();
} }
// MonitorInputMsg::KeyPress(key) => { // MonitorInputMsg::KeyPress(key) => {

View File

@ -129,6 +129,7 @@ impl ObjectImpl for Render {
impl WidgetImpl for Render { impl WidgetImpl for Render {
fn realize(&self) { fn realize(&self) {
self.parent_realize(); self.parent_realize();
self.ensure_canvas();
} }
fn unrealize(&self) { fn unrealize(&self) {
self.obj().make_current(); self.obj().make_current();
@ -157,7 +158,6 @@ impl GLAreaImpl for Render {
} }
fn render(&self, context: &gtk::gdk::GLContext) -> glib::Propagation { fn render(&self, context: &gtk::gdk::GLContext) -> glib::Propagation {
self.ensure_canvas();
let viewport = self.viewport.borrow(); let viewport = self.viewport.borrow();
let viewport = viewport.as_ref().unwrap(); let viewport = viewport.as_ref().unwrap();
@ -169,8 +169,6 @@ impl GLAreaImpl for Render {
gl.clear_color(0.0, 0.0, 0.0, 1.0); gl.clear_color(0.0, 0.0, 0.0, 1.0);
gl.clear(glow::COLOR_BUFFER_BIT | glow::DEPTH_BUFFER_BIT); gl.clear(glow::COLOR_BUFFER_BIT | glow::DEPTH_BUFFER_BIT);
gl.enable(glow::DEPTH_TEST); gl.enable(glow::DEPTH_TEST);
// gl.enable(glow::BLEND);
// gl.blend_func(glow::SRC_ALPHA, glow::ONE_MINUS_SRC_ALPHA);
} }
if let Some(gi) = gi.as_mut() { if let Some(gi) = gi.as_mut() {
@ -197,6 +195,7 @@ impl Render {
fn ensure_canvas(&self) { fn ensure_canvas(&self) {
use gi::{App as GI, Helper, GL}; use gi::{App as GI, Helper, GL};
let widget = self.obj(); let widget = self.obj();
widget.make_current();
widget.attach_buffers(); widget.attach_buffers();
if self.gi.borrow().is_none() { if self.gi.borrow().is_none() {
info!("Creating canvas"); info!("Creating canvas");
@ -208,26 +207,7 @@ impl Render {
let version = unsafe { ctx.get_parameter_string(glow::VERSION) }; let version = unsafe { ctx.get_parameter_string(glow::VERSION) };
info!("OpenGL Version: {}", version); info!("OpenGL Version: {}", version);
enable_opengl_debugging(&mut ctx);
if ctx.supported_extensions().contains("GL_ARB_debug_output") {
unsafe {
ctx.debug_message_callback(|source, _type, 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 {
info!("GL_ARB_debug_output not supported");
}
// enable_opengl_debugging(&mut ctx);
let id = let id =
NonZeroU32::new(ctx.get_parameter_i32(glow::DRAW_FRAMEBUFFER_BINDING) as u32) NonZeroU32::new(ctx.get_parameter_i32(glow::DRAW_FRAMEBUFFER_BINDING) as u32)
@ -319,15 +299,21 @@ fn gl_debug_output(
} }
} }
fn enable_opengl_debugging(gl: &mut glow::Context) { fn enable_opengl_debugging(ctx: &mut glow::Context) {
unsafe { unsafe {
gl.enable(glow::DEBUG_OUTPUT); if ctx.supported_extensions().contains("GL_ARB_debug_output") {
gl.enable(glow::DEBUG_OUTPUT_SYNCHRONOUS); // 确保错误信息立即显示 unsafe {
gl.debug_message_callback(|source, _type, id, severity, message| { ctx.debug_message_callback(|source, _type, id, severity, message| {
println!( println!(
"GL Debug Message: Source: {:?}, ID: {}, Severity: {:?}, Message: {}", "GL ARB Debug Message: Source: {:?}, ID: {}, Severity: {:?}, Message: {}",
source, id, severity, message source, id, severity, message
); );
}); });
ctx.enable(glow::DEBUG_OUTPUT);
ctx.enable(glow::DEBUG_OUTPUT_SYNCHRONOUS);
}
} else {
info!("GL_ARB_debug_output not supported");
}
} }
} }