Skip to content

Commit f11587d

Browse files
committed
GraphicsServer::begin_scope
1 parent cbce959 commit f11587d

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

fyrox-graphics-gl/src/server.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,7 +1428,7 @@ impl GraphicsServer for GlGraphicsServer {
14281428
)?)))
14291429
}
14301430

1431-
fn weak(self: Rc<Self>) -> Weak<dyn GraphicsServer> {
1431+
fn weak(&self) -> Weak<dyn GraphicsServer> {
14321432
self.this.borrow().as_ref().unwrap().clone()
14331433
}
14341434

@@ -1532,7 +1532,7 @@ impl GraphicsServer for GlGraphicsServer {
15321532
}
15331533

15341534
fn push_debug_group(&self, name: &str) {
1535-
if self.gl.supports_debug() {
1535+
if self.gl.supports_debug() && self.named_objects.get() {
15361536
unsafe {
15371537
self.gl
15381538
.push_debug_group(glow::DEBUG_SOURCE_APPLICATION, 0, name)
@@ -1541,7 +1541,7 @@ impl GraphicsServer for GlGraphicsServer {
15411541
}
15421542

15431543
fn pop_debug_group(&self) {
1544-
if self.gl.supports_debug() {
1544+
if self.gl.supports_debug() && self.named_objects.get() {
15451545
unsafe { self.gl.pop_debug_group() }
15461546
}
15471547
}

fyrox-graphics/src/server.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,18 @@ pub type SharedGraphicsServer = Rc<dyn GraphicsServer>;
8181

8282
define_as_any_trait!(GraphicsServerAsAny => GraphicsServer);
8383

84+
pub struct RenderingScope {
85+
server: Weak<dyn GraphicsServer>,
86+
}
87+
88+
impl Drop for RenderingScope {
89+
fn drop(&mut self) {
90+
if let Some(server) = self.server.upgrade() {
91+
server.pop_debug_group();
92+
}
93+
}
94+
}
95+
8496
/// Graphics server is an abstraction layer over various graphics APIs used on different platforms
8597
/// supported by the engine. Such abstraction layer tries to provide more or less high-level and
8698
/// unified interface, that can be used to build graphics pipelines quickly and more or less efficiently.
@@ -168,7 +180,7 @@ pub trait GraphicsServer: GraphicsServerAsAny {
168180
) -> Result<GpuGeometryBuffer, FrameworkError>;
169181

170182
/// Creates a weak reference to the shared graphics server.
171-
fn weak(self: Rc<Self>) -> Weak<dyn GraphicsServer>;
183+
fn weak(&self) -> Weak<dyn GraphicsServer>;
172184

173185
/// Sends all scheduled GPU command buffers for execution on GPU without waiting for a certain
174186
/// threshold.
@@ -216,6 +228,14 @@ pub trait GraphicsServer: GraphicsServerAsAny {
216228
/// Ends the current debug group.
217229
fn pop_debug_group(&self);
218230

231+
fn begin_scope(&self, name: &str) -> RenderingScope {
232+
self.push_debug_group(name);
233+
234+
RenderingScope {
235+
server: self.weak(),
236+
}
237+
}
238+
219239
/// A shortcut for [`Self::create_texture`], that creates a rectangular texture with the given
220240
/// size and pixel kind.
221241
fn create_2d_render_target(

0 commit comments

Comments
 (0)