MCPcopy Create free account
hub / github.com/baldurk/renderdoc / SaveShaderFile

Method SaveShaderFile

qrenderdoc/Windows/PipelineState/PipelineStateViewer.cpp:1484–1537  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1482}
1483
1484bool PipelineStateViewer::SaveShaderFile(const ShaderReflection *shader)
1485{
1486 if(!shader)
1487 return false;
1488
1489 QString filter;
1490
1491 switch(shader->encoding)
1492 {
1493 case ShaderEncoding::DXBC: filter = tr("DXBC Shader files (*.dxbc)"); break;
1494 case ShaderEncoding::HLSL: filter = tr("HLSL files (*.hlsl)"); break;
1495 case ShaderEncoding::GLSL: filter = tr("GLSL files (*.glsl)"); break;
1496 case ShaderEncoding::SPIRV:
1497 case ShaderEncoding::OpenGLSPIRV: filter = tr("SPIR-V files (*.spv)"); break;
1498 case ShaderEncoding::SPIRVAsm:
1499 case ShaderEncoding::OpenGLSPIRVAsm: filter = tr("SPIR-V assembly files (*.spvasm)"); break;
1500 case ShaderEncoding::DXIL: filter = tr("DXIL Shader files (*.dxbc)"); break;
1501 case ShaderEncoding::Slang: filter = tr("Slang Shader files (*.slang)"); break;
1502 case ShaderEncoding::Unknown:
1503 case ShaderEncoding::Count: filter = tr("All files (*.*)"); break;
1504 }
1505
1506 QString filename = RDDialog::getSaveFileName(this, tr("Save Shader As"), QString(), filter);
1507
1508 if(!filename.isEmpty())
1509 {
1510 ANALYTIC_SET(Export.Shader, true);
1511
1512 QDir dirinfo = QFileInfo(filename).dir();
1513 if(dirinfo.exists())
1514 {
1515 QFile f(filename);
1516 if(f.open(QIODevice::WriteOnly | QIODevice::Truncate))
1517 {
1518 f.write((const char *)shader->rawBytes.data(), (qint64)shader->rawBytes.size());
1519 }
1520 else
1521 {
1522 RDDialog::critical(
1523 this, tr("Error saving shader"),
1524 tr("Couldn't open path %1 for write.\n%2").arg(filename).arg(f.errorString()));
1525 return false;
1526 }
1527 }
1528 else
1529 {
1530 RDDialog::critical(this, tr("Invalid directory"),
1531 tr("Cannot find target directory to save to"));
1532 return false;
1533 }
1534 }
1535
1536 return true;
1537}
1538
1539void PipelineStateViewer::SelectPipelineStage(PipelineStage stage)
1540{

Callers 5

on_refresh_clickedMethod · 0.80
shaderSave_clickedMethod · 0.80
shaderSave_clickedMethod · 0.80
shaderSave_clickedMethod · 0.80
shaderSave_clickedMethod · 0.80

Calls 12

criticalFunction · 0.85
existsMethod · 0.80
errorStringMethod · 0.80
trFunction · 0.50
QStringFunction · 0.50
QFileInfoClass · 0.50
isEmptyMethod · 0.45
openMethod · 0.45
writeMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
argMethod · 0.45

Tested by

no test coverage detected