1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-20 11:47:45 +00:00

Resolve more warnings

This commit is contained in:
Joshua Goins 2024-05-10 16:37:10 -04:00
parent a812b37413
commit f713f5c150
17 changed files with 91 additions and 75 deletions

View file

@ -140,11 +140,6 @@ SingleGearView::SingleGearView(GameData *data, FileCache &cache, QWidget *parent
importButton->setIcon(QIcon::fromTheme(QStringLiteral("document-import"))); importButton->setIcon(QIcon::fromTheme(QStringLiteral("document-import")));
connect(importButton, &QPushButton::clicked, this, [this](bool) { connect(importButton, &QPushButton::clicked, this, [this](bool) {
if (currentGear.has_value()) { if (currentGear.has_value()) {
// TODO: deduplicate
const auto sanitizeMdlPath = [](const QString &mdlPath) -> QString {
return QString(mdlPath).section(QLatin1Char('/'), -1).remove(QStringLiteral(".mdl"));
};
KConfig config(QStringLiteral("novusrc")); KConfig config(QStringLiteral("novusrc"));
KConfigGroup game = config.group(QStringLiteral("Armoury")); KConfigGroup game = config.group(QStringLiteral("Armoury"));
QString sourceDirectory = game.readEntry(QStringLiteral("SourcesOutputDirectory")); QString sourceDirectory = game.readEntry(QStringLiteral("SourcesOutputDirectory"));

2
extern/libphysis vendored

@ -1 +1 @@
Subproject commit dd9b685b32965501651a9d3e61219857940ab9bf Subproject commit 819501e8a03efab1284c79f4eca7d9229fb4cfa7

View file

@ -46,7 +46,7 @@ MapListWidget::MapListWidget(GameData *data, QWidget *parent)
for (uint32_t i = 0; i < exd.row_count; i++) { for (uint32_t i = 0; i < exd.row_count; i++) {
const char *id = exd.row_data[i].column_data[6].string._0; const char *id = exd.row_data[i].column_data[6].string._0;
int territoryTypeKey = exd.row_data[i].column_data[15].u_int16._0; const uint16_t territoryTypeKey = exd.row_data[i].column_data[15].u_int16._0;
if (territoryTypeKey > 0 && territoryTypeKey < territoryExd.row_count) { if (territoryTypeKey > 0 && territoryTypeKey < territoryExd.row_count) {
const char *bg = territoryExd.row_data[territoryTypeKey].column_data[1].string._0; const char *bg = territoryExd.row_data[territoryTypeKey].column_data[1].string._0;

View file

@ -103,7 +103,7 @@ void MainWindow::setupFileMenu(QMenu *menu)
m_detailsLayout->addRow(i18n("LOD #:"), new QLabel(QString::number(mdl.num_lod))); m_detailsLayout->addRow(i18n("LOD #:"), new QLabel(QString::number(mdl.num_lod)));
uint32_t triangleCount = 0; uint32_t triangleCount = 0;
for (int i = 0; i < mdl.lods[0].num_parts; i++) { for (uint32_t i = 0; i < mdl.lods[0].num_parts; i++) {
triangleCount += mdl.lods[0].parts[i].num_indices / 3; triangleCount += mdl.lods[0].parts[i].num_indices / 3;
} }

View file

@ -131,7 +131,7 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString
} }
// TODO: index could be different // TODO: index could be different
if (z >= 0 && z < definitionList.size()) { if (z < definitionList.size()) {
columnType = definitionList[z].toObject()[QLatin1String("name")].toString(); columnType = definitionList[z].toObject()[QLatin1String("name")].toString();
} }
@ -147,7 +147,7 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString
auto [columnString, columnRow] = getColumnData(columnData); auto [columnString, columnRow] = getColumnData(columnData);
if (z >= 0 && z < definitionList.size()) { if (z < definitionList.size()) {
auto definition = definitionList[z].toObject(); auto definition = definitionList[z].toObject();
if (definition.contains(QLatin1String("converter")) if (definition.contains(QLatin1String("converter"))
&& definition[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QLatin1String("link")) { && definition[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QLatin1String("link")) {

View file

@ -19,7 +19,7 @@ void exportModel(const QString &name, const physis_MDL &model, const physis_Skel
// TODO: just write the code better! dummy!! // TODO: just write the code better! dummy!!
size_t required_nodes = 1; size_t required_nodes = 1;
required_nodes += model.num_affected_bones; required_nodes += model.num_affected_bones;
for (int i = 0; i < lod.num_parts; i++) { for (uint32_t i = 0; i < lod.num_parts; i++) {
required_nodes += lod.parts[i].num_submeshes; required_nodes += lod.parts[i].num_submeshes;
} }
@ -247,7 +247,7 @@ void exportModel(const QString &name, const physis_MDL &model, const physis_Skel
vertexBufferView.target = TINYGLTF_TARGET_ARRAY_BUFFER; vertexBufferView.target = TINYGLTF_TARGET_ARRAY_BUFFER;
std::vector<Vertex> newVertices; std::vector<Vertex> newVertices;
for (int a = 0; a < lod.parts[i].num_vertices; a++) { for (uint32_t a = 0; a < lod.parts[i].num_vertices; a++) {
Vertex vertex = lod.parts[i].vertices[a]; Vertex vertex = lod.parts[i].vertices[a];
// Account for additional root bone // Account for additional root bone

View file

@ -49,8 +49,8 @@ void importModel(physis_MDL &existingModel, const QString &filename)
const QStringList lodPartNumber = parts[2].split(QLatin1Char('.')); const QStringList lodPartNumber = parts[2].split(QLatin1Char('.'));
const int lodNumber = 0; const int lodNumber = 0;
const int partNumber = lodPartNumber[0].toInt(); const uint32_t partNumber = lodPartNumber[0].toInt();
const int submeshNumber = lodPartNumber[1].toInt(); const uint32_t submeshNumber = lodPartNumber[1].toInt();
qInfo() << "- Part:" << partNumber; qInfo() << "- Part:" << partNumber;
qInfo() << "- Submesh:" << submeshNumber; qInfo() << "- Submesh:" << submeshNumber;
@ -177,7 +177,7 @@ void importModel(physis_MDL &existingModel, const QString &filename)
auto joints = model.skins[0].joints; auto joints = model.skins[0].joints;
int realBoneId = 0; int realBoneId = 0;
for (int j = 0; j < existingModel.num_affected_bones; j++) { for (uint32_t j = 0; j < existingModel.num_affected_bones; j++) {
if (strcmp(existingModel.affected_bone_names[j], model.nodes[joints[originalBoneId]].name.c_str()) == 0) { if (strcmp(existingModel.affected_bone_names[j], model.nodes[joints[originalBoneId]].name.c_str()) == 0) {
realBoneId = j; realBoneId = j;
break; break;
@ -227,7 +227,8 @@ void importModel(physis_MDL &existingModel, const QString &filename)
} }
} }
newSubmeshes.push_back({.index_count = static_cast<uint32_t>(submesh.indices.size()), .index_offset = static_cast<uint32_t>(index_offset)}); newSubmeshes.push_back(
{.submesh_index = 0, .index_count = static_cast<uint32_t>(submesh.indices.size()), .index_offset = static_cast<uint32_t>(index_offset)});
index_offset += submesh.indices.size(); index_offset += submesh.indices.size();
vertex_offset += submesh.vertices.size(); vertex_offset += submesh.vertices.size();

View file

@ -141,6 +141,8 @@ bool MDLPart::event(QEvent *event)
case QEvent::KeyRelease: case QEvent::KeyRelease:
vkWindow->event(event); vkWindow->event(event);
break; break;
default:
break;
} }
return QWidget::event(event); return QWidget::event(event);
} }
@ -229,14 +231,14 @@ RenderMaterial MDLPart::createMaterial(const physis_Material &material)
std::vector<float> buffer(newMaterial.shaderPackage.material_parameters_size / sizeof(float)); std::vector<float> buffer(newMaterial.shaderPackage.material_parameters_size / sizeof(float));
// copy the material data // copy the material data
for (int i = 0; i < newMaterial.shaderPackage.num_material_parameters; i++) { for (uint32_t i = 0; i < newMaterial.shaderPackage.num_material_parameters; i++) {
auto param = newMaterial.shaderPackage.material_parameters[i]; auto param = newMaterial.shaderPackage.material_parameters[i];
for (int j = 0; j < newMaterial.mat.num_constants; j++) { for (uint32_t j = 0; j < newMaterial.mat.num_constants; j++) {
auto constant = newMaterial.mat.constants[j]; auto constant = newMaterial.mat.constants[j];
if (constant.id == param.id) { if (constant.id == param.id) {
for (int z = 0; z < constant.num_values; z++) { for (uint32_t z = 0; z < constant.num_values; z++) {
buffer[(param.byte_offset / sizeof(float)) + z] = constant.values[z]; buffer[(param.byte_offset / sizeof(float)) + z] = constant.values[z];
} }
} }
@ -383,6 +385,7 @@ void MDLPart::removeModel(const physis_MDL &mdl)
void MDLPart::setWireframe(bool wireframe) void MDLPart::setWireframe(bool wireframe)
{ {
Q_UNUSED(wireframe)
// renderer->wireframe = wireframe; // renderer->wireframe = wireframe;
} }

View file

@ -91,7 +91,7 @@ void MtrlPart::rebuild()
uint32_t value = 0; uint32_t value = 0;
bool found = false; bool found = false;
for (int j = 0; j < m_material.num_shader_keys; j++) { for (uint32_t j = 0; j < m_material.num_shader_keys; j++) {
auto shaderKey = m_material.shader_keys[j]; auto shaderKey = m_material.shader_keys[j];
if (shaderKey.category == materialKey.id) { if (shaderKey.category == materialKey.id) {
@ -124,7 +124,7 @@ void MtrlPart::rebuild()
child->widget()->deleteLater(); child->widget()->deleteLater();
} }
for (int i = 0; i < m_material.num_samplers; i++) { for (uint32_t i = 0; i < m_material.num_samplers; i++) {
const auto sampler = m_material.samplers[i]; const auto sampler = m_material.samplers[i];
QString name; QString name;
@ -207,7 +207,7 @@ void MtrlPart::rebuild()
child->widget()->deleteLater(); child->widget()->deleteLater();
} }
for (int i = 0; i < m_material.num_constants; i++) { for (uint32_t i = 0; i < m_material.num_constants; i++) {
const auto constant = m_material.constants[i]; const auto constant = m_material.constants[i];
QString name = i18n("Unknown %1", QString::number(constant.id)); QString name = i18n("Unknown %1", QString::number(constant.id));

View file

@ -50,8 +50,9 @@ void SHPKPart::load(physis_Buffer buffer)
shaderTextEdit->setText(QLatin1String(glsl.compile().c_str())); shaderTextEdit->setText(QLatin1String(glsl.compile().c_str()));
pageTabWidget->addTab(shaderTextEdit, name); pageTabWidget->addTab(shaderTextEdit, name);
} catch (std::exception exception) { } catch (const std::exception &exception) {
// TODO: display the error // TODO: display the error
Q_UNUSED(exception)
} }
}; };

View file

@ -29,7 +29,7 @@ public:
virtual void resize() = 0; virtual void resize() = 0;
/// Render a frame into @p commandBuffer. @p currentFrame is the same value as SwapChain::currentFrame for convenience. /// Render a frame into @p commandBuffer. @p currentFrame is the same value as SwapChain::currentFrame for convenience.
virtual void render(VkCommandBuffer commandBuffer, uint32_t currentFrame, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) = 0; virtual void render(VkCommandBuffer commandBuffer, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) = 0;
/// The final composite texture that is drawn into with render() /// The final composite texture that is drawn into with render()
virtual Texture &getCompositeTexture() = 0; virtual Texture &getCompositeTexture() = 0;

View file

@ -31,7 +31,7 @@ public:
void resize() override; void resize() override;
void render(VkCommandBuffer commandBuffer, uint32_t currentFrame, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) override; void render(VkCommandBuffer commandBuffer, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) override;
Texture &getCompositeTexture() override; Texture &getCompositeTexture() override;
@ -57,8 +57,8 @@ private:
physis_Shader vertexShader, pixelShader; physis_Shader vertexShader, pixelShader;
}; };
void beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer, std::string_view passName); void beginPass(VkCommandBuffer commandBuffer, std::string_view passName);
void endPass(VkCommandBuffer commandBuffer, std::string_view passName); void endPass(VkCommandBuffer commandBuffer);
CachedPipeline &bindPipeline(VkCommandBuffer commandBuffer, CachedPipeline &bindPipeline(VkCommandBuffer commandBuffer,
std::string_view passName, std::string_view passName,
physis_Shader &vertexShader, physis_Shader &vertexShader,

View file

@ -30,7 +30,7 @@ public:
void resize() override; void resize() override;
void render(VkCommandBuffer commandBuffer, uint32_t currentFrame, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) override; void render(VkCommandBuffer commandBuffer, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) override;
Texture &getCompositeTexture() override; Texture &getCompositeTexture() override;

View file

@ -96,13 +96,13 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
instanceParameter.g_InstanceParameter.m_MulColor = glm::vec4(1.0f); instanceParameter.g_InstanceParameter.m_MulColor = glm::vec4(1.0f);
instanceParameter.g_InstanceParameter.m_EnvParameter = glm::vec4(1.0f); instanceParameter.g_InstanceParameter.m_EnvParameter = glm::vec4(1.0f);
const float wetnessMin = 0.0f; /*const float wetnessMin = 0.0f;
const float wetnessMax = 1.0f; const float wetnessMax = 1.0f;
const float maybeWetness = 0.0f; const float maybeWetness = 0.0f;
// instanceParameter.g_InstanceParameter.m_Wetness = {maybeWetness, 2.0f, wetnessMin, wetnessMax}; instanceParameter.g_InstanceParameter.m_Wetness = {maybeWetness, 2.0f, wetnessMin, wetnessMax};
// instanceParameter.g_InstanceParameter.m_CameraLight.m_DiffuseSpecular = glm::vec4(1.0f); instanceParameter.g_InstanceParameter.m_CameraLight.m_DiffuseSpecular = glm::vec4(1.0f);
// instanceParameter.g_InstanceParameter.m_CameraLight.m_Rim = glm::vec4(1.0f); instanceParameter.g_InstanceParameter.m_CameraLight.m_Rim = glm::vec4(1.0f);*/
m_device.copyToBuffer(g_InstanceParameter, &instanceParameter, sizeof(InstanceParameter)); m_device.copyToBuffer(g_InstanceParameter, &instanceParameter, sizeof(InstanceParameter));
} }
@ -222,7 +222,7 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
ShaderTypeParameter shaderTypeParameter{}; ShaderTypeParameter shaderTypeParameter{};
m_device.copyToBuffer(g_ShaderTypeParameter, &g_ShaderTypeParameter, sizeof(ShaderTypeParameter)); m_device.copyToBuffer(g_ShaderTypeParameter, &shaderTypeParameter, sizeof(ShaderTypeParameter));
} }
VkSamplerCreateInfo samplerInfo = {}; VkSamplerCreateInfo samplerInfo = {};
@ -249,8 +249,10 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
createImageResources(); createImageResources();
} }
void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) void GameRenderer::render(VkCommandBuffer commandBuffer, Camera &camera, Scene &scene, const std::vector<DrawObject> &models)
{ {
Q_UNUSED(scene)
// TODO: this shouldn't be here // TODO: this shouldn't be here
CameraParameter cameraParameter{}; CameraParameter cameraParameter{};
@ -272,10 +274,10 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
m_device.copyToBuffer(g_CameraParameter, &cameraParameter, sizeof(CameraParameter)); m_device.copyToBuffer(g_CameraParameter, &cameraParameter, sizeof(CameraParameter));
int i = 0; int i = 0;
for (const auto pass : passes) { for (const auto &pass : passes) {
// hardcoded to the known pass for now // hardcoded to the known pass for now
if (pass == "PASS_G_OPAQUE" || pass == "PASS_Z_OPAQUE") { if (pass == "PASS_G_OPAQUE" || pass == "PASS_Z_OPAQUE") {
beginPass(imageIndex, commandBuffer, pass); beginPass(commandBuffer, pass);
for (auto &model : models) { for (auto &model : models) {
VkDebugUtilsLabelEXT labelExt{}; VkDebugUtilsLabelEXT labelExt{};
@ -308,7 +310,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
for (const auto &part : model.parts) { for (const auto &part : model.parts) {
RenderMaterial renderMaterial = model.materials[part.materialIndex]; RenderMaterial renderMaterial = model.materials[part.materialIndex];
if (part.materialIndex + 1 > model.materials.size()) { if (static_cast<size_t>(part.materialIndex + 1) > model.materials.size()) {
renderMaterial = model.materials[0]; // TODO: better fallback renderMaterial = model.materials[0]; // TODO: better fallback
} }
@ -354,7 +356,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
auto id = renderMaterial.shaderPackage.material_keys[j].id; auto id = renderMaterial.shaderPackage.material_keys[j].id;
bool found = false; bool found = false;
for (int z = 0; z < renderMaterial.mat.num_shader_keys; z++) { for (uint32_t z = 0; z < renderMaterial.mat.num_shader_keys; z++) {
if (renderMaterial.mat.shader_keys[z].category == id) { if (renderMaterial.mat.shader_keys[z].category == id) {
materialKeys.push_back(renderMaterial.mat.shader_keys[z].value); materialKeys.push_back(renderMaterial.mat.shader_keys[z].value);
found = true; found = true;
@ -363,7 +365,6 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
// Fall back to default if needed // Fall back to default if needed
if (!found) { if (!found) {
auto value = renderMaterial.shaderPackage.material_keys[j].default_value;
materialKeys.push_back(renderMaterial.shaderPackage.material_keys[j].default_value); materialKeys.push_back(renderMaterial.shaderPackage.material_keys[j].default_value);
} }
} }
@ -409,14 +410,14 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
m_device.endDebugMarker(commandBuffer); m_device.endDebugMarker(commandBuffer);
} }
endPass(commandBuffer, pass); endPass(commandBuffer);
m_device.transitionTexture(commandBuffer, m_depthBuffer, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_device.transitionTexture(commandBuffer, m_depthBuffer, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
} else if (pass == "PASS_LIGHTING_OPAQUE") { } else if (pass == "PASS_LIGHTING_OPAQUE") {
m_device.transitionTexture(commandBuffer, m_normalGBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_device.transitionTexture(commandBuffer, m_normalGBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
// first we need to generate the view positions with createviewpositions // first we need to generate the view positions with createviewpositions
beginPass(imageIndex, commandBuffer, "PASS_LIGHTING_OPAQUE_VIEWPOSITION"); beginPass(commandBuffer, "PASS_LIGHTING_OPAQUE_VIEWPOSITION");
{ {
std::vector<uint32_t> systemKeys = {}; std::vector<uint32_t> systemKeys = {};
if (!m_dawntrailMode) { if (!m_dawntrailMode) {
@ -461,11 +462,11 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
vkCmdDraw(commandBuffer, 6, 1, 0, 0); vkCmdDraw(commandBuffer, 6, 1, 0, 0);
} }
} }
endPass(commandBuffer, pass); endPass(commandBuffer);
m_device.transitionTexture(commandBuffer, m_viewPositionBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_device.transitionTexture(commandBuffer, m_viewPositionBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
beginPass(imageIndex, commandBuffer, pass); beginPass(commandBuffer, pass);
// then run the directionallighting shader // then run the directionallighting shader
{ {
std::vector<uint32_t> systemKeys = {}; std::vector<uint32_t> systemKeys = {};
@ -516,7 +517,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
vkCmdDraw(commandBuffer, 6, 1, 0, 0); vkCmdDraw(commandBuffer, 6, 1, 0, 0);
} }
} }
endPass(commandBuffer, pass); endPass(commandBuffer);
m_device.transitionTexture(commandBuffer, m_lightBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_device.transitionTexture(commandBuffer, m_lightBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
m_device.transitionTexture(commandBuffer, m_device.transitionTexture(commandBuffer,
@ -524,13 +525,13 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
} else if (pass == "PASS_COMPOSITE_SEMITRANSPARENCY") { } else if (pass == "PASS_COMPOSITE_SEMITRANSPARENCY") {
beginPass(imageIndex, commandBuffer, pass); beginPass(commandBuffer, pass);
for (auto &model : models) { for (auto &model : models) {
for (const auto &part : model.parts) { for (const auto &part : model.parts) {
RenderMaterial renderMaterial = model.materials[part.materialIndex]; RenderMaterial renderMaterial = model.materials[part.materialIndex];
if (part.materialIndex + 1 > model.materials.size()) { if (static_cast<size_t>(part.materialIndex + 1) > model.materials.size()) {
renderMaterial = model.materials[0]; // TODO: better fallback renderMaterial = model.materials[0]; // TODO: better fallback
} }
@ -575,7 +576,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
auto id = renderMaterial.shaderPackage.material_keys[j].id; auto id = renderMaterial.shaderPackage.material_keys[j].id;
bool found = false; bool found = false;
for (int z = 0; z < renderMaterial.mat.num_shader_keys; z++) { for (uint32_t z = 0; z < renderMaterial.mat.num_shader_keys; z++) {
if (renderMaterial.mat.shader_keys[z].category == id) { if (renderMaterial.mat.shader_keys[z].category == id) {
materialKeys.push_back(renderMaterial.mat.shader_keys[z].value); materialKeys.push_back(renderMaterial.mat.shader_keys[z].value);
found = true; found = true;
@ -584,7 +585,6 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
// Fall back to default if needed // Fall back to default if needed
if (!found) { if (!found) {
auto value = renderMaterial.shaderPackage.material_keys[j].default_value;
materialKeys.push_back(renderMaterial.shaderPackage.material_keys[j].default_value); materialKeys.push_back(renderMaterial.shaderPackage.material_keys[j].default_value);
} }
} }
@ -628,7 +628,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
} }
} }
endPass(commandBuffer, pass); endPass(commandBuffer);
m_device.transitionTexture(commandBuffer, m_compositeBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); m_device.transitionTexture(commandBuffer, m_compositeBuffer, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
} }
@ -647,14 +647,15 @@ void GameRenderer::resize()
createImageResources(); createImageResources();
} }
void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer, const std::string_view passName) void GameRenderer::beginPass(VkCommandBuffer commandBuffer, const std::string_view passName)
{ {
VkDebugUtilsLabelEXT labelExt{}; VkDebugUtilsLabelEXT labelExt{};
labelExt.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; labelExt.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
labelExt.pLabelName = passName.data(); labelExt.pLabelName = passName.data();
m_device.beginDebugMarker(commandBuffer, labelExt); m_device.beginDebugMarker(commandBuffer, labelExt);
VkRenderingInfo renderingInfo{VK_STRUCTURE_TYPE_RENDERING_INFO}; VkRenderingInfo renderingInfo{};
renderingInfo.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
renderingInfo.renderArea.extent = m_device.swapChain->extent; renderingInfo.renderArea.extent = m_device.swapChain->extent;
std::vector<VkRenderingAttachmentInfo> colorAttachments; std::vector<VkRenderingAttachmentInfo> colorAttachments;
@ -665,7 +666,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// normals, it seems like // normals, it seems like
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_normalGBuffer.imageView; attachmentInfo.imageView = m_normalGBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -683,7 +685,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// depth // depth
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_depthBuffer.imageView; attachmentInfo.imageView = m_depthBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL; attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -697,7 +700,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// diffuse // diffuse
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_lightBuffer.imageView; attachmentInfo.imageView = m_lightBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -711,7 +715,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// specular? // specular?
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_lightSpecularBuffer.imageView; attachmentInfo.imageView = m_lightSpecularBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -725,7 +730,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// TODO: Hack we should not be using a special pass for this, we should just design our API better // TODO: Hack we should not be using a special pass for this, we should just design our API better
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_viewPositionBuffer.imageView; attachmentInfo.imageView = m_viewPositionBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -741,7 +747,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// normals, it seems like // normals, it seems like
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_ZBuffer.imageView; attachmentInfo.imageView = m_ZBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -759,7 +766,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// composite // composite
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_compositeBuffer.imageView; attachmentInfo.imageView = m_compositeBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -777,7 +785,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// depth buffer for depth testing // depth buffer for depth testing
{ {
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO}; VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_depthBuffer.imageView; attachmentInfo.imageView = m_depthBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL; attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
@ -798,7 +807,7 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
vkCmdBeginRendering(commandBuffer, &renderingInfo); vkCmdBeginRendering(commandBuffer, &renderingInfo);
} }
void GameRenderer::endPass(VkCommandBuffer commandBuffer, std::string_view passName) void GameRenderer::endPass(VkCommandBuffer commandBuffer)
{ {
vkCmdEndRendering(commandBuffer); vkCmdEndRendering(commandBuffer);
@ -1109,6 +1118,7 @@ GameRenderer::CachedPipeline &GameRenderer::bindPipeline(VkCommandBuffer command
m_cachedPipelines[hash] = CachedPipeline{.pipeline = pipeline, m_cachedPipelines[hash] = CachedPipeline{.pipeline = pipeline,
.pipelineLayout = pipelineLayout, .pipelineLayout = pipelineLayout,
.setLayouts = setLayouts, .setLayouts = setLayouts,
.cachedDescriptors = {},
.requestedSets = requestedSets, .requestedSets = requestedSets,
.vertexShader = vertexShader, .vertexShader = vertexShader,
.pixelShader = pixelShader}; .pixelShader = pixelShader};
@ -1307,6 +1317,8 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
info->range = 655360; info->range = 655360;
} }
} break; } break;
default:
break;
} }
} }
j++; j++;
@ -1383,8 +1395,7 @@ void GameRenderer::bindDescriptorSets(VkCommandBuffer commandBuffer,
const RenderMaterial *material, const RenderMaterial *material,
std::string_view pass) std::string_view pass)
{ {
int i = 0; for (size_t i = 0; i < pipeline.setLayouts.size(); i++) {
for (auto setLayout : pipeline.setLayouts) {
if (!pipeline.cachedDescriptors.count(i)) { if (!pipeline.cachedDescriptors.count(i)) {
if (auto descriptor = createDescriptorFor(object, pipeline, i, material, pass); descriptor != VK_NULL_HANDLE) { if (auto descriptor = createDescriptorFor(object, pipeline, i, material, pass); descriptor != VK_NULL_HANDLE) {
pipeline.cachedDescriptors[i] = descriptor; pipeline.cachedDescriptors[i] = descriptor;
@ -1395,7 +1406,5 @@ void GameRenderer::bindDescriptorSets(VkCommandBuffer commandBuffer,
// TODO: we can pass all descriptors in one function call // TODO: we can pass all descriptors in one function call
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.pipelineLayout, i, 1, &pipeline.cachedDescriptors[i], 0, nullptr); vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.pipelineLayout, i, 1, &pipeline.cachedDescriptors[i], 0, nullptr);
i++;
} }
} }

View file

@ -89,7 +89,8 @@ RenderManager::RenderManager(GameData *data)
debugCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; debugCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
debugCreateInfo.pfnUserCallback = DebugCallback; debugCreateInfo.pfnUserCallback = DebugCallback;
VkApplicationInfo applicationInfo = {VK_STRUCTURE_TYPE_APPLICATION_INFO}; VkApplicationInfo applicationInfo = {};
applicationInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
applicationInfo.apiVersion = VK_API_VERSION_1_3; applicationInfo.apiVersion = VK_API_VERSION_1_3;
const char *layers[] = {"VK_LAYER_KHRONOS_validation"}; const char *layers[] = {"VK_LAYER_KHRONOS_validation"};
@ -209,23 +210,27 @@ RenderManager::RenderManager(GameData *data)
enabledFeatures.shaderCullDistance = VK_TRUE; enabledFeatures.shaderCullDistance = VK_TRUE;
enabledFeatures.fillModeNonSolid = VK_TRUE; enabledFeatures.fillModeNonSolid = VK_TRUE;
VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR localReadFeaturesKhr{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR}; VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR localReadFeaturesKhr{};
localReadFeaturesKhr.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR;
localReadFeaturesKhr.dynamicRenderingLocalRead = VK_TRUE; localReadFeaturesKhr.dynamicRenderingLocalRead = VK_TRUE;
VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT unusedAttachmentsFeaturesExt{ VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT unusedAttachmentsFeaturesExt{};
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT}; unusedAttachmentsFeaturesExt.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT;
unusedAttachmentsFeaturesExt.dynamicRenderingUnusedAttachments = VK_TRUE; unusedAttachmentsFeaturesExt.dynamicRenderingUnusedAttachments = VK_TRUE;
unusedAttachmentsFeaturesExt.pNext = &localReadFeaturesKhr; unusedAttachmentsFeaturesExt.pNext = &localReadFeaturesKhr;
VkPhysicalDeviceVulkan11Features enabled11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES}; VkPhysicalDeviceVulkan11Features enabled11Features{};
enabled11Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
enabled11Features.shaderDrawParameters = VK_TRUE; enabled11Features.shaderDrawParameters = VK_TRUE;
enabled11Features.pNext = &unusedAttachmentsFeaturesExt; enabled11Features.pNext = &unusedAttachmentsFeaturesExt;
VkPhysicalDeviceVulkan12Features enabled12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES}; VkPhysicalDeviceVulkan12Features enabled12Features{};
enabled12Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
enabled12Features.vulkanMemoryModel = VK_TRUE; enabled12Features.vulkanMemoryModel = VK_TRUE;
enabled12Features.pNext = &enabled11Features; enabled12Features.pNext = &enabled11Features;
VkPhysicalDeviceVulkan13Features enabled13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan13Features enabled13Features{};
enabled13Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
enabled13Features.shaderDemoteToHelperInvocation = VK_TRUE; enabled13Features.shaderDemoteToHelperInvocation = VK_TRUE;
enabled13Features.dynamicRendering = VK_TRUE; enabled13Features.dynamicRendering = VK_TRUE;
enabled13Features.synchronization2 = VK_TRUE; enabled13Features.synchronization2 = VK_TRUE;
@ -348,7 +353,7 @@ bool RenderManager::initSwapchain(VkSurfaceKHR surface, int width, int height)
initBlitPipeline(); // this creates a desc set for the renderer's offscreen texture. need to make sure we regen it initBlitPipeline(); // this creates a desc set for the renderer's offscreen texture. need to make sure we regen it
m_framebuffers.resize(m_device->swapChain->swapchainImages.size()); m_framebuffers.resize(m_device->swapChain->swapchainImages.size());
for (int i = 0; i < m_device->swapChain->swapchainImages.size(); i++) { for (size_t i = 0; i < m_device->swapChain->swapchainImages.size(); i++) {
VkFramebufferCreateInfo framebufferInfo = {}; VkFramebufferCreateInfo framebufferInfo = {};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = m_renderPass; framebufferInfo.renderPass = m_renderPass;
@ -407,7 +412,7 @@ void RenderManager::render(const std::vector<DrawObject> &models)
updateCamera(camera); updateCamera(camera);
m_renderer->render(commandBuffer, m_device->swapChain->currentFrame, camera, scene, models); m_renderer->render(commandBuffer, camera, scene, models);
VkRenderPassBeginInfo renderPassInfo = {}; VkRenderPassBeginInfo renderPassInfo = {};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;

View file

@ -48,8 +48,10 @@ void SimpleRenderer::resize()
vkCreateFramebuffer(m_device.device, &framebufferInfo, nullptr, &m_framebuffer); vkCreateFramebuffer(m_device.device, &framebufferInfo, nullptr, &m_framebuffer);
} }
void SimpleRenderer::render(VkCommandBuffer commandBuffer, uint32_t currentFrame, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) void SimpleRenderer::render(VkCommandBuffer commandBuffer, Camera &camera, Scene &scene, const std::vector<DrawObject> &models)
{ {
Q_UNUSED(scene)
VkRenderPassBeginInfo renderPassInfo = {}; VkRenderPassBeginInfo renderPassInfo = {};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = m_renderPass; renderPassInfo.renderPass = m_renderPass;

View file

@ -12,8 +12,8 @@
FileTreeModel::FileTreeModel(HashDatabase &database, bool showUnknown, const QString &gamePath, GameData *data, QObject *parent) FileTreeModel::FileTreeModel(HashDatabase &database, bool showUnknown, const QString &gamePath, GameData *data, QObject *parent)
: QAbstractItemModel(parent) : QAbstractItemModel(parent)
, gameData(data) , gameData(data)
, m_showUnknown(showUnknown)
, m_database(database) , m_database(database)
, m_showUnknown(showUnknown)
{ {
rootItem = new TreeInformation(); rootItem = new TreeInformation();
rootItem->type = TreeType::Root; rootItem->type = TreeType::Root;