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:
parent
a812b37413
commit
f713f5c150
17 changed files with 91 additions and 75 deletions
|
@ -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
2
extern/libphysis
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit dd9b685b32965501651a9d3e61219857940ab9bf
|
Subproject commit 819501e8a03efab1284c79f4eca7d9229fb4cfa7
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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")) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue