From a17a43505c4db54dc008629e76e4913f8c66d7db Mon Sep 17 00:00:00 2001 From: Edgaru089 Date: Thu, 10 Feb 2022 19:59:58 +0800 Subject: [PATCH] render (display) geometry buffers on F3 via ImGUI --- internal/render/render_world.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/internal/render/render_world.go b/internal/render/render_world.go index f5dc3af..331e489 100644 --- a/internal/render/render_world.go +++ b/internal/render/render_world.go @@ -7,6 +7,7 @@ import ( "unsafe" "edgaru089.ml/go/gl01/internal/asset" + "edgaru089.ml/go/gl01/internal/igwrap" "edgaru089.ml/go/gl01/internal/io" "edgaru089.ml/go/gl01/internal/util" "edgaru089.ml/go/gl01/internal/util/itype" @@ -269,6 +270,10 @@ func (r *WorldRenderer) Init(w *world.World) (err error) { // attach textures r.output.shader.SetUniformTextureHandle("tex", r.output.tex) + // set the texture flags for ImGUI + igwrap.SetTextureFlag(r.gbuffer.color, igwrap.TextureFlag_Linear) + igwrap.SetTextureFlag(r.ssao.ambient, igwrap.TextureFlag_Red) + gl.BindFramebuffer(gl.FRAMEBUFFER, 0) r.lastDisplaySize = io.DisplaySize r.startTime = time.Now() @@ -421,8 +426,22 @@ func (r *WorldRenderer) Render(world *world.World, view *View) { DrawScreenQuad() // Show G-buffers? - /*if io.ShowDebugInfo { - DrawTexture(r.gbuffer.pos, itype.Rectf{0.5, 0.5, 0.5, 0.5}, DrawTextureChannels_R|DrawTextureChannels_G|DrawTextureChannels_B, 0, 32) - DrawTexture(r.gbuffer.depth, itype.Rectf{0.5, 0, 0.5, 0.5}, DrawTextureChannels_R, 0, 1) - }*/ + if io.ShowDebugInfo { + imgui.SetNextWindowPosV(imgui.Vec2{X: float32(r.lastDisplaySize[0]), Y: 0}, imgui.ConditionAlways, imgui.Vec2{X: 1, Y: 0}) + if igwrap.Begin("Renderer Textures/Outputs", nil, imgui.WindowFlagsAlwaysAutoResize|imgui.WindowFlagsNoBackground|imgui.WindowFlagsNoNavFocus|imgui.WindowFlagsNoDecoration|imgui.WindowFlagsNoInputs|imgui.WindowFlagsNoSavedSettings|imgui.WindowFlagsNoFocusOnAppearing) { + imgui.PushStyleVarVec2(imgui.StyleVarItemSpacing, imgui.Vec2{}) + + imageSize := r.lastDisplaySize.ToFloat32().Multiply(0.25) + imageSize[1] -= imgui.CurrentStyle().WindowPadding().Y / 2 + imageSize[0] = imageSize[1] / float32(r.lastDisplaySize[1]) * float32(r.lastDisplaySize[0]) + + igwrap.Image(r.gbuffer.pos, imageSize, itype.Rectf{0, 0, 1, 1}) + igwrap.Image(r.gbuffer.norm, imageSize, itype.Rectf{0, 0, 1, 1}) + igwrap.Image(r.gbuffer.color, imageSize, itype.Rectf{0, 0, 1, 1}) + igwrap.Image(r.ssao.ambient, imageSize, itype.Rectf{0, 0, 1, 1}) + + imgui.PopStyleVar() + imgui.End() + } + } }