mirror of
https://github.com/ZDoom/Raze.git
synced 2025-01-10 11:00:46 +00:00
84173ee09b
The main bulk of this is the new start screen code. To make this work in Raze some more work on the startup procedure is needed. What this does provide is support for the DOS end-of-game text screens in Duke and SW on non-Windows systems.
85 lines
1.9 KiB
C++
85 lines
1.9 KiB
C++
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include "vectors.h"
|
|
#include "matrix.h"
|
|
#include "name.h"
|
|
#include "hw_renderstate.h"
|
|
|
|
#define SHADER_MIN_REQUIRED_TEXTURE_LAYERS 8
|
|
|
|
class VulkanDevice;
|
|
class VulkanShader;
|
|
|
|
struct MatricesUBO
|
|
{
|
|
VSMatrix ModelMatrix;
|
|
VSMatrix NormalModelMatrix;
|
|
VSMatrix TextureMatrix;
|
|
};
|
|
|
|
#define MAX_STREAM_DATA ((int)(65536 / sizeof(StreamData)))
|
|
|
|
struct StreamUBO
|
|
{
|
|
StreamData data[MAX_STREAM_DATA];
|
|
};
|
|
|
|
struct PushConstants
|
|
{
|
|
int uTextureMode;
|
|
float uAlphaThreshold;
|
|
FVector2 uClipSplit;
|
|
|
|
// Lighting + Fog
|
|
float uLightLevel;
|
|
float uFogDensity;
|
|
float uLightFactor;
|
|
float uLightDist;
|
|
int uFogEnabled;
|
|
|
|
// dynamic lights
|
|
int uLightIndex;
|
|
|
|
// Blinn glossiness and specular level
|
|
FVector2 uSpecularMaterial;
|
|
|
|
int uDataIndex;
|
|
int padding1, padding2, padding3;
|
|
};
|
|
|
|
class VkShaderProgram
|
|
{
|
|
public:
|
|
std::unique_ptr<VulkanShader> vert;
|
|
std::unique_ptr<VulkanShader> frag;
|
|
};
|
|
|
|
class VkShaderManager
|
|
{
|
|
public:
|
|
VkShaderManager(VulkanDevice *device);
|
|
~VkShaderManager();
|
|
|
|
VkShaderProgram *GetEffect(int effect, EPassType passType);
|
|
VkShaderProgram *Get(unsigned int eff, bool alphateston, EPassType passType);
|
|
bool CompileNextShader();
|
|
|
|
private:
|
|
std::unique_ptr<VulkanShader> LoadVertShader(FString shadername, const char *vert_lump, const char *defines);
|
|
std::unique_ptr<VulkanShader> LoadFragShader(FString shadername, const char *frag_lump, const char *material_lump, const char *light_lump, const char *defines, bool alphatest, bool gbufferpass);
|
|
|
|
FString GetTargetGlslVersion();
|
|
FString LoadPublicShaderLump(const char *lumpname);
|
|
FString LoadPrivateShaderLump(const char *lumpname);
|
|
|
|
VulkanDevice *device;
|
|
|
|
std::vector<VkShaderProgram> mMaterialShaders[MAX_PASS_TYPES];
|
|
std::vector<VkShaderProgram> mMaterialShadersNAT[MAX_PASS_TYPES];
|
|
std::vector<VkShaderProgram> mEffectShaders[MAX_PASS_TYPES];
|
|
uint8_t compilePass = 0, compileState = 0;
|
|
int compileIndex = 0;
|
|
};
|