Add shader viewer (view only - not edit/debug) using Scintilla widget

This commit is contained in:
baldurk
2017-01-23 19:08:17 +00:00
parent 2e9167b08e
commit 7ef73f92ef
14 changed files with 1049 additions and 46 deletions
+10 -5
View File
@@ -438,7 +438,7 @@ EventBrowser *CaptureContext::eventBrowser()
m_EventBrowser = new EventBrowser(this, m_MainWindow);
m_EventBrowser->setObjectName("eventBrowser");
m_EventBrowser->setWindowIcon(*m_Icon);
setupDockWindow(m_EventBrowser);
return m_EventBrowser;
}
@@ -450,7 +450,7 @@ APIInspector *CaptureContext::apiInspector()
m_APIInspector = new APIInspector(this, m_MainWindow);
m_APIInspector->setObjectName("apiInspector");
m_APIInspector->setWindowIcon(*m_Icon);
setupDockWindow(m_APIInspector);
return m_APIInspector;
}
@@ -462,7 +462,7 @@ TextureViewer *CaptureContext::textureViewer()
m_TextureViewer = new TextureViewer(this, m_MainWindow);
m_TextureViewer->setObjectName("textureViewer");
m_TextureViewer->setWindowIcon(*m_Icon);
setupDockWindow(m_TextureViewer);
return m_TextureViewer;
}
@@ -474,7 +474,7 @@ BufferViewer *CaptureContext::meshPreview()
m_MeshPreview = new BufferViewer(this, m_MainWindow);
m_MeshPreview->setObjectName("meshPreview");
m_MeshPreview->setWindowIcon(*m_Icon);
setupDockWindow(m_MeshPreview);
return m_MeshPreview;
}
@@ -486,7 +486,7 @@ PipelineStateViewer *CaptureContext::pipelineViewer()
m_PipelineViewer = new PipelineStateViewer(this, m_MainWindow);
m_PipelineViewer->setObjectName("pipelineViewer");
m_PipelineViewer->setWindowIcon(*m_Icon);
setupDockWindow(m_PipelineViewer);
return m_PipelineViewer;
}
@@ -588,3 +588,8 @@ void CaptureContext::windowClosed(QWidget *window)
else
qCritical() << "Unrecognised window being closed: " << window;
}
void CaptureContext::setupDockWindow(QWidget *shad)
{
shad->setWindowIcon(*m_Icon);
}
+1
View File
@@ -138,6 +138,7 @@ public:
BufferViewer *meshPreview();
PipelineStateViewer *pipelineViewer();
CaptureDialog *captureDialog();
void setupDockWindow(QWidget *shad);
bool hasEventBrowser() { return m_EventBrowser != NULL; }
bool hasAPIInspector() { return m_APIInspector != NULL; }
+54
View File
@@ -178,6 +178,60 @@ QString ToQStr(const ShaderStageType stage, const GraphicsAPI apitype)
return "Unknown";
}
QString TypeString(const SigParameter &sig)
{
QString ret = "";
if(sig.compType == eCompType_Float)
ret += "float";
else if(sig.compType == eCompType_UInt || sig.compType == eCompType_UScaled)
ret += "uint";
else if(sig.compType == eCompType_SInt || sig.compType == eCompType_SScaled)
ret += "int";
else if(sig.compType == eCompType_UNorm)
ret += "unorm float";
else if(sig.compType == eCompType_SNorm)
ret += "snorm float";
else if(sig.compType == eCompType_Depth)
ret += "float";
if(sig.compCount > 1)
ret += QString::number(sig.compCount);
return ret;
}
QString D3DSemanticString(const SigParameter &sig)
{
if(sig.systemValue == eAttr_None)
return ToQStr(sig.semanticIdxName);
QString ret = ToQStr(sig.systemValue);
// need to include the index if it's a system value semantic that's numbered
if(sig.systemValue == eAttr_ColourOutput || sig.systemValue == eAttr_CullDistance ||
sig.systemValue == eAttr_ClipDistance)
ret += QString::number(sig.semanticIndex);
return ret;
}
QString GetComponentString(byte mask)
{
QString ret = "";
if((mask & 0x1) > 0)
ret += "R";
if((mask & 0x2) > 0)
ret += "G";
if((mask & 0x4) > 0)
ret += "B";
if((mask & 0x8) > 0)
ret += "A";
return ret;
}
bool SaveToJSON(QVariantMap &data, QIODevice &f, const char *magicIdentifier, uint32_t magicVersion)
{
// marker that this data is valid
+43
View File
@@ -252,6 +252,45 @@ struct ToStr
return "Unknown";
}
static std::string Get(const SystemAttribute &el)
{
switch(el)
{
case eAttr_None: return "None";
case eAttr_Position: return "Position";
case eAttr_PointSize: return "Point Size";
case eAttr_ClipDistance: return "Clip Distance";
case eAttr_CullDistance: return "Cull Distance";
case eAttr_RTIndex: return "RT Index";
case eAttr_ViewportIndex: return "Viewport Index";
case eAttr_VertexIndex: return "Vertex Index";
case eAttr_PrimitiveIndex: return "Primitive Index";
case eAttr_InstanceIndex: return "Instance Index";
case eAttr_InvocationIndex: return "Invocation Index";
case eAttr_DispatchSize: return "Dispatch Size";
case eAttr_DispatchThreadIndex: return "Dispatch Thread Index";
case eAttr_GroupIndex: return "Group Index";
case eAttr_GroupFlatIndex: return "Group Flat Index";
case eAttr_GroupThreadIndex: return "Group Thread Index";
case eAttr_GSInstanceIndex: return "GS Instance Index";
case eAttr_OutputControlPointIndex: return "Output Control Point Index";
case eAttr_DomainLocation: return "Domain Location";
case eAttr_IsFrontFace: return "Is FrontFace";
case eAttr_MSAACoverage: return "MSAA Coverage";
case eAttr_MSAASamplePosition: return "MSAA Sample Position";
case eAttr_MSAASampleIndex: return "MSAA Sample Index";
case eAttr_PatchNumVertices: return "Patch NumVertices";
case eAttr_OuterTessFactor: return "Outer TessFactor";
case eAttr_InsideTessFactor: return "Inside TessFactor";
case eAttr_ColourOutput: return "Colour Output";
case eAttr_DepthOutput: return "Depth Output";
case eAttr_DepthOutputGreaterEqual: return "Depth Output (GEqual)";
case eAttr_DepthOutputLessEqual: return "Depth Output (LEqual)";
default: break;
}
return "Unknown";
}
static std::string Get(const ShaderBindType &el)
{
switch(el)
@@ -353,6 +392,10 @@ QString RowString(const ShaderVariable &v, uint32_t row);
QString VarString(const ShaderVariable &v);
QString RowTypeString(const ShaderVariable &v);
QString TypeString(const SigParameter &sig);
QString D3DSemanticString(const SigParameter &sig);
QString GetComponentString(byte mask);
struct Formatter
{
static void setParams(int minFigures, int maxFigures, int expNegCutoff, int expPosCutoff);
+265
View File
@@ -0,0 +1,265 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2017 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "ScintillaSyntax.h"
#include "SciLexer.h"
#include "ScintillaEdit.h"
static const char *hlsl_keywords[2] = {
// keyword set 0:
// Secondary keywords and identifiers
R"EOKEYWORDS(
register packoffset static const
break continue discard do for if else switch while case default return true false
abort abs acos all AllMemoryBarrier AllMemoryBarrierWithGroupSync any asdouble asfloat asin asint
asuint atan atan2 ceil clamp clip cos cosh countbits cross D3DCOLORtoUBYTE4 ddx ddx_coarse ddx_fine
ddy ddy_coarse ddy_fine degrees determinant DeviceMemoryBarrier DeviceMemoryBarrierWithGroupSync
distance dot dst errorf EvaluateAttributeAtCentroid EvaluateAttributeAtSample
EvaluateAttributeSnapped exp exp2 f16tof32 f32tof16 faceforward firstbithigh firstbitlow floor fma
fmod frac frexp fwidth GetRenderTargetSampleCount GetRenderTargetSamplePosition GroupMemoryBarrier
GroupMemoryBarrierWithGroupSync InterlockedAdd InterlockedAnd InterlockedCompareExchange
InterlockedCompareStore InterlockedExchange InterlockedMax InterlockedMin InterlockedOr
InterlockedXor isfinite isinf isnan ldexp length lerp lit log log10 log2 mad max min modf msad4 mul
noise normalize pow printf Process2DQuadTessFactorsAvg Process2DQuadTessFactorsMax
Process2DQuadTessFactorsMin ProcessIsolineTessFactors ProcessQuadTessFactorsAvg
ProcessQuadTessFactorsMax ProcessQuadTessFactorsMin ProcessTriTessFactorsAvg
ProcessTriTessFactorsMax ProcessTriTessFactorsMin radians rcp reflect refract reversebits round
rsqrt saturate sign sin sincos sinh smoothstep sqrt step tan tanh tex1D tex1Dbias tex1Dgrad tex1Dlod
tex1Dproj tex2D tex2Dbias tex2Dgrad tex2Dlod tex2Dproj tex3D tex3Dbias tex3Dgrad tex3Dlod tex3Dproj
texCUBE texCUBEbias texCUBEgrad texCUBElod texCUBEproj transpose trunc
BINORMAL BINORMAL0 BINORMAL1 BINORMAL2 BINORMAL3 BINORMAL4 BINORMAL5 BINORMAL6 BINORMAL7
BLENDINDICES BLENDINDICES0 BLENDINDICES1 BLENDINDICES2 BLENDINDICES3 BLENDINDICES4 BLENDINDICES5
BLENDINDICES6 BLENDINDICES7 BLENDWEIGHT BLENDWEIGHT0 BLENDWEIGHT1 BLENDWEIGHT2 BLENDWEIGHT3
BLENDWEIGHT4 BLENDWEIGHT5 BLENDWEIGHT6 BLENDWEIGHT7 COLOR COLOR0 COLOR1 COLOR2 COLOR3 COLOR4 COLOR5
COLOR6 COLOR7 NORMAL NORMAL0 NORMAL1 NORMAL2 NORMAL3 NORMAL4 NORMAL5 NORMAL6 NORMAL7 POSITION
POSITION0 POSITION1 POSITION2 POSITION3 POSITION4 POSITION5 POSITION6 POSITION7 POSITIONT PSIZE
PSIZE0 PSIZE1 PSIZE2 PSIZE3 PSIZE4 PSIZE5 PSIZE6 PSIZE7 TANGENT TANGENT0 TANGENT1 TANGENT2 TANGENT3
TANGENT4 TANGENT5 TANGENT6 TANGENT7 TEXCOORD TEXCOORD0 TEXCOORD1 TEXCOORD2 TEXCOORD3 TEXCOORD4
TEXCOORD5 TEXCOORD6 TEXCOORD7 TEXCOORD8 TEXCOORD9 TEXCOORD0 TEXCOORD1 TEXCOORD2 TEXCOORD3 TEXCOORD4
TEXCOORD5 TEXCOORD6 TEXCOORD7 TEXCOORD8 TEXCOORD9
SV_Coverage SV_Depth SV_DispatchThreadID SV_DomainLocation SV_GroupID SV_GroupIndex SV_GroupThreadID
SV_GSInstanceID SV_InsideTessFactor SV_IsFrontFace SV_OutputControlPointID SV_POSITION SV_Position
SV_RenderTargetArrayIndex SV_SampleIndex SV_TessFactor SV_ViewportArrayIndex SV_InstanceID
SV_PrimitiveID SV_VertexID SV_TargetID SV_TARGET SV_Target SV_Target0 SV_Target1 SV_Target2
SV_Target3 SV_Target4 SV_Target5 SV_Target6 SV_Target7 SV_ClipDistance0 SV_ClipDistance1
SV_ClipDistance2 SV_ClipDistance3 SV_ClipDistance4 SV_ClipDistance5 SV_ClipDistance6
SV_ClipDistance7 SV_CullDistance0 SV_CullDistance1 SV_CullDistance2 SV_CullDistance3
SV_CullDistance4 SV_CullDistance5 SV_CullDistance6 SV_CullDistance7
)EOKEYWORDS",
// keyword set 1:
// Secondary keywords and identifiers
R"EOKEYWORDS(
bool bool1 bool2 bool3 bool4 bool1x1 bool1x2 bool1x3 bool1x4 bool2x1 bool2x2 bool2x3 bool2x4 bool3x1
bool3x2 bool3x3 bool3x4 bool4x1 bool4x2 bool4x3 bool4x4
int int1 int2 int3 int4 int1x1 int1x2 int1x3 int1x4 int2x1 int2x2 int2x3 int2x4 int3x1 int3x2 int3x3
int3x4 int4x1 int4x2 int4x3 int4x4
uint uint1 uint2 uint3 uint4 uint1x1 uint1x2 uint1x3 uint1x4 uint2x1 uint2x2 uint2x3 uint2x4 uint3x1
uint3x2 uint3x3 uint3x4 uint4x1 uint4x2 uint4x3 uint4x4
UINT UINT2 UINT3 UINT4
dword dword1 dword2 dword3 dword4 dword1x1 dword1x2 dword1x3 dword1x4 dword2x1 dword2x2 dword2x3
dword2x4 dword3x1 dword3x2 dword3x3 dword3x4 dword4x1 dword4x2 dword4x3 dword4x4
half half1 half2 half3 half4 half1x1 half1x2 half1x3 half1x4 half2x1 half2x2 half2x3 half2x4 half3x1
half3x2 half3x3 half3x4 half4x1 half4x2 half4x3 half4x4
float float1 float2 float3 float4 float1x1 float1x2 float1x3 float1x4 float2x1 float2x2 float2x3
float2x4 float3x1 float3x2 float3x3 float3x4 float4x1 float4x2 float4x3 float4x4
double double1 double2 double3 double4 double1x1 double1x2 double1x3 double1x4 double2x1 double2x2
double2x3 double2x4 double3x1 double3x2 double3x3 double3x4 double4x1 double4x2 double4x3 double4x4
snorm unorm string void cbuffer struct
Buffer AppendStructuredBfufer ByteAddressBuffer ConsumeStructuredBuffer StructuredBuffer RWBuffer
RWByteAddressBuffer RWStructuredBuffer RWTexture1D RWTexture1DArray RWTexture2D RWTexture2DArray
RWTexture3D
InputPatch OutputPatch
linear centroid nointerpolation noperspective sample
sampler sampler1D sampler2D sampler3D samplerCUBE SamplerComparisonState SamplerState sampler_state
AddressU AddressV AddressW BorderColor Filter MaxAnisotropy MaxLOD MinLOD MipLODBias ComparisonFunc
ComparisonFilter
texture Texture1D Texture1DArray Texture2D Texture2DArray Texture2DMS Texture2DMSArray Texture3D
TextureCube
)EOKEYWORDS"};
static const char *glsl_keywords[2] = {
// keyword set 0:
// Secondary keywords and identifiers
R"EOKEYWORDS(
in out inout static const
break continue do for while switch case default if else true false discard return
radians degrees sin cos tan asin acos atan sinh cosh tanh asinh acosh atanh pow exp log exp2 log2
sqrt inversesqrt abs sign floor trunc round roundEven ceil fract mod modf min max clamp mix step
smoothstep isnan isinf floatBitsToInt floatBitsToUint intBitsToFloat uintBitsToFloat fma frexp ldexp
packUnorm2x16 packSnorm2x16 packUnorm4x8 packSnorm4x8 unpackUnorm2x16 unpackSnorm2x16 unpackUnorm4x8
unpackSnorm4x8 packDouble2x32 unpackDouble2x32 packHalf2x16 unpackHalf2x16 length distance dot cross
normalize faceforward reflect refract matrixCompMult outerProduct transpose determinant inverse
lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not uaddCarry usubBorrow
umulExtended imulExtended bitfieldExtract bitfieldInsert bitfieldReverse bitCount findLSB findMSB
textureSize textureQueryLod textureQueryLevels textureSamples texture textureProj textureLod
textureOffset texelFetch texelFetchOffset textureProjOffset textureLodOffset textureProjLod
textureProjLodOffset textureGrad textureGradOffset textureProjGrad textureProjGradOffset
textureGather textureGatherOffset textureGatherOffsets
atomicCounterIncrement atomicCounterDecrement atomicCounter atomicAdd atomicMin atomicMax atomicAnd
atomicOr atomicXor atomicExchange atomicCompSwap
imageSize imageSamples imageLoad imageStore imageAtomicAdd imageAtomicMin imageAtomicMax
imageAtomicAnd imageAtomicOr imageAtomicXor imageAtomicExchange imageAtomicCompSwap
dFdx dFdy dFdxFine dFdyFine dFdxCoarse dFdyCoarse fwidth fwidthFine fwidthCoarse
interpolateAtCentroid interpolateAtSample interpolateAtOffset EmitStreamVertex EndStreamPrimitive
EmitVertex EndPrimitive barrier memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer
memoryBarrierShared memoryBarrierImage groupMemoryBarrier
gl_CullDistance gl_FragCoord gl_FragDepth gl_FrontFacing gl_GlobalInvocationID gl_HelperInvocation
gl_in gl_InstanceID gl_InvocationID gl_Layer gl_LocalInvocationID gl_LocalInvocationIndex
gl_MaxPatchVertices gl_NumWorkGroups gl_out gl_PatchVerticesIn gl_PerVertex gl_PointCoord
gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_SampleID gl_SampleMask gl_SampleMaskIn
gl_SamplePosition gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_VertexID gl_ViewportIndex
gl_WorkGroupID gl_WorkGroupSize
gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxComputeUniformComponents
gl_MaxComputeTextureImageUnits gl_MaxComputeImageUniforms gl_MaxComputeAtomicCounters
gl_MaxComputeAtomicCounterBuffers gl_MaxVertexAttribs gl_MaxVertexUniformComponents
gl_MaxVaryingComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents
gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxImageUnits
gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedShaderOutputResources gl_MaxImageSamples
gl_MaxVertexImageUniforms gl_MaxTessControlImageUniforms gl_MaxTessEvaluationImageUniforms
gl_MaxGeometryImageUniforms gl_MaxFragmentImageUniforms gl_MaxCombinedImageUniforms
gl_MaxFragmentUniformComponents gl_MaxDrawBuffers gl_MaxClipDistances
gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents
gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents
gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits
gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents
gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents
gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents
gl_MaxTessPatchComponents gl_MaxPatchVertices gl_MaxTessGenLevel gl_MaxViewports
gl_MaxVertexUniformVectors gl_MaxFragmentUniformVectors gl_MaxVaryingVectors
gl_MaxVertexAtomicCounters gl_MaxTessControlAtomicCounters gl_MaxTessEvaluationAtomicCounters
gl_MaxGeometryAtomicCounters gl_MaxFragmentAtomicCounters gl_MaxCombinedAtomicCounters
gl_MaxAtomicCounterBindings gl_MaxVertexAtomicCounterBuffers gl_MaxTessControlAtomicCounterBuffers
gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxGeometryAtomicCounterBuffers
gl_MaxFragmentAtomicCounterBuffers gl_MaxCombinedAtomicCounterBuffers gl_MaxAtomicCounterBufferSize
gl_MinProgramTexelOffset gl_MaxProgramTexelOffset gl_MaxTransformFeedbackBuffers
gl_MaxTransformFeedbackInterleavedComponents gl_MaxCullDistances gl_MaxCombinedClipAndCullDistances
gl_MaxSamples gl_MaxVertexImageUniforms gl_MaxFragmentImageUniforms gl_MaxComputeImageUniforms
gl_MaxCombinedImageUniforms gl_MaxCombinedShaderOutputResources gl_DepthRangeParameters
gl_DepthRange gl_NumSamples
)EOKEYWORDS",
// keyword set 1:
// Secondary keywords and identifiers
R"EOKEYWORDS(
float double int void bool
mat2 mat3 mat4 dmat2 dmat3 dmat4 mat2x2 mat2x3 mat2x4 dmat2x2 dmat2x3 dmat2x4 mat3x2 mat3x3 mat3x4
dmat3x2 dmat3x3 dmat3x4 mat4x2 mat4x3 mat4x4 dmat4x2 dmat4x3 dmat4x4 vec2 vec3 vec4 ivec2 ivec3
ivec4 bvec2 bvec3 bvec4 dvec2 dvec3 dvec4 uint uvec2 uvec3 uvec4
atomic_uint patch sample buffer subroutine struct
invariant precise layout
lowp mediump highp precision attribute uniform varying shared coherent volatile restrict readonly
writeonly centroid flat smooth noperspective
sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow samplerCubeShadow
sampler1DArray sampler2DArray sampler1DArrayShadow sampler2DArrayShadow isampler1D isampler2D
isampler3D isamplerCube isampler1DArray isampler2DArray usampler1D usampler2D usampler3D
usamplerCube usampler1DArray usampler2DArray sampler2DRect sampler2DRectShadow isampler2DRect
usampler2DRect samplerBuffer isamplerBuffer usamplerBuffer sampler2DMS isampler2DMS usampler2DMS
sampler2DMSArray isampler2DMSArray usampler2DMSArray samplerCubeArray samplerCubeArrayShadow
isamplerCubeArray usamplerCubeArray
image1D iimage1D uimage1D image2D iimage2D uimage2D image3D iimage3D uimage3D image2DRect
iimage2DRect uimage2DRect imageCube iimageCube uimageCube imageBuffer iimageBuffer uimageBuffer
image1DArray iimage1DArray uimage1DArray image2DArray iimage2DArray uimage2DArray imageCubeArray
iimageCubeArray uimageCubeArray image2DMS iimage2DMS uimage2DMS image2DMSArray iimage2DMSArray
uimage2DMSArray
)EOKEYWORDS"};
void ConfigureSyntax(ScintillaEdit *scintilla, int language)
{
scintilla->setLexer(language);
bool hlsl = false;
bool glsl = false;
if(language == SCLEX_HLSL)
{
hlsl = true;
language = SCLEX_CPP;
}
if(language == SCLEX_GLSL)
{
glsl = true;
language = SCLEX_CPP;
}
scintilla->setLexer(language);
scintilla->styleSetFont(STYLE_DEFAULT, "Consolas");
scintilla->styleSetSize(STYLE_DEFAULT, 10);
if(language == SCLEX_CPP)
{
scintilla->setProperty("lexer.cpp.track.preprocessor", "0");
scintilla->styleSetFore(SCE_C_COMMENT, SCINTILLA_COLOUR(0, 150, 0));
scintilla->styleSetFore(SCE_C_COMMENTDOC, SCINTILLA_COLOUR(0, 150, 0));
scintilla->styleSetFore(SCE_C_COMMENTLINE, SCINTILLA_COLOUR(0, 150, 0));
scintilla->styleSetFore(SCE_C_WORD, SCINTILLA_COLOUR(0, 0, 150));
scintilla->styleSetFore(SCE_C_WORD2, SCINTILLA_COLOUR(0, 0, 150));
if(hlsl)
{
scintilla->setKeyWords(0, hlsl_keywords[0]);
scintilla->setKeyWords(1, hlsl_keywords[1]);
}
else if(glsl)
{
scintilla->setKeyWords(0, glsl_keywords[0]);
scintilla->setKeyWords(1, glsl_keywords[1]);
}
}
}
+34
View File
@@ -0,0 +1,34 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2017 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#define SCLEX_GLSL 1000
#define SCLEX_HLSL 1001
#define SCINTILLA_COLOUR(r, g, b) (long(r) | (long(g) << 8) | (long(b) << 16))
class ScintillaEdit;
void ConfigureSyntax(ScintillaEdit *scintilla, int language);
@@ -29,6 +29,7 @@
#include "Windows/BufferViewer.h"
#include "Windows/ConstantBufferPreviewer.h"
#include "Windows/MainWindow.h"
#include "Windows/ShaderViewer.h"
#include "Windows/TextureViewer.h"
#include "ui_VulkanPipelineStateViewer.h"
@@ -94,6 +95,10 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(CaptureContext *ctx, QWidge
{
ui->setupUi(this);
RDLabel *shaderLabels[] = {
ui->vsShader, ui->tcsShader, ui->tesShader, ui->gsShader, ui->fsShader, ui->csShader,
};
QToolButton *viewButtons[] = {
ui->vsShaderViewButton, ui->tcsShaderViewButton, ui->tesShaderViewButton,
ui->gsShaderViewButton, ui->fsShaderViewButton, ui->csShaderViewButton,
@@ -121,6 +126,9 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(CaptureContext *ctx, QWidge
for(QToolButton *b : viewButtons)
QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderView_clicked);
for(RDLabel *b : shaderLabels)
QObject::connect(b, &RDLabel::clicked, this, &VulkanPipelineStateViewer::shaderView_clicked);
for(QToolButton *b : editButtons)
QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderEdit_clicked);
@@ -2146,6 +2154,8 @@ void VulkanPipelineStateViewer::ubo_itemActivated(QTreeWidgetItem *item, int col
ConstantBufferPreviewer *prev =
new ConstantBufferPreviewer(m_Ctx, stage->stage, cb.slotIdx, cb.arrayIdx, m_Ctx->mainWindow());
m_Ctx->setupDockWindow(prev);
ToolWindowManager *manager = ToolWindowManager::managerOf(this);
ToolWindowManager::AreaReference ref(ToolWindowManager::RightOf, manager->areaOf(this), 0.3f);
@@ -2278,6 +2288,22 @@ void VulkanPipelineStateViewer::vertex_leave(QEvent *e)
void VulkanPipelineStateViewer::shaderView_clicked()
{
const VulkanPipelineState::ShaderStage *stage =
stageForSender(qobject_cast<QWidget *>(QObject::sender()));
if(stage == NULL || stage->Shader == ResourceId())
return;
ShaderReflection *shaderDetails = stage->ShaderDetails;
ShaderViewer *shad = new ShaderViewer(m_Ctx, shaderDetails, stage->stage, NULL, "");
m_Ctx->setupDockWindow(shad);
ToolWindowManager *manager = ToolWindowManager::managerOf(this);
ToolWindowManager::AreaReference ref(ToolWindowManager::AddTo, manager->areaOf(this));
manager->addToolWindow(shad, ref);
}
void VulkanPipelineStateViewer::shaderEdit_clicked()
@@ -518,7 +518,7 @@
<number>4</number>
</property>
<item>
<widget class="QLabel" name="vsShader">
<widget class="RDLabel" name="vsShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -846,7 +846,7 @@ padding: 0px;</string>
<number>4</number>
</property>
<item>
<widget class="QLabel" name="tcsShader">
<widget class="RDLabel" name="tcsShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -1174,7 +1174,7 @@ padding: 0px;</string>
<number>4</number>
</property>
<item>
<widget class="QLabel" name="tesShader">
<widget class="RDLabel" name="tesShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -1502,7 +1502,7 @@ padding: 0px;</string>
<number>4</number>
</property>
<item>
<widget class="QLabel" name="gsShader">
<widget class="RDLabel" name="gsShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -2493,7 +2493,7 @@ padding: 0px;</string>
<number>4</number>
</property>
<item>
<widget class="QLabel" name="fsShader">
<widget class="RDLabel" name="fsShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -3434,7 +3434,7 @@ padding: 0px;</string>
<number>4</number>
</property>
<item>
<widget class="QLabel" name="csShader">
<widget class="RDLabel" name="csShader">
<property name="minimumSize">
<size>
<width>250</width>
@@ -3733,6 +3733,11 @@ padding: 0px;</string>
<extends>QTreeWidget</extends>
<header>Widgets/Extended/RDTreeWidget.h</header>
</customwidget>
<customwidget>
<class>RDLabel</class>
<extends>QLabel</extends>
<header>Widgets/Extended/RDLabel.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../resources.qrc"/>
+266
View File
@@ -0,0 +1,266 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2017 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "ShaderViewer.h"
#include <QHBoxLayout>
#include "3rdparty/toolwindowmanager/ToolWindowManager.h"
#include "Code/ScintillaSyntax.h"
#include "SciLexer.h"
#include "ScintillaEdit.h"
#include "ui_ShaderViewer.h"
ShaderViewer::ShaderViewer(CaptureContext *ctx, ShaderReflection *shader, ShaderStageType stage,
ShaderDebugTrace *trace, const QString &debugContext, QWidget *parent)
: QFrame(parent), ui(new Ui::ShaderViewer), m_Ctx(ctx)
{
ui->setupUi(this);
m_ShaderDetails = shader;
m_Trace = trace;
if(trace != NULL)
setWindowTitle(
QString("Debugging %1 - %2").arg(m_Ctx->CurPipelineState.GetShaderName(stage)).arg(debugContext));
else
setWindowTitle(m_Ctx->CurPipelineState.GetShaderName(stage));
QString disasm = shader != NULL ? ToQStr(shader->Disassembly) : "";
{
m_DisassemblyView = MakeEditor("scintillaDisassem", disasm,
m_Ctx->APIProps().pipelineType == eGraphicsAPI_Vulkan);
m_DisassemblyView->setReadOnly(true);
m_DisassemblyView->setWindowTitle(tr("Disassembly"));
QObject::connect(m_DisassemblyView, &ScintillaEdit::keyPressed, this,
&ShaderViewer::disassembly_keyPressed);
QObject::connect(m_DisassemblyView, &ScintillaEdit::keyPressed, this,
&ShaderViewer::readonly_keyPressed);
// C# LightCoral
m_DisassemblyView->markerSetBack(CURRENT_MARKER, SCINTILLA_COLOUR(240, 128, 128));
m_DisassemblyView->markerDefine(CURRENT_MARKER, SC_MARK_SHORTARROW);
// C# LightSlateGray
m_DisassemblyView->markerSetBack(FINISHED_MARKER, SCINTILLA_COLOUR(119, 136, 153));
m_DisassemblyView->markerDefine(FINISHED_MARKER, SC_MARK_ROUNDRECT);
// C# Red
m_DisassemblyView->markerSetBack(BREAKPOINT_MARKER, SCINTILLA_COLOUR(255, 0, 0));
m_DisassemblyView->markerDefine(BREAKPOINT_MARKER, SC_MARK_CIRCLE);
m_Scintillas.push_back(m_DisassemblyView);
ui->docking->addToolWindow(m_DisassemblyView, ToolWindowManager::EmptySpace);
ui->docking->setToolWindowProperties(m_DisassemblyView, ToolWindowManager::HideCloseButton);
}
if(shader != NULL && shader->DebugInfo.entryFunc.count > 0 && shader->DebugInfo.files.count > 0)
{
if(trace != NULL)
setWindowTitle(
QString("Debug %1() - %2").arg(ToQStr(shader->DebugInfo.entryFunc)).arg(debugContext));
else
setWindowTitle(ToQStr(shader->DebugInfo.entryFunc));
int fileIdx = 0;
QWidget *sel = m_DisassemblyView;
for(auto &f : shader->DebugInfo.files)
{
QString name = ToQStr(f.first);
QString text = ToQStr(f.second);
ScintillaEdit *scintilla = MakeEditor("scintilla" + name, text, true);
scintilla->setReadOnly(true);
((QWidget *)scintilla)->setProperty("name", name);
QObject::connect(scintilla, &ScintillaEdit::keyPressed, this,
&ShaderViewer::readonly_keyPressed);
ui->docking->addToolWindow(
scintilla, ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
ui->docking->areaOf(m_DisassemblyView)));
ui->docking->setToolWindowProperties(scintilla, ToolWindowManager::HideCloseButton);
m_Scintillas.push_back(scintilla);
if(shader->DebugInfo.entryFile >= 0 &&
shader->DebugInfo.entryFile < shader->DebugInfo.files.count)
{
if(fileIdx == shader->DebugInfo.entryFile)
sel = scintilla;
}
else if(text.contains(ToQStr(shader->DebugInfo.entryFunc)))
{
sel = scintilla;
}
fileIdx++;
}
// if(shader->DebugInfo.files.count > 2)
// AddFileList();
ToolWindowManager::raiseToolWindow(sel);
}
for(int i = 0; i < ui->inputSig->header()->count(); i++)
ui->inputSig->header()->setSectionResizeMode(i, QHeaderView::ResizeToContents);
for(int i = 0; i < ui->outputSig->header()->count(); i++)
ui->outputSig->header()->setSectionResizeMode(i, QHeaderView::ResizeToContents);
if(m_ShaderDetails != NULL)
{
for(SigParameter &s : m_ShaderDetails->InputSig)
{
QString name = s.varName.count == 0
? ToQStr(s.semanticName)
: QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName));
if(s.semanticName.count == 0)
name = s.varName;
QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : "";
ui->inputSig->addTopLevelItem(makeTreeNode(
{name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue),
GetComponentString(s.regChannelMask), GetComponentString(s.channelUsedMask)}));
}
bool multipleStreams = false;
for(const SigParameter &s : m_ShaderDetails->OutputSig)
{
if(s.stream > 0)
{
multipleStreams = true;
break;
}
}
for(const SigParameter &s : m_ShaderDetails->OutputSig)
{
QString name = s.varName.count == 0
? ToQStr(s.semanticName)
: QString("%1 (%2)").arg(ToQStr(s.varName)).arg(ToQStr(s.semanticName));
if(s.semanticName.count == 0)
name = s.varName;
if(multipleStreams)
name = QString("Stream %1 : %2").arg(s.stream).arg(name);
QString semIdx = s.needSemanticIndex ? QString::number(s.semanticIndex) : "";
ui->outputSig->addTopLevelItem(makeTreeNode(
{name, semIdx, s.regIndex, TypeString(s), ToQStr(s.systemValue),
GetComponentString(s.regChannelMask), GetComponentString(s.channelUsedMask)}));
}
}
ui->inputSig->setWindowTitle(tr("Input Signature"));
ui->docking->addToolWindow(
ui->inputSig, ToolWindowManager::AreaReference(ToolWindowManager::BottomOf,
ui->docking->areaOf(m_DisassemblyView), 0.2f));
ui->docking->setToolWindowProperties(ui->inputSig, ToolWindowManager::HideCloseButton);
ui->outputSig->setWindowTitle(tr("Output Signature"));
ui->docking->addToolWindow(
ui->outputSig, ToolWindowManager::AreaReference(ToolWindowManager::RightOf,
ui->docking->areaOf(ui->inputSig), 0.5f));
ui->docking->setToolWindowProperties(ui->outputSig, ToolWindowManager::HideCloseButton);
ui->docking->setAllowFloatingWindow(false);
ui->docking->setRubberBandLineWidth(50);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(ui->docking);
m_Ctx->AddLogViewer(this);
}
ShaderViewer::~ShaderViewer()
{
m_Ctx->RemoveLogViewer(this);
delete ui;
}
void ShaderViewer::OnLogfileLoaded()
{
}
void ShaderViewer::OnLogfileClosed()
{
ToolWindowManager::closeToolWindow(this);
}
void ShaderViewer::OnEventChanged(uint32_t eventID)
{
}
void ShaderViewer::disassembly_keyPressed(QKeyEvent *event)
{
}
void ShaderViewer::readonly_keyPressed(QKeyEvent *event)
{
}
ScintillaEdit *ShaderViewer::MakeEditor(const QString &name, const QString &text, bool src)
{
ScintillaEdit *ret = new ScintillaEdit(this);
ret->setText(text.toUtf8().data());
sptr_t numlines = ret->lineCount();
int margin0width = 30;
if(numlines > 1000)
margin0width += 6;
if(numlines > 10000)
margin0width += 6;
ret->setMarginLeft(4);
ret->setMarginWidthN(0, margin0width);
ret->setMarginWidthN(1, 0);
ret->setMarginWidthN(2, 16);
ret->setObjectName(name);
// C# DarkGreen
ret->indicSetFore(4, SCINTILLA_COLOUR(0, 100, 0));
ret->indicSetStyle(4, INDIC_ROUNDBOX);
ConfigureSyntax(ret,
m_Ctx->APIProps().localRenderer == eGraphicsAPI_OpenGL ? SCLEX_GLSL : SCLEX_HLSL);
ret->setTabWidth(4);
ret->setScrollWidth(1);
ret->setScrollWidthTracking(true);
ret->colourise(0, -1);
ret->emptyUndoBuffer();
return ret;
}
+72
View File
@@ -0,0 +1,72 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2017 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include <QKeyEvent>
#include "Code/CaptureContext.h"
namespace Ui
{
class ShaderViewer;
}
struct ShaderDebugTrace;
struct ShaderReflection;
class ScintillaEdit;
class ShaderViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
public:
explicit ShaderViewer(CaptureContext *ctx, ShaderReflection *shader, ShaderStageType stage,
ShaderDebugTrace *trace, const QString &debugContext, QWidget *parent = 0);
~ShaderViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnSelectedEventChanged(uint32_t eventID) {}
void OnEventChanged(uint32_t eventID);
private slots:
// manual slots
void disassembly_keyPressed(QKeyEvent *event);
void readonly_keyPressed(QKeyEvent *event);
private:
Ui::ShaderViewer *ui;
CaptureContext *m_Ctx;
ShaderDebugTrace *m_Trace;
ShaderReflection *m_ShaderDetails;
ScintillaEdit *m_DisassemblyView;
QList<ScintillaEdit *> m_Scintillas;
static const int CURRENT_MARKER = 0;
static const int BREAKPOINT_MARKER = 1;
static const int FINISHED_MARKER = 2;
ScintillaEdit *MakeEditor(const QString &name, const QString &text, bool src);
};
+198
View File
@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ShaderViewer</class>
<widget class="QFrame" name="ShaderViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>691</width>
<height>427</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="ToolWindowManager" name="docking" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>100</width>
<height>30</height>
</rect>
</property>
</widget>
<widget class="QTreeWidget" name="inputSig">
<property name="geometry">
<rect>
<x>60</x>
<y>200</y>
<width>256</width>
<height>192</height>
</rect>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="indentation">
<number>0</number>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="itemsExpandable">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<property name="columnCount">
<number>7</number>
</property>
<property name="cornerButtonEnabled" stdset="0">
<bool>false</bool>
</property>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Index</string>
</property>
</column>
<column>
<property name="text">
<string>Reg</string>
</property>
</column>
<column>
<property name="text">
<string>Type</string>
</property>
</column>
<column>
<property name="text">
<string>SysValue</string>
</property>
</column>
<column>
<property name="text">
<string>Mask</string>
</property>
</column>
<column>
<property name="text">
<string>Used</string>
</property>
</column>
</widget>
<widget class="QTreeWidget" name="outputSig">
<property name="geometry">
<rect>
<x>360</x>
<y>200</y>
<width>256</width>
<height>192</height>
</rect>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="indentation">
<number>0</number>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="itemsExpandable">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<property name="columnCount">
<number>7</number>
</property>
<property name="cornerButtonEnabled" stdset="0">
<bool>false</bool>
</property>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Index</string>
</property>
</column>
<column>
<property name="text">
<string>Reg</string>
</property>
</column>
<column>
<property name="text">
<string>Type</string>
</property>
</column>
<column>
<property name="text">
<string>SysValue</string>
</property>
</column>
<column>
<property name="text">
<string>Mask</string>
</property>
</column>
<column>
<property name="text">
<string>Used</string>
</property>
</column>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>ToolWindowManager</class>
<extends>QWidget</extends>
<header>ToolWindowManager.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
+41 -35
View File
@@ -93,40 +93,7 @@ win32 {
}
}
# Add Scintilla
# Needed for building
DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1
INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/src
INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib
SOURCES += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/lexers/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.cpp \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.cpp
HEADERS += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.h
# Add ToolWindowManager
SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \
3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp \
3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp
HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \
3rdparty/toolwindowmanager/ToolWindowManagerArea.h \
3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h
# Add FlowLayout
SOURCES += 3rdparty/flowlayout/FlowLayout.cpp
HEADERS += 3rdparty/flowlayout/FlowLayout.h
# Add our sources
# Add our sources first so Qt Creator adds new files here
SOURCES += Code/qrenderdoc.cpp \
Code/qprocessinfo.cpp \
@@ -134,6 +101,7 @@ SOURCES += Code/qrenderdoc.cpp \
Code/CommonPipelineState.cpp \
Code/PersistantConfig.cpp \
Code/CaptureContext.cpp \
Code/ScintillaSyntax.cpp \
Windows/Dialogs/AboutDialog.cpp \
Windows/MainWindow.cpp \
Windows/EventBrowser.cpp \
@@ -170,6 +138,7 @@ HEADERS += Code/CaptureContext.h \
Code/RenderManager.h \
Code/PersistantConfig.h \
Code/CommonPipelineState.h \
Code/ScintillaSyntax.h \
Windows/Dialogs/AboutDialog.h \
Windows/MainWindow.h \
Windows/EventBrowser.h \
@@ -217,6 +186,43 @@ FORMS += Windows/Dialogs/AboutDialog.ui \
Windows/PipelineState/GLPipelineStateViewer.ui \
Windows/ConstantBufferPreviewer.ui \
Widgets/BufferFormatSpecifier.ui \
Windows/BufferViewer.ui
Windows/BufferViewer.ui \
Windows/ShaderViewer.ui
RESOURCES += resources.qrc
# Add ToolWindowManager
SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \
3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp \
3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp
HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \
3rdparty/toolwindowmanager/ToolWindowManagerArea.h \
3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h
# Add FlowLayout
SOURCES += 3rdparty/flowlayout/FlowLayout.cpp
HEADERS += 3rdparty/flowlayout/FlowLayout.h
# Add Scintilla last as it has extra search paths
# Needed for building
DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 SCI_LEXER=1
INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/src
INCLUDEPATH += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib
SOURCES += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/lexers/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.cxx \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.cpp \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.cpp \
Windows/ShaderViewer.cpp
HEADERS += $$_PRO_FILE_PWD_/3rdparty/scintilla/lexlib/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/src/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEdit/*.h \
$$_PRO_FILE_PWD_/3rdparty/scintilla/qt/ScintillaEditBase/*.h \
Windows/ShaderViewer.h
+7
View File
@@ -489,6 +489,7 @@
<ClCompile Include="Code\PersistantConfig.cpp" />
<ClCompile Include="Code\qprocessinfo.cpp" />
<ClCompile Include="Code\QRDUtils.cpp" />
<ClCompile Include="Code\ScintillaSyntax.cpp" />
<ClCompile Include="generated\moc_AboutDialog.cpp" />
<ClCompile Include="generated\moc_APIInspector.cpp" />
<ClCompile Include="generated\moc_BufferFormatSpecifier.cpp" />
@@ -517,6 +518,7 @@
<ClCompile Include="generated\moc_ScintillaEdit.cpp" />
<ClCompile Include="generated\moc_ScintillaEditBase.cpp" />
<ClCompile Include="generated\moc_ScintillaQt.cpp" />
<ClCompile Include="generated\moc_ShaderViewer.cpp" />
<ClCompile Include="generated\moc_TextureGoto.cpp" />
<ClCompile Include="generated\moc_TextureSaveDialog.cpp" />
<ClCompile Include="generated\moc_TextureViewer.cpp" />
@@ -558,6 +560,7 @@
<ClCompile Include="Windows\PipelineState\GLPipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\PipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\VulkanPipelineStateViewer.cpp" />
<ClCompile Include="Windows\ShaderViewer.cpp" />
<ClCompile Include="Windows\TextureViewer.cpp" />
<ClCompile Include="3rdparty\toolwindowmanager\ToolWindowManager.cpp">
<WarningLevel>Level3</WarningLevel>
@@ -638,6 +641,7 @@
<ClInclude Include="Code\PersistantConfig.h" />
<ClInclude Include="Code\qprocessinfo.h" />
<ClInclude Include="Code\QRDUtils.h" />
<ClInclude Include="Code\ScintillaSyntax.h" />
<ClInclude Include="generated\ui_AboutDialog.h" />
<ClInclude Include="generated\ui_APIInspector.h" />
<ClInclude Include="generated\ui_BufferFormatSpecifier.h" />
@@ -652,6 +656,7 @@
<ClInclude Include="generated\ui_MainWindow.h" />
<ClInclude Include="generated\ui_PipelineStateViewer.h" />
<ClInclude Include="generated\ui_ResourcePreview.h" />
<ClInclude Include="generated\ui_ShaderViewer.h" />
<ClInclude Include="generated\ui_TextureSaveDialog.h" />
<ClInclude Include="generated\ui_TextureViewer.h" />
<ClInclude Include="generated\ui_ThumbnailStrip.h" />
@@ -687,6 +692,7 @@
<ClInclude Include="Windows\PipelineState\GLPipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\PipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\VulkanPipelineStateViewer.h" />
<ClInclude Include="Windows\ShaderViewer.h" />
<ClInclude Include="Windows\TextureViewer.h" />
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManager.h" />
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManagerArea.h" />
@@ -710,6 +716,7 @@
<None Include="Windows\PipelineState\GLPipelineStateViewer.ui" />
<None Include="Windows\PipelineState\PipelineStateViewer.ui" />
<None Include="Windows\PipelineState\VulkanPipelineStateViewer.ui" />
<None Include="Windows\ShaderViewer.ui" />
<None Include="Windows\TextureViewer.ui" />
</ItemGroup>
<ItemGroup>
@@ -457,6 +457,15 @@
<ClCompile Include="generated\moc_ScintillaEdit.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="Windows\ShaderViewer.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="generated\moc_ShaderViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="Code\ScintillaSyntax.cpp">
<Filter>Code</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="3rdparty\flowlayout\FlowLayout.h">
@@ -807,6 +816,15 @@
<ClInclude Include="3rdparty\scintilla\qt\ScintillaEdit\ScintillaEdit.h">
<Filter>3rdparty\Scintilla\qt\ScintillaEdit</Filter>
</ClInclude>
<ClInclude Include="Windows\ShaderViewer.h">
<Filter>Windows</Filter>
</ClInclude>
<ClInclude Include="generated\ui_ShaderViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="Code\ScintillaSyntax.h">
<Filter>Code</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="resources.qrc">
@@ -1040,6 +1058,9 @@
<None Include="Windows\BufferViewer.ui">
<Filter>Windows</Filter>
</None>
<None Include="Windows\ShaderViewer.ui">
<Filter>Windows</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="generated\ui_AboutDialog.h">