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")));
connect(importButton, &QPushButton::clicked, this, [this](bool) {
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"));
KConfigGroup game = config.group(QStringLiteral("Armoury"));
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++) {
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) {
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)));
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;
}

View file

@ -131,7 +131,7 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString
}
// TODO: index could be different
if (z >= 0 && z < definitionList.size()) {
if (z < definitionList.size()) {
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);
if (z >= 0 && z < definitionList.size()) {
if (z < definitionList.size()) {
auto definition = definitionList[z].toObject();
if (definition.contains(QLatin1String("converter"))
&& 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!!
size_t required_nodes = 1;
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;
}
@ -247,7 +247,7 @@ void exportModel(const QString &name, const physis_MDL &model, const physis_Skel
vertexBufferView.target = TINYGLTF_TARGET_ARRAY_BUFFER;
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];
// 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 int lodNumber = 0;
const int partNumber = lodPartNumber[0].toInt();
const int submeshNumber = lodPartNumber[1].toInt();
const uint32_t partNumber = lodPartNumber[0].toInt();
const uint32_t submeshNumber = lodPartNumber[1].toInt();
qInfo() << "- Part:" << partNumber;
qInfo() << "- Submesh:" << submeshNumber;
@ -177,7 +177,7 @@ void importModel(physis_MDL &existingModel, const QString &filename)
auto joints = model.skins[0].joints;
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) {
realBoneId = j;
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();
vertex_offset += submesh.vertices.size();

View file

@ -141,6 +141,8 @@ bool MDLPart::event(QEvent *event)
case QEvent::KeyRelease:
vkWindow->event(event);
break;
default:
break;
}
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));
// 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];
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];
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];
}
}
@ -383,6 +385,7 @@ void MDLPart::removeModel(const physis_MDL &mdl)
void MDLPart::setWireframe(bool wireframe)
{
Q_UNUSED(wireframe)
// renderer->wireframe = wireframe;
}

View file

@ -91,7 +91,7 @@ void MtrlPart::rebuild()
uint32_t value = 0;
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];
if (shaderKey.category == materialKey.id) {
@ -124,7 +124,7 @@ void MtrlPart::rebuild()
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];
QString name;
@ -207,7 +207,7 @@ void MtrlPart::rebuild()
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];
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()));
pageTabWidget->addTab(shaderTextEdit, name);
} catch (std::exception exception) {
} catch (const std::exception &exception) {
// TODO: display the error
Q_UNUSED(exception)
}
};

View file

@ -29,7 +29,7 @@ public:
virtual void resize() = 0;
/// 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()
virtual Texture &getCompositeTexture() = 0;

View file

@ -31,7 +31,7 @@ public:
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;
@ -57,8 +57,8 @@ private:
physis_Shader vertexShader, pixelShader;
};
void beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer, std::string_view passName);
void endPass(VkCommandBuffer commandBuffer, std::string_view passName);
void beginPass(VkCommandBuffer commandBuffer, std::string_view passName);
void endPass(VkCommandBuffer commandBuffer);
CachedPipeline &bindPipeline(VkCommandBuffer commandBuffer,
std::string_view passName,
physis_Shader &vertexShader,

View file

@ -30,7 +30,7 @@ public:
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;

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_EnvParameter = glm::vec4(1.0f);
const float wetnessMin = 0.0f;
/*const float wetnessMin = 0.0f;
const float wetnessMax = 1.0f;
const float maybeWetness = 0.0f;
// 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_Rim = glm::vec4(1.0f);
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_Rim = glm::vec4(1.0f);*/
m_device.copyToBuffer(g_InstanceParameter, &instanceParameter, sizeof(InstanceParameter));
}
@ -222,7 +222,7 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
ShaderTypeParameter shaderTypeParameter{};
m_device.copyToBuffer(g_ShaderTypeParameter, &g_ShaderTypeParameter, sizeof(ShaderTypeParameter));
m_device.copyToBuffer(g_ShaderTypeParameter, &shaderTypeParameter, sizeof(ShaderTypeParameter));
}
VkSamplerCreateInfo samplerInfo = {};
@ -249,8 +249,10 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
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
CameraParameter cameraParameter{};
@ -272,10 +274,10 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
m_device.copyToBuffer(g_CameraParameter, &cameraParameter, sizeof(CameraParameter));
int i = 0;
for (const auto pass : passes) {
for (const auto &pass : passes) {
// hardcoded to the known pass for now
if (pass == "PASS_G_OPAQUE" || pass == "PASS_Z_OPAQUE") {
beginPass(imageIndex, commandBuffer, pass);
beginPass(commandBuffer, pass);
for (auto &model : models) {
VkDebugUtilsLabelEXT labelExt{};
@ -308,7 +310,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
for (const auto &part : model.parts) {
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
}
@ -354,7 +356,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
auto id = renderMaterial.shaderPackage.material_keys[j].id;
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) {
materialKeys.push_back(renderMaterial.mat.shader_keys[z].value);
found = true;
@ -363,7 +365,6 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
// Fall back to default if needed
if (!found) {
auto value = 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);
}
endPass(commandBuffer, pass);
endPass(commandBuffer);
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") {
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
beginPass(imageIndex, commandBuffer, "PASS_LIGHTING_OPAQUE_VIEWPOSITION");
beginPass(commandBuffer, "PASS_LIGHTING_OPAQUE_VIEWPOSITION");
{
std::vector<uint32_t> systemKeys = {};
if (!m_dawntrailMode) {
@ -461,11 +462,11 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
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);
beginPass(imageIndex, commandBuffer, pass);
beginPass(commandBuffer, pass);
// then run the directionallighting shader
{
std::vector<uint32_t> systemKeys = {};
@ -516,7 +517,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
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,
@ -524,13 +525,13 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
} else if (pass == "PASS_COMPOSITE_SEMITRANSPARENCY") {
beginPass(imageIndex, commandBuffer, pass);
beginPass(commandBuffer, pass);
for (auto &model : models) {
for (const auto &part : model.parts) {
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
}
@ -575,7 +576,7 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
auto id = renderMaterial.shaderPackage.material_keys[j].id;
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) {
materialKeys.push_back(renderMaterial.mat.shader_keys[z].value);
found = true;
@ -584,7 +585,6 @@ void GameRenderer::render(VkCommandBuffer commandBuffer, uint32_t imageIndex, Ca
// Fall back to default if needed
if (!found) {
auto value = 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);
}
@ -647,14 +647,15 @@ void GameRenderer::resize()
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{};
labelExt.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
labelExt.pLabelName = passName.data();
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;
std::vector<VkRenderingAttachmentInfo> colorAttachments;
@ -665,7 +666,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -683,7 +685,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -697,7 +700,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -711,7 +715,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
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
{
VkRenderingAttachmentInfo attachmentInfo{VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO};
VkRenderingAttachmentInfo attachmentInfo{};
attachmentInfo.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
attachmentInfo.imageView = m_viewPositionBuffer.imageView;
attachmentInfo.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -741,7 +747,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -759,7 +766,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
@ -777,7 +785,8 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
// 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.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
attachmentInfo.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
@ -798,7 +807,7 @@ void GameRenderer::beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer,
vkCmdBeginRendering(commandBuffer, &renderingInfo);
}
void GameRenderer::endPass(VkCommandBuffer commandBuffer, std::string_view passName)
void GameRenderer::endPass(VkCommandBuffer commandBuffer)
{
vkCmdEndRendering(commandBuffer);
@ -1109,6 +1118,7 @@ GameRenderer::CachedPipeline &GameRenderer::bindPipeline(VkCommandBuffer command
m_cachedPipelines[hash] = CachedPipeline{.pipeline = pipeline,
.pipelineLayout = pipelineLayout,
.setLayouts = setLayouts,
.cachedDescriptors = {},
.requestedSets = requestedSets,
.vertexShader = vertexShader,
.pixelShader = pixelShader};
@ -1307,6 +1317,8 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
info->range = 655360;
}
} break;
default:
break;
}
}
j++;
@ -1383,8 +1395,7 @@ void GameRenderer::bindDescriptorSets(VkCommandBuffer commandBuffer,
const RenderMaterial *material,
std::string_view pass)
{
int i = 0;
for (auto setLayout : pipeline.setLayouts) {
for (size_t i = 0; i < pipeline.setLayouts.size(); i++) {
if (!pipeline.cachedDescriptors.count(i)) {
if (auto descriptor = createDescriptorFor(object, pipeline, i, material, pass); descriptor != VK_NULL_HANDLE) {
pipeline.cachedDescriptors[i] = descriptor;
@ -1395,7 +1406,5 @@ void GameRenderer::bindDescriptorSets(VkCommandBuffer commandBuffer,
// 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);
i++;
}
}

View file

@ -89,7 +89,8 @@ RenderManager::RenderManager(GameData *data)
debugCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
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;
const char *layers[] = {"VK_LAYER_KHRONOS_validation"};
@ -209,23 +210,27 @@ RenderManager::RenderManager(GameData *data)
enabledFeatures.shaderCullDistance = 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;
VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT unusedAttachmentsFeaturesExt{
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT};
VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT unusedAttachmentsFeaturesExt{};
unusedAttachmentsFeaturesExt.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT;
unusedAttachmentsFeaturesExt.dynamicRenderingUnusedAttachments = VK_TRUE;
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.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.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.dynamicRendering = 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
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 = {};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = m_renderPass;
@ -407,7 +412,7 @@ void RenderManager::render(const std::vector<DrawObject> &models)
updateCamera(camera);
m_renderer->render(commandBuffer, m_device->swapChain->currentFrame, camera, scene, models);
m_renderer->render(commandBuffer, camera, scene, models);
VkRenderPassBeginInfo renderPassInfo = {};
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);
}
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 = {};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = m_renderPass;

View file

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