def register(version: str, ctx: qrd.CaptureContext): global extiface_version extiface_version = version print("Registering my extension for RenderDoc version {}".format(version)) ctx.Extensions().RegisterWindowMenu(qrd.WindowMenu.Tools, ["My extension"], menu_callback) ctx.Extensions().RegisterWindowMenu(qrd.WindowMenu.Window, ["Extension Window"], window_callback)
def window_callback(ctx: qrd.CaptureContext, data): global cur_window if cur_window is None: cur_window = Window(ctx, extiface_version) if ctx.HasEventBrowser(): ctx.AddDockWindow(cur_window.topWindow, qrd.DockReference.TopOf, ctx.GetEventBrowser().Widget(), 0.1) else: ctx.AddDockWindow(cur_window.topWindow, qrd.DockReference.MainToolArea, None) ctx.RaiseDockWindow(cur_window.topWindow)
def __init__(self, ctx: qrd.CaptureContext, version: str): super().__init__() self.mqt: qrd.MiniQtHelper = ctx.Extensions().GetMiniQtHelper() self.ctx = ctx self.version = version self.topWindow = self.mqt.CreateToplevelWidget( "Breadcrumbs", lambda c, w, d: window_closed()) vert = self.mqt.CreateVerticalContainer() self.mqt.AddWidget(self.topWindow, vert) self.breadcrumbs = self.mqt.CreateLabel() self.mqt.AddWidget(vert, self.breadcrumbs) ctx.AddCaptureViewer(self)
def menu_callback(ctx: qrd.CaptureContext, data): texid = rd.ResourceId.Null() depth = ctx.CurPipelineState().GetDepthTarget() # Prefer depth if possible if depth.resourceId != rd.ResourceId.Null(): texid = depth.resourceId else: cols = ctx.CurPipelineState().GetOutputTargets() # See if we can get the first colour target instead if len(cols) > 1 and cols[0].resourceId != rd.ResourceId.Null(): texid = cols[0].resourceId if texid == rd.ResourceId.Null(): ctx.Extensions().MessageDialog("Couldn't find any bound target!", "Extension message") return else: mqt = ctx.Extensions().GetMiniQtHelper() texname = ctx.GetResourceName(texid) def get_minmax(r: rd.ReplayController): minvals, maxvals = r.GetMinMax(texid, rd.Subresource(), rd.CompType.Typeless) msg = '{} has min {:.4} and max {:.4} in red'.format( texname, minvals.floatValue[0], maxvals.floatValue[0]) mqt.InvokeOntoUIThread(lambda: ctx.Extensions().MessageDialog( msg, "Extension message")) ctx.Replay().AsyncInvoke('', get_minmax)