2024-04-21 17:35:48 -04:00
|
|
|
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
#include <string_view>
|
|
|
|
|
|
|
|
#include <glm/glm.hpp>
|
|
|
|
#include <physis.hpp>
|
|
|
|
#include <spirv.hpp>
|
|
|
|
#include <spirv_cross.hpp>
|
|
|
|
#include <spirv_glsl.hpp>
|
|
|
|
#include <vulkan/vulkan.h>
|
|
|
|
|
|
|
|
#include "baserenderer.h"
|
|
|
|
#include "buffer.h"
|
2024-04-21 19:45:21 -04:00
|
|
|
#include "drawobject.h"
|
2024-05-10 16:14:33 -04:00
|
|
|
#include "shadermanager.h"
|
2024-04-21 17:35:48 -04:00
|
|
|
#include "shaderstructs.h"
|
|
|
|
#include "texture.h"
|
|
|
|
|
|
|
|
class Device;
|
|
|
|
struct DrawObject;
|
|
|
|
|
|
|
|
/// Performs rendering by using the game's existing shaders.
|
|
|
|
class GameRenderer : public BaseRenderer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
GameRenderer(Device &device, GameData *data);
|
|
|
|
|
|
|
|
void resize() override;
|
|
|
|
|
2024-04-27 21:11:53 -04:00
|
|
|
void render(VkCommandBuffer commandBuffer, uint32_t currentFrame, Camera &camera, Scene &scene, const std::vector<DrawObject> &models) override;
|
2024-04-21 17:35:48 -04:00
|
|
|
|
|
|
|
Texture &getCompositeTexture() override;
|
|
|
|
|
|
|
|
private:
|
|
|
|
struct RequestedBinding {
|
|
|
|
VkDescriptorType type;
|
|
|
|
VkShaderStageFlags stageFlags;
|
|
|
|
bool used = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct RequestedSet {
|
|
|
|
bool used = true;
|
|
|
|
VkDescriptorSetLayout layout = VK_NULL_HANDLE;
|
|
|
|
std::vector<RequestedBinding> bindings;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CachedPipeline {
|
|
|
|
VkPipeline pipeline = VK_NULL_HANDLE;
|
|
|
|
VkPipelineLayout pipelineLayout = VK_NULL_HANDLE;
|
|
|
|
std::vector<VkDescriptorSetLayout> setLayouts;
|
|
|
|
std::map<uint64_t, VkDescriptorSet> cachedDescriptors;
|
|
|
|
std::vector<RequestedSet> requestedSets;
|
|
|
|
physis_Shader vertexShader, pixelShader;
|
|
|
|
};
|
|
|
|
|
2024-04-21 18:49:48 -04:00
|
|
|
void beginPass(uint32_t imageIndex, VkCommandBuffer commandBuffer, std::string_view passName);
|
|
|
|
void endPass(VkCommandBuffer commandBuffer, std::string_view passName);
|
2024-05-10 15:53:32 -04:00
|
|
|
CachedPipeline &bindPipeline(VkCommandBuffer commandBuffer,
|
|
|
|
std::string_view passName,
|
|
|
|
physis_Shader &vertexShader,
|
|
|
|
physis_Shader &pixelShader,
|
|
|
|
std::string_view shaderName);
|
2024-04-21 18:49:48 -04:00
|
|
|
spirv_cross::CompilerGLSL getShaderModuleResources(const physis_Shader &shader);
|
|
|
|
|
|
|
|
void createImageResources();
|
|
|
|
|
|
|
|
physis_SHPK directionalLightningShpk;
|
|
|
|
physis_SHPK createViewPositionShpk;
|
2024-05-10 15:53:32 -04:00
|
|
|
physis_SHPK backgroundShpk;
|
2024-04-21 18:49:48 -04:00
|
|
|
|
2024-04-21 17:35:48 -04:00
|
|
|
// combined vertex + pixel code length
|
|
|
|
std::unordered_map<uint32_t, CachedPipeline> m_cachedPipelines;
|
|
|
|
|
|
|
|
Device &m_device;
|
|
|
|
GameData *m_data = nullptr;
|
2024-05-10 16:14:33 -04:00
|
|
|
ShaderManager m_shaderManager;
|
2024-04-21 17:35:48 -04:00
|
|
|
|
2024-04-27 15:05:36 -04:00
|
|
|
VkDescriptorSet
|
|
|
|
createDescriptorFor(const DrawObject *object, const CachedPipeline &cachedPipeline, int i, const RenderMaterial *material, std::string_view pass);
|
|
|
|
void bindDescriptorSets(VkCommandBuffer commandBuffer,
|
|
|
|
CachedPipeline &pipeline,
|
|
|
|
const DrawObject *object,
|
|
|
|
const RenderMaterial *material,
|
|
|
|
std::string_view pass);
|
2024-04-21 17:35:48 -04:00
|
|
|
|
|
|
|
Buffer g_CameraParameter;
|
|
|
|
Buffer g_InstanceParameter;
|
|
|
|
Buffer g_ModelParameter;
|
2024-04-27 15:05:36 -04:00
|
|
|
Buffer g_TransparencyMaterialParameter;
|
2024-04-21 17:35:48 -04:00
|
|
|
Buffer g_CommonParameter;
|
|
|
|
Buffer g_LightParam;
|
2024-04-21 19:45:21 -04:00
|
|
|
Buffer g_SceneParameter;
|
|
|
|
Buffer g_CustomizeParameter;
|
2024-04-27 15:05:36 -04:00
|
|
|
Buffer g_MaterialParameterDynamic;
|
|
|
|
Buffer g_DecalColor;
|
|
|
|
Buffer g_AmbientParam;
|
2024-04-28 07:09:58 -04:00
|
|
|
Buffer g_ShaderTypeParameter;
|
2024-04-21 17:35:48 -04:00
|
|
|
|
|
|
|
Buffer m_planeVertexBuffer;
|
|
|
|
|
|
|
|
Texture m_normalGBuffer;
|
|
|
|
Texture m_viewPositionBuffer;
|
|
|
|
Texture m_depthBuffer;
|
2024-04-27 15:05:36 -04:00
|
|
|
Texture m_lightBuffer;
|
|
|
|
Texture m_lightSpecularBuffer;
|
2024-04-21 17:35:48 -04:00
|
|
|
Texture m_compositeBuffer;
|
2024-04-27 15:05:36 -04:00
|
|
|
Texture m_ZBuffer; // what is this?
|
2024-04-21 17:35:48 -04:00
|
|
|
Texture m_dummyTex;
|
|
|
|
VkSampler m_sampler;
|
2024-04-27 21:11:53 -04:00
|
|
|
VkSampler m_normalSampler;
|
2024-04-21 17:35:48 -04:00
|
|
|
Buffer m_dummyBuffer;
|
2024-04-30 18:12:02 -04:00
|
|
|
Texture m_tileNormal;
|
|
|
|
Texture m_tileDiffuse;
|
2024-04-27 22:59:26 -04:00
|
|
|
|
|
|
|
// Dawntrail changes part of the rendering system
|
|
|
|
bool m_dawntrailMode = false;
|
2024-04-21 17:35:48 -04:00
|
|
|
};
|