From 25de6726f62018e2c04236cea5f6a553ecd04599 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 14 Nov 2017 18:37:53 +0000 Subject: [PATCH] Add some cross-linking for panels that view a single resource * We add a button with a link icon to indicate that it goes to the resource details. We'll re-use the crosshair as a visual metaphor for any interactive widget that goes to the resource inspector. * To remove any possible confusion, we change the icon for the texture list and locked tabs in the texture viewer to not include the link. --- qrenderdoc/Code/Resources.h | 3 +++ qrenderdoc/Resources/link.png | Bin 0 -> 649 bytes qrenderdoc/Resources/link@2x.png | Bin 0 -> 1282 bytes qrenderdoc/Resources/page_go.png | Bin 0 -> 674 bytes qrenderdoc/Resources/page_go@2x.png | Bin 0 -> 1119 bytes qrenderdoc/Resources/page_white_stack.png | Bin 0 -> 541 bytes qrenderdoc/Resources/page_white_stack@2x.png | Bin 0 -> 960 bytes qrenderdoc/Resources/resources.qrc | 6 ++++++ qrenderdoc/Windows/BufferViewer.cpp | 11 +++++++++++ qrenderdoc/Windows/BufferViewer.h | 1 + qrenderdoc/Windows/BufferViewer.ui | 14 ++++++++++++++ qrenderdoc/Windows/ConstantBufferPreviewer.cpp | 10 ++++++++++ qrenderdoc/Windows/ConstantBufferPreviewer.h | 1 + qrenderdoc/Windows/ConstantBufferPreviewer.ui | 14 ++++++++++++++ .../PipelineState/D3D11PipelineStateViewer.cpp | 10 +++++----- .../PipelineState/GLPipelineStateViewer.cpp | 2 +- qrenderdoc/Windows/TextureViewer.cpp | 17 ++++++++++++++++- qrenderdoc/Windows/TextureViewer.h | 1 + qrenderdoc/Windows/TextureViewer.ui | 16 +++++++++++++++- qrenderdoc/qrenderdoc_local.vcxproj | 3 +++ qrenderdoc/qrenderdoc_local.vcxproj.filters | 9 +++++++++ 21 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 qrenderdoc/Resources/link.png create mode 100644 qrenderdoc/Resources/link@2x.png create mode 100644 qrenderdoc/Resources/page_go.png create mode 100644 qrenderdoc/Resources/page_go@2x.png create mode 100644 qrenderdoc/Resources/page_white_stack.png create mode 100644 qrenderdoc/Resources/page_white_stack@2x.png diff --git a/qrenderdoc/Code/Resources.h b/qrenderdoc/Code/Resources.h index 8b193a286..55f53d754 100644 --- a/qrenderdoc/Code/Resources.h +++ b/qrenderdoc/Code/Resources.h @@ -61,11 +61,14 @@ RESOURCE_DEF(hourglass, "hourglass.png") \ RESOURCE_DEF(house, "house.png") \ RESOURCE_DEF(information, "information.png") \ + RESOURCE_DEF(link, "link.png") \ + RESOURCE_DEF(page_go, "page_go.png") \ RESOURCE_DEF(page_white_code, "page_white_code.png") \ RESOURCE_DEF(page_white_database, "page_white_database.png") \ RESOURCE_DEF(page_white_delete, "page_white_delete.png") \ RESOURCE_DEF(page_white_edit, "page_white_edit.png") \ RESOURCE_DEF(page_white_link, "page_white_link.png") \ + RESOURCE_DEF(page_white_stack, "page_white_stack.png") \ RESOURCE_DEF(plugin_add, "plugin_add.png") \ RESOURCE_DEF(save, "save.png") \ RESOURCE_DEF(tick, "tick.png") \ diff --git a/qrenderdoc/Resources/link.png b/qrenderdoc/Resources/link.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f00cb2231006331f76e8fb34fe98ba3e6c4c5a GIT binary patch literal 649 zcmV;40(Sk0P)R-wVQ6jZWcdI0SI7HLUn+ckeHpfG*^&WNl8M*$>e_m+%~e1e$TbFH z(ca$P8S6G|`k$7O^&jK{CVU1k0`c?bFBpFR`o)l$lXnKleSPl2rS#vw|1$jj^9QU3 zuK|C7fi{2PLWYLgYKAv2UoylcB>fKv2xQp4Z3_cGzu;Pe0a#X1_5bVFum6KX!v1gG zy8ZvEHS7P!CnWywn=ol7P+AV;1xBO*o3?uOnoLGUMh1|?@87=}8tSSU5)xAxUcPwB zpslOV@ZSJml#C3+_wPS|_&dRXX88q- z<2Uc#FtD(3lrLGb_|3`F=ejkuv>3K*-o&7#twS)X7?&1GCf1H)a#g?Xt!HIMLl0ThjLv**n3J9+X%Fi7wZFolVUi|^~|Xai}!M<@(n=>QZp jqDXS@32BBI01#jRVaY0la%Xjb00000NkvXXu0mjfT~I+< literal 0 HcmV?d00001 diff --git a/qrenderdoc/Resources/link@2x.png b/qrenderdoc/Resources/link@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c35b59a32a35922e235ce13cfaea86fb337aa3 GIT binary patch literal 1282 zcmV+d1^xPoP)20c}Tt0!?8C z=xDn*fBM6aEEdGD1Q?8M&Y9_)i5akqKa4SPh|I~&Y>66U;$^0z!)-+4-0+8)a_I%U zEl{ADC53V5Mi*U6ZE3c)r#Ij4^t1vi!Z=-alJ}&^cTS)8d%x#>pXcx*kqA7@D}~&6 zJYKT@m)F|XS&}XiT?~c8d7)qsBB3zQ0s3OgyG?s>Js5wGR3OO-@Y_329w;g(R99>( z2cOpuF1H)(4hKw6O~ahc25s*je-xjiA4CHD*7gq$$cl>8H8s^>7#;>{#tH%24?=+u zBvL8ZY&U?Sti2z9cxpGPL`pJuz8GAqGl1D_2Ghj&r{+JenN(%vZ}@266FE6KnAB`7 zJ}(Q+YtOLuHVAAbFlu>?>CD>Xxb$L#{SQhBQJ&=DPBID+pZ;MLWYpw%0&4X0q{ z`gF%1zyGGk^}ESPAT<;U!MyVyu>XA< z_x1fmj>aCF1Dr`1!U?C>YN4>G0Cv{Z!slO}2A|IdTedvevmCrX3Vw^-eIywi0GG?@ zk|^X^yXtm;`b-yGy*dJ~A3X|$aQ%bYMBsNY!pRuLsc#>9XLj>ujF8&{$uO ztrlk3&RI$mtJ;5(+H>LDIb6T_)#)#`&CT6x%Fo{j8Ch9iw>wA$=96Md?@={$GOU^C zW_vie|CLv_%jJp=GG6-!w5V#-5>?}x0HbPNpP$$zKnwNJBJh}`eionYQh%=AnbHH2hq1bORO`x*Qe6b9y2~yrUDVF8gVkKsoJ_d9XpCe_*>rGa>6K)xosNU38rrDURE=u_q!PIp#RnS>pWGl6ZY7)`u~t>%ngG*^7}*$k7@6$xtXb8P skwAxy1s-T#K4MDIJL{~yL1yQtCkRr6YbWto=EQl`rv>}y7N}(IUO*R%q z)9OMkm6 z{U=iO04$Jg3ywyUQV4x-5KO;UC6sF}+Tt7W@Z5o}#6afBKMH~en+`DAtW+pS*H?Do zU<|E&&uC3RL#N@mMluw@;*8{b04iK2vG}u$;WN8+2H~O!p#Txib^RWIb_2z-i{(lM zmT4n3Y@jm%Y!*jRsP~}01e;V?TzL^elf4ETqEWO)ZAwx|ROv&#=!j3_*dWG2O7OUu z!HLnrz07e;=QFg1PVER^hxR?x1U{a|Ab7S9sTF`mqA+}b1`GP|K11$ z$bTD0$KLZ`=4cnY19JsnZsCV!;!MDfv_N%n*?EsQ3zL5hlrLbIK>qtEPVVc$+`Eya z2wZ3W*mB(osnrzSw-9Un64Y=x-d?f^FY_a)mXH&wbqIQ|uF^%d_6xgW?YMIPmF|pE zqulN}>+LIi0cK_~_4*brt?FM;(KY}%_8Ia<4)VxVWC>@R?tpGqBme*a07*qo IM6N<$g0|H&q5uE@ literal 0 HcmV?d00001 diff --git a/qrenderdoc/Resources/page_go@2x.png b/qrenderdoc/Resources/page_go@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3470ab8e3c2e866a83967b16eee12cb05985e41e GIT binary patch literal 1119 zcmV-l1fctgP)DJS8OjiX z=)zBeM1lns6^W1_C5$TR0%c=GSO_U0ej@P`3$d{Bvk;+C^*2RYqKQZ>h_FBjEmf(Y zep(sRdDpq`XUxx=nKwG(OitdL`_8-PyWctY-1C@}5{xlz#GdO7y)jl1jY$AX^Ao`t zbQqUE?_08h{`Pr(Q2`(sSh6cD`zuYYA7x-$eZ9it)xTz6i>;LdSDt+UqbsrE3A{nq zr4vVhZMq0~tP*wWW``&i;pJKXjY$KIn}h|Jidg%#X25!enrK^;iy|ZeWbtk>YH33(f|me zK3{bt=+{VfJhVa7uPGZ9*pVGX9DtMef>x$7Iv=$Yg2KTux}*rDC4LG=4;E55F4xQ) zHDq_VBNGTMZGcv!5|DY>L1waA_ci5X!8Tt){6+Q9FwDgKWyoRlFF@Lz6M$NgR{%;3 zGHmbe#i^>Prn*VYF!|LzF(6oe065ux_z^+p_lUXrI01G{%SwY;%bE)V+@zJ|RR>v` z6Deh0h3LW4zvt zhu-S|w~7eMPBG^i9m#Zb3(GXooN=q}DtuM5w!#pH5!{Ot&AU*Q+N7ib&=r6j8O+Fo zPQAeXh6;oqh0|=6W7Q_8af1gie@ZnZI~QX6QP;FH8HARwEK{0ZbtPnPrWk8PZxFX0 zhjD51aeR$lx2H6%gb^!T=fNBML`@Z1b z%f_@Y#CJBk3QoE3wCgk$PFoMIoeYTsXt-I6km{bfTYR0g%B+8EdSdUbR>MUZB?41d zTBf92dGYBiW=xu_{x2pAziSRi^^@6)hhbTn7QM0qqA0VqG#u9GJuQLG^pq$5YoMkFa4SVJYZ%1(;z22#LR38$HTA@(8<;^?b_8qje9K)Bk$`UnH$>9<4>MD z9e8Xuq1Wq;HlzeWgY!er^9~tf7r2}oi(~;ou%MLVC+D+S|NZ{q0h+BAcv}0Gz?dw? zEZM>2f)L^WErNtVfx>DbS*P2DdZPjPOlGQVER?>h)y`36o?9_3fu8`PHTNRCO`!tloVEtl*+e9k+8P9YDutvX`3a*m|#*3S))TW`1Jc9uoa8> zgW%yea#Dc-^GA(9HDSjGUjz7j`Sj<@OG|zc3BjfiC&PF7TqrkzY{uqw3|BNhG zD))PdLdBu(gfBVd4Q1Cew#E@ZHQOfW;T&No24v|MX}{rx}C z)6)ZE7>RTyQ#Qd(2$clmK{m9=1lZs;q(zE$OIv$eITGU|BfXeGcgTbRA@kRqXk*rF zR4dH&>hBH=z(Oho>a7x2fHdF=#cJ69ysCtu)ng+1?=(qs)1_!0gQu08K zJ7yws{edI{KJ8qKjLAkV12pB+zo$~#){y-t5}oC~o#0CtQf#8OT=mHCio8*)uqs=V z)k{RQ#mJZ%+_hxGy2x*fY6koPDb4y00yAjDM$|8&a-P@CsC{n3Mq~rnO<{F?y-kwo zM}WGflh1~Ys0Pj+Pfd;CwZq^hhNsyV8#baEIHq$2wPQT%uw^5v0Xmrus(!6lvJs}# z-G=72%^x0aAREJt*ob1Go`KWX^Yd@;dc$Z}!A7XznZ1D%6n$~#4BM4#K*(gIUF#X3 zZ~G%(R&0d&N96b6H1l#r-Ut~1I@0s`{04E>jQ#7V{wjGROrhxhrX_Bs1NxL|rL#Q3 i_NTDXIeqe9fB^v93Tg>PPGiLY0000house@2x.png information.png information@2x.png + link.png + link@2x.png + page_go.png + page_go@2x.png page_white_code.png page_white_code@2x.png page_white_database.png @@ -91,6 +95,8 @@ page_white_edit@2x.png page_white_link.png page_white_link@2x.png + page_white_stack.png + page_white_stack@2x.png plugin_add.png plugin_add@2x.png save.png diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index 488a75b3c..c95bc0ebc 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -1173,6 +1173,7 @@ void BufferViewer::SetupMeshView() ui->byteRangeLengthLabel->setVisible(false); ui->byteRangeLength->setVisible(false); + ui->resourceDetails->setVisible(false); ui->formatSpecifier->setVisible(false); ui->cameraControlsGroup->setVisible(false); @@ -2633,6 +2634,16 @@ void BufferViewer::updateWindowTitle() setWindowTitle(m_Ctx.GetResourceName(m_BufferID) + lit(" - Contents")); } +void BufferViewer::on_resourceDetails_clicked() +{ + if(!m_Ctx.HasResourceInspector()) + m_Ctx.ShowResourceInspector(); + + m_Ctx.GetResourceInspector()->Inspect(m_BufferID); + + ToolWindowManager::raiseToolWindow(m_Ctx.GetResourceInspector()->Widget()); +} + void BufferViewer::render_mouseWheel(QWheelEvent *e) { if(m_CurrentCamera) diff --git a/qrenderdoc/Windows/BufferViewer.h b/qrenderdoc/Windows/BufferViewer.h index b01aa3d98..2751a8550 100644 --- a/qrenderdoc/Windows/BufferViewer.h +++ b/qrenderdoc/Windows/BufferViewer.h @@ -94,6 +94,7 @@ private slots: void on_autofitCamera_clicked(); void on_toggleControls_toggled(bool checked); void on_syncViews_toggled(bool checked); + void on_resourceDetails_clicked(); void on_highlightVerts_toggled(bool checked); void on_wireframeRender_toggled(bool checked); void on_solidShading_currentIndexChanged(int index); diff --git a/qrenderdoc/Windows/BufferViewer.ui b/qrenderdoc/Windows/BufferViewer.ui index 7bb5d1938..ff6535146 100644 --- a/qrenderdoc/Windows/BufferViewer.ui +++ b/qrenderdoc/Windows/BufferViewer.ui @@ -738,6 +738,20 @@ + + + + Open the currently buffer's resource details in the resource inspector + + + + :/link.png:/link.png + + + true + + + diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp index cee4048d1..1b1fa2c59 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp @@ -158,6 +158,16 @@ void ConstantBufferPreviewer::on_setFormat_toggled(bool checked) ui->splitter->handle(1)->setEnabled(true); } +void ConstantBufferPreviewer::on_resourceDetails_clicked() +{ + if(!m_Ctx.HasResourceInspector()) + m_Ctx.ShowResourceInspector(); + + m_Ctx.GetResourceInspector()->Inspect(m_cbuffer); + + ToolWindowManager::raiseToolWindow(m_Ctx.GetResourceInspector()->Widget()); +} + void ConstantBufferPreviewer::on_saveCSV_clicked() { QString filename = RDDialog::getSaveFileName(this, tr("Export buffer data as CSV"), QString(), diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.h b/qrenderdoc/Windows/ConstantBufferPreviewer.h index 0b61f645a..be0f3edf1 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.h +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.h @@ -59,6 +59,7 @@ private slots: // automatic slots void on_setFormat_toggled(bool checked); void on_saveCSV_clicked(); + void on_resourceDetails_clicked(); // manual slots void processFormat(const QString &format); diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.ui b/qrenderdoc/Windows/ConstantBufferPreviewer.ui index adace34c4..4b9d39a82 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.ui +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.ui @@ -164,6 +164,20 @@ + + + + Open the currently buffer's resource details in the resource inspector + + + + :/link.png:/link.png + + + true + + + diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index e8ded1145..34922fb16 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -221,8 +221,9 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx, RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this); samp->setHeader(header); - samp->setColumns({tr("Slot"), tr("Addressing"), tr("Filter"), tr("LOD Clamp"), tr("LOD Bias")}); - header->setColumnStretchHints({1, 2, 2, 2, 2}); + samp->setColumns({tr("Slot"), tr("Sampler"), tr("Addressing"), tr("Filter"), tr("LOD Clamp"), + tr("LOD Bias")}); + header->setColumnStretchHints({2, 1, 4, 4, 4, 4}); samp->setClearSelectionOnFocusLoss(true); samp->setInstantTooltips(true); @@ -925,8 +926,7 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL if(shaderInput && !shaderInput->name.empty()) slotname += lit(": ") + shaderInput->name; - if(!m_Ctx.IsAutogeneratedName(s.Samp)) - slotname += QFormatStr(" = %1").arg(m_Ctx.GetResourceName(s.Samp)); + QString sampName = m_Ctx.GetResourceName(s.Samp); QString borderColor = QFormatStr("%1, %2, %3, %4") .arg(s.BorderColor[0]) @@ -976,7 +976,7 @@ void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, QL filter = QFormatStr(" (%1)").arg(ToQStr(s.Filter.func)); RDTreeWidgetItem *node = new RDTreeWidgetItem( - {slotname, addressing, filter, + {slotname, sampName, addressing, filter, QFormatStr("%1 - %2") .arg(s.MinLOD == -FLT_MAX ? lit("0") : QString::number(s.MinLOD)) .arg(s.MaxLOD == FLT_MAX ? lit("FLT_MAX") : QString::number(s.MaxLOD)), diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 85e491019..edefed71e 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -1653,7 +1653,7 @@ void GLPipelineStateViewer::setState() } if(tex->format.srgbCorrected && !state.m_FB.FramebufferSRGB) - name += lit(" (GL_FRAMEBUFFER_SRGB = 0)"); + format += lit(" (GL_FRAMEBUFFER_SRGB = 0)"); } if(r && (r->Swizzle[0] != TextureSwizzle::Red || r->Swizzle[1] != TextureSwizzle::Green || diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index eeed5750f..e845a6266 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -1724,7 +1724,7 @@ void TextureViewer::ViewTexture(ResourceId ID, bool focus) int idx = textureTabs->indexOf(lockedContainer); if(idx >= 0) - textureTabs->setTabIcon(idx, Icons::page_white_link()); + textureTabs->setTabIcon(idx, Icons::page_go()); else qCritical() << "Couldn't get tab index of new tab to set icon"; @@ -3290,6 +3290,21 @@ void TextureViewer::on_viewTexBuffer_clicked() } } +void TextureViewer::on_resourceDetails_clicked() +{ + TextureDescription *texptr = GetCurrentTexture(); + + if(texptr) + { + if(!m_Ctx.HasResourceInspector()) + m_Ctx.ShowResourceInspector(); + + m_Ctx.GetResourceInspector()->Inspect(texptr->ID); + + ToolWindowManager::raiseToolWindow(m_Ctx.GetResourceInspector()->Widget()); + } +} + void TextureViewer::on_saveTex_clicked() { TextureDescription *texptr = GetCurrentTexture(); diff --git a/qrenderdoc/Windows/TextureViewer.h b/qrenderdoc/Windows/TextureViewer.h index f9c861862..b3e4fd1da 100644 --- a/qrenderdoc/Windows/TextureViewer.h +++ b/qrenderdoc/Windows/TextureViewer.h @@ -161,6 +161,7 @@ private slots: void on_locationGoto_clicked(); void on_viewTexBuffer_clicked(); + void on_resourceDetails_clicked(); void on_texListShow_clicked(); void on_saveTex_clicked(); void on_debugPixelContext_clicked(); diff --git a/qrenderdoc/Windows/TextureViewer.ui b/qrenderdoc/Windows/TextureViewer.ui index c90b1cbcb..83e0c63fe 100644 --- a/qrenderdoc/Windows/TextureViewer.ui +++ b/qrenderdoc/Windows/TextureViewer.ui @@ -481,7 +481,7 @@ - :/page_white_link.png:/page_white_link.png + :/page_white_stack.png:/page_white_stack.png true @@ -522,6 +522,20 @@ + + + + Open the currently visible resource's details in the resource inspector + + + + :/link.png:/link.png + + + true + + + diff --git a/qrenderdoc/qrenderdoc_local.vcxproj b/qrenderdoc/qrenderdoc_local.vcxproj index ca94b0f30..d1bc65e80 100644 --- a/qrenderdoc/qrenderdoc_local.vcxproj +++ b/qrenderdoc/qrenderdoc_local.vcxproj @@ -1499,10 +1499,13 @@ + + + diff --git a/qrenderdoc/qrenderdoc_local.vcxproj.filters b/qrenderdoc/qrenderdoc_local.vcxproj.filters index 9955a13f5..506eea91b 100644 --- a/qrenderdoc/qrenderdoc_local.vcxproj.filters +++ b/qrenderdoc/qrenderdoc_local.vcxproj.filters @@ -1087,6 +1087,9 @@ Resources\Files + + Resources\Files + Resources\Files @@ -1099,9 +1102,15 @@ Resources\Files + + Resources\Files + Resources\Files + + Resources\Files + Resources\Files