Skip to content

Commit

Permalink
Fix render to screen when ImGui windows disabled
Browse files Browse the repository at this point in the history
  • Loading branch information
ultraq committed May 6, 2024
1 parent b9ff30c commit af65c60
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,26 +170,16 @@ class Application implements EventTarget {
engine.waitUntilStopped()

// Check we closed everything
var activeFramebuffers = debugOverlay.activeFramebuffers.get()
if (activeFramebuffers > 0) {
logger.debug('Not all active framebuffers closed')
}
var activeMeshes = debugOverlay.activeMeshes.get()
if (activeMeshes > 0) {
logger.debug('Not all meshes closed, {} remaining', activeMeshes)
}
var activeTextures = debugOverlay.activeTextures.get()
if (activeMeshes > 0) {
logger.debug('Not all textures closed, {} remaining', activeTextures)
}
var activeSources = debugOverlay.activeSources.get()
if (activeMeshes > 0) {
logger.debug('Not all sources closed, {} remaining', activeSources)
}
var activeBuffers = debugOverlay.activeBuffers.get()
if (activeMeshes > 0) {
logger.debug('Not all buffers closed, {} remaining', activeBuffers)
var check = { int resourceCount, String resourceName ->
if (resourceCount > 0) {
logger.warn("Not all ${resourceName} closed, {} remaining", resourceCount)
}
}
check(debugOverlay.activeFramebuffers.get(), 'framebuffers')
check(debugOverlay.activeMeshes.get(), 'meshes')
check(debugOverlay.activeTextures.get(), 'textures')
check(debugOverlay.activeSources.get(), 'sources')
check(debugOverlay.activeBuffers.get(), 'buffers')
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,14 @@ class ImGuiLayer implements AutoCloseable, InputSource {
imGuiGl3.renderDrawData(ImGui.getDrawData())
}

/**
* Return whether or not ImGui is the render target.
*/
boolean isEnabled() {

return drawUiElements
}

/**
* Build the docking window into which the app will be rendered.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class RenderPipeline implements Closeable {

private final Mesh fullScreenQuad
private final List<RenderPass> renderPasses = []
private ScreenRenderPass screenRenderPass

/**
* Constructor, configure the rendering pipeline.
Expand Down Expand Up @@ -120,11 +121,11 @@ class RenderPipeline implements Closeable {
}

// Final pass to emit the result to the screen
renderPasses << new ScreenRenderPass(
screenRenderPass = new ScreenRenderPass(
renderer.createShader(new ScreenShader()),
!config.startWithChrome,
window
)
renderPasses << screenRenderPass
}

/**
Expand All @@ -136,6 +137,8 @@ class RenderPipeline implements Closeable {
imGuiLayer.frame { ->
renderer.clear()

screenRenderPass.enabled = !imGuiLayer.enabled

// Perform all rendering passes
var sceneResult = renderPasses.inject(null) { lastResult, renderPass ->
if (renderPass.enabled) {
Expand Down Expand Up @@ -247,15 +250,10 @@ class RenderPipeline implements Closeable {
/**
* Constructor, create a basic material that covers the screen yet responds
* to changes in output/window resolution.
*
* @param shader
* @param enabled
* @param window
*/
ScreenRenderPass(Shader shader, boolean enabled, Window window) {
ScreenRenderPass(Shader shader, Window window) {

this.shader = shader
this.enabled = enabled

transform.set(calculateScreenModelMatrix(window.framebufferSize, window.targetResolution))
window.on(FramebufferSizeEvent) { event ->
Expand Down

0 comments on commit af65c60

Please sign in to comment.