Files
bluflame/hgplus/nordlicht2014-intro/nordlicht2014/data.h
2026-04-18 22:31:51 +02:00

438 lines
11 KiB
C

#pragma once
#define VC_EXTRALEAN
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <cstdlib>
#define D3D11_NO_HELPERS
#include <d3d11.h>
#include <dxgi.h>
#include <d3dcompiler.h>
#include "Sound.h"
#include "Animation.h"
#define ATOM_EDIT 0xC018
#define ATOM_STATIC 0xC019
#define WIDTH 1280
#define HEIGHT 720
//#define FULLSCREEN
struct TEXTURE_2D_SRV_UAV_RTV
{
ID3D11Texture2D* TEX;
ID3D11ShaderResourceView* SRV;
ID3D11UnorderedAccessView* UAV;
ID3D11RenderTargetView* RTV;
};
typedef struct {
// DXGI_MODE_DESC BufferDesc;
UINT Width;
UINT Height;
//DXGI_RATIONAL RefreshRate;
UINT Numerator;
UINT Denominator;
DXGI_FORMAT Format;
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
DXGI_MODE_SCALING Scaling;
// DXGI_SAMPLE_DESC SampleDesc;
UINT Count;
UINT Quality;
DXGI_USAGE BufferUsage;
UINT BufferCount;
HWND OutputWindow;
BOOL Windowed;
DXGI_SWAP_EFFECT SwapEffect;
UINT Flags;
} HG_DXGI_SWAP_CHAIN_DESC;
struct ConstantBufferType
{
float smoothNoiseColorR; // additive to particle state
float smoothNoiseColorG; // additive to particle state
float smoothNoiseColorB; // additive to particle state
float smoothNoiseColorA; // additive to particle state
float colorBlendR;
float colorBlendG;
float colorBlendB;
float colorBlendA;
float smoothNoiseDirectionX;
float smoothNoiseDirectionY;
float smoothNoiseDirectionZ;
float demoTime; // USED
float emitterDirectionX; // USED
float emitterDirectionY; // USED
float emitterDirectionZ; // USED
float deltaTime; // USED
float emitterPositionX;
float emitterPositionY;
float emitterPositionZ;
float emitterRadius; // USED
float cameraPositionX;
float cameraPositionY;
float cameraPositionZ;
float emitRate; // USED// = 0.00001f; //delay in seconds between each particle spawn
float cameraLookatX;
float cameraLookatY;
float cameraLookatZ;
float lifeTime; // USED// = 3.0f; //particle lifetime in seconds
float cameraUpX;
float cameraUpY;
float cameraUpZ;
float gravity; // USED
float emitterVelocityX;
float emitterVelocityY;
float emitterVelocityZ;
float emitChaos;
float emitterMass;
float sdfBlendFactor;
float smoothNoiseSize; // additive to particle state
float particleMass; // additive to particle state
float envelope1;
float envelope2;
float distort;
float note;
};
#pragma bss_seg(".bss")
static HWND hWnd;
static ID3D11Device* device;
static ID3D11DeviceContext* context;
static IDXGISwapChain* swapChain;
static ID3D11Texture2D* backBufferTexture;
static ID3D11UnorderedAccessView* backBufferUAV;
static ID3D11RenderTargetView* renderTargetView;
static ID3D11UnorderedAccessView* particleBuffer1UAV;
static ID3D11ShaderResourceView* particleBuffer1SRV;
static ID3D11UnorderedAccessView* particleBuffer2UAV;
static ID3D11ShaderResourceView* particleBuffer2SRV;
static ID3D11Buffer* particleBuffer1;
static ID3D11Buffer* particleBuffer2;
static ID3D11Texture2D* depthBuffer;
static ID3D11Buffer* constantBuffer;
static ID3D11Buffer* constantBuffer2;
static ID3D11Buffer* constantBuffer3;
static ID3D11Buffer* constantBufferTemp;
static ID3D11ComputeShader* starInitShader;
static ID3D11ComputeShader* event1Shader;
static ID3D11ComputeShader* event2Shader;
static ID3D11ComputeShader* updateShader;
static ID3D11ComputeShader* drawShader;
static ID3D11ComputeShader* csNoise;
static ID3D11ComputeShader* csFbm;
static ID3D11VertexShader* constantBufferVertexShader;
static ID3D11GeometryShader* constantBufferGeometryShader;
static ID3D11VertexShader* particleVertexShader;
static ID3D11GeometryShader* particleGeometryShader;
static ID3D11PixelShader* particlePixelShader;
static ID3D11InputLayout* particleInputLayout;
static ID3D11RenderTargetView* backBufferRtv;
static ID3D11DepthStencilState* depthStencilState;
static ID3D11DepthStencilView* depthStencilView;
static ID3D11BlendState* alphaBlendState;
static pD3DCompile d3dCompile;
static ID3DBlob* shaderBlob;
static void* shaderCode;
static SIZE_T shaderSize;
static D3D11_MAPPED_SUBRESOURCE mappedResource;
static float oldDemoTime;
static float demoTime;
static int oldEvent;
static float zero[8];
static ConstantBufferType* constantBufferData;
static UINT indices[] = { -1, 0, 0, 0 };
static ID3D11SamplerState* ppSampler;
static ID3D11SamplerState* texSampler;
static TEXTURE_2D_SRV_UAV_RTV tex0;
static TEXTURE_2D_SRV_UAV_RTV noiseTemp;
static TEXTURE_2D_SRV_UAV_RTV noise;
static TEXTURE_2D_SRV_UAV_RTV pingPongTex1;
static TEXTURE_2D_SRV_UAV_RTV ghostsTex4;
static TEXTURE_2D_SRV_UAV_RTV streaksTex4;
static TEXTURE_2D_SRV_UAV_RTV lensDirt2;
static TEXTURE_2D_SRV_UAV_RTV tmpTex1;
static TEXTURE_2D_SRV_UAV_RTV blurTex1;
static TEXTURE_2D_SRV_UAV_RTV tmpTex8;
static TEXTURE_2D_SRV_UAV_RTV blurTex8;
static TEXTURE_2D_SRV_UAV_RTV tmpTex32;
static TEXTURE_2D_SRV_UAV_RTV blurTex32;
static ID3D11ComputeShader* csDistortChroma;
static ID3D11ComputeShader* csRadialBlur;
static ID3D11ComputeShader* csCircumferentialBlur;
static ID3D11ComputeShader* csStreaks;
static ID3D11ComputeShader* csLensDirt;
static ID3D11ComputeShader* csBlurH;
static ID3D11ComputeShader* csBlurV;
static ID3D11ComputeShader* csGhosts;
static ID3D11ComputeShader* csMerge;
#pragma data_seg(".texDesc")
static D3D11_TEXTURE2D_DESC texDesc =
{
0, 0, 0, 1, DXGI_FORMAT_R16G16B16A16_FLOAT,
{ 1, 0 }, D3D11_USAGE_DEFAULT,
D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS,
0, D3D11_RESOURCE_MISC_GENERATE_MIPS
};
#pragma data_seg(".ppSamplerDesc")
static D3D11_SAMPLER_DESC ppSamplerDesc =
{
D3D11_FILTER_MIN_MAG_MIP_LINEAR, //D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_FILTER_ANISOTROPIC, D3D11_FILTER_MIN_MAG_MIP_POINT
D3D11_TEXTURE_ADDRESS_CLAMP,
D3D11_TEXTURE_ADDRESS_CLAMP,
D3D11_TEXTURE_ADDRESS_CLAMP,
0.0f,
1,
D3D11_COMPARISON_ALWAYS,
{ 0, 0, 0, 0 },
0,
D3D11_FLOAT32_MAX
};
#pragma data_seg(".texSamplerDesc")
static D3D11_SAMPLER_DESC texSamplerDesc =
{
D3D11_FILTER_MIN_MAG_MIP_LINEAR, //D3D11_FILTER_MIN_MAG_MIP_LINEAR, D3D11_FILTER_ANISOTROPIC, D3D11_FILTER_MIN_MAG_MIP_POINT
D3D11_TEXTURE_ADDRESS_MIRROR,
D3D11_TEXTURE_ADDRESS_MIRROR,
D3D11_TEXTURE_ADDRESS_MIRROR,
0.0f,
1,
D3D11_COMPARISON_ALWAYS,
{ 0, 0, 0, 0 },
0,
D3D11_FLOAT32_MAX
};
#pragma data_seg(".d3dcompiler")
static char* d3dcompiler = "d3dcompiler_47.dll";
#pragma data_seg(".swapChainDesc")
#ifdef FULLSCREEN
//static HG_DXGI_SWAP_CHAIN_DESC swapChainDesc = {
// WIDTH, HEIGHT, 60, 1, DXGI_FORMAT_R8G8B8A8_UNORM,
// DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED, DXGI_MODE_SCALING_UNSPECIFIED,
// 1, 0, DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT, 2, 0, 0, DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL, 0
//};
static HG_DXGI_SWAP_CHAIN_DESC swapChainDesc = {
WIDTH, HEIGHT, 60, 1, DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED, DXGI_MODE_SCALING_UNSPECIFIED,
1, 0, DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT, 1, 0, 0, DXGI_SWAP_EFFECT_DISCARD, 0
};
#else
//static HG_DXGI_SWAP_CHAIN_DESC swapChainDesc = {
// WIDTH, HEIGHT, 60, 1, DXGI_FORMAT_R16G16B16A16_FLOAT,
// DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED, DXGI_MODE_SCALING_UNSPECIFIED,
// 1, 0, DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT, 1, 0, -1, DXGI_SWAP_EFFECT_DISCARD, 0
//};
static HG_DXGI_SWAP_CHAIN_DESC swapChainDesc = {
WIDTH, HEIGHT, 60, 1, DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED, DXGI_MODE_SCALING_UNSPECIFIED,
1, 0, DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT, 2, 0, -1, DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL, 0
};
#endif
#pragma data_seg(".depthBufferDesc")
static D3D11_TEXTURE2D_DESC depthBufferDesc =
{
WIDTH,
HEIGHT,
1,
1,
DXGI_FORMAT_D32_FLOAT,
{
1, 0
},
D3D11_USAGE_DEFAULT,
D3D11_BIND_DEPTH_STENCIL,
0,
0
};
#pragma data_seg(".constantBufferDesc")
static D3D11_BUFFER_DESC constantBufferDesc =
{
sizeof(ConstantBufferType),
D3D11_USAGE_DYNAMIC,
D3D11_BIND_CONSTANT_BUFFER,
D3D11_CPU_ACCESS_WRITE,
0,
0
};
#pragma data_seg(".constantBuffer2Desc")
static D3D11_BUFFER_DESC constantBuffer2Desc =
{
160,
D3D11_USAGE_DEFAULT,
D3D11_BIND_CONSTANT_BUFFER,
0,
0,
0
};
#pragma data_seg(".constantBufferTempDesc")
static D3D11_BUFFER_DESC constantBufferTempDesc =
{
160,
D3D11_USAGE_DEFAULT,
D3D11_BIND_STREAM_OUTPUT,
0,
0,
0
};
#pragma data_seg(".constantBufferSODeclarations")
static D3D11_SO_DECLARATION_ENTRY constantBufferSODeclarations[] =
{
{ 0, "_dS", 0, 0, 4, 0 },
{ 0, "_cS", 0, 0, 4, 0 },
{ 0, "_vS", 0, 0, 4, 0 },
{ 0, "_vS", 1, 0, 4, 0 },
{ 0, "_vS", 2, 0, 4, 0 },
{ 0, "_vS", 3, 0, 4, 0 },
{ 0, "_pS", 0, 0, 4, 0 },
{ 0, "_pS", 1, 0, 4, 0 },
{ 0, "_pS", 2, 0, 4, 0 },
{ 0, "_pS", 3, 0, 4, 0 },
};
#pragma data_seg(".particleBufferDesc")
static D3D11_BUFFER_DESC particleBufferDesc =
{
1024 * 1024 * 64,
D3D11_USAGE_DEFAULT,
D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE,
0,
D3D11_RESOURCE_MISC_BUFFER_STRUCTURED,
64
};
#pragma data_seg(".particleBufferDesc")
static D3D11_SHADER_RESOURCE_VIEW_DESC particleSrvDesc =
{
DXGI_FORMAT_UNKNOWN,
D3D11_SRV_DIMENSION_BUFFER,
{
0,
1024 * 1024
}
};
#pragma data_seg(".particleUavDesc")
static D3D11_UNORDERED_ACCESS_VIEW_DESC particleUavDesc =
{
DXGI_FORMAT_UNKNOWN,
D3D11_UAV_DIMENSION_BUFFER,
0,
1024 * 1024,
D3D11_BUFFER_UAV_FLAG_APPEND
};
#pragma data_seg(".vertexUavDesc")
static D3D11_UNORDERED_ACCESS_VIEW_DESC vertexUavDesc =
{
DXGI_FORMAT_UNKNOWN,
D3D11_UAV_DIMENSION_BUFFER,
0,
1024 * 1024,
0
};
#pragma data_seg(".particleInputElementDescs")
static D3D11_INPUT_ELEMENT_DESC particleInputElementDescs[] =
{
{
"SV_POSITION",
0,
DXGI_FORMAT_R32G32B32A32_FLOAT,
0,
0,
D3D11_INPUT_PER_VERTEX_DATA,
0
},
{
"LENGTH",
0,
DXGI_FORMAT_R32_FLOAT,
0,
16,
D3D11_INPUT_PER_VERTEX_DATA,
0
},
{
"AGE",
0,
DXGI_FORMAT_R32_FLOAT,
0,
20,
D3D11_INPUT_PER_VERTEX_DATA,
0
},
};
#pragma data_seg(".backBufferRtvDesc")
static D3D11_RENDER_TARGET_VIEW_DESC backBufferRtvDesc =
{
DXGI_FORMAT_R16G16B16A16_FLOAT,//DXGI_FORMAT_R8G8B8A8_UNORM,
D3D11_RTV_DIMENSION_TEXTURE2D,
{
0
}
};
#pragma data_seg(".depthStencilStateDesc")
static D3D11_DEPTH_STENCIL_DESC depthStencilStateDesc =
{
FALSE, // TRUE
D3D11_DEPTH_WRITE_MASK_ALL,
D3D11_COMPARISON_LESS,
FALSE,
0,
0,
{},
{}
};
#pragma data_seg(".swapChainViewport")
static D3D11_VIEWPORT swapChainViewport =
{
0,
0,
WIDTH,
HEIGHT,
0.0f,
1.0f,
};
#pragma data_seg(".depthStencilViewDesc")
static D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc =
{
DXGI_FORMAT_D32_FLOAT,
D3D11_DSV_DIMENSION_TEXTURE2D,
0,
{
0
}
};
#pragma data_seg(".alphaBlendDesc")
static D3D11_BLEND_DESC alphaBlendDesc =
{
FALSE,
FALSE,
{
TRUE,
D3D11_BLEND_SRC_ALPHA,
D3D11_BLEND_INV_SRC_ALPHA,
D3D11_BLEND_OP_ADD,
D3D11_BLEND_ONE,
D3D11_BLEND_ONE,
D3D11_BLEND_OP_ADD,
D3D11_COLOR_WRITE_ENABLE_ALL,
}
};