mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-12 21:47:03 +03:00
Merge branch 'RendererImprovement'
This commit is contained in:
commit
3f7a5794fe
25 changed files with 654 additions and 284 deletions
BIN
Build/D3DX11d_43.pdb
Normal file
BIN
Build/D3DX11d_43.pdb
Normal file
Binary file not shown.
BIN
Build/DX11_PS_HUD.cso
Normal file
BIN
Build/DX11_PS_HUD.cso
Normal file
Binary file not shown.
35
Build/Shaders/DX11_HUD.fx
Normal file
35
Build/Shaders/DX11_HUD.fx
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
cbuffer HUDBuffer : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 ViewProjection;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertexShaderInput
|
||||||
|
{
|
||||||
|
float3 Position: POSITION;
|
||||||
|
float3 Normal: NORMAL;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
float Bone : BLENDINDICES;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PixelShaderInput VS(VertexShaderInput input)
|
||||||
|
{
|
||||||
|
PixelShaderInput output;
|
||||||
|
output.Position = mul(float4(input.Position, 1.0f), ViewProjection);
|
||||||
|
output.Color = input.Color;
|
||||||
|
output.UV = input.UV;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PS(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
return input.Color;
|
||||||
|
}
|
19
Build/Shaders/HUD/DX11_PS_HUD.hlsl
Normal file
19
Build/Shaders/HUD/DX11_PS_HUD.hlsl
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
half4 PSColored(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
return input.Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSTextured(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
float4 output = Texture.Sample(Sampler, input.UV);
|
||||||
|
return output;
|
||||||
|
}
|
41
Build/Shaders/HUD/DX11_PS_HUDBar.hlsl
Normal file
41
Build/Shaders/HUD/DX11_PS_HUDBar.hlsl
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
cbuffer HUDBarBuffer : register(b0)
|
||||||
|
{
|
||||||
|
float Percent;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
half4 glassOverlay(float2 UVs, half4 originalColor) {
|
||||||
|
float y = UVs.y;
|
||||||
|
y -= 0.15f;
|
||||||
|
y = distance(0.1f, y);
|
||||||
|
y = 1 - y;
|
||||||
|
y = pow(y, 4);
|
||||||
|
y = saturate(y);
|
||||||
|
half4 color = originalColor;
|
||||||
|
return saturate(lerp(color, (color * 1.6f)+half4(0.4f, 0.4f, 0.4f, 0.0f), y));
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSColored(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
if (input.UV.x > Percent) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
return glassOverlay(input.UV,input.Color);
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSTextured(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
if (input.UV.x > Percent) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
float4 color = Texture.Sample(Sampler, input.UV);
|
||||||
|
return glassOverlay(input.UV, color);
|
||||||
|
}
|
31
Build/Shaders/HUD/DX11_VS_HUD.hlsl
Normal file
31
Build/Shaders/HUD/DX11_VS_HUD.hlsl
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
cbuffer HUDBuffer : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 View;
|
||||||
|
float4x4 Projection;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertexShaderInput
|
||||||
|
{
|
||||||
|
float3 Position: POSITION;
|
||||||
|
float3 Normal: NORMAL;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
float Bone : BLENDINDICES;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PixelShaderInput VS(VertexShaderInput input)
|
||||||
|
{
|
||||||
|
PixelShaderInput output;
|
||||||
|
output.Position = mul(mul(float4(input.Position, 1.0f), View),Projection);
|
||||||
|
output.Color = input.Color;
|
||||||
|
output.UV = input.UV;
|
||||||
|
return output;
|
||||||
|
}
|
BIN
Build/bar_border.png
Normal file
BIN
Build/bar_border.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 314 B |
BIN
Build/savegame.0
Normal file
BIN
Build/savegame.0
Normal file
Binary file not shown.
|
@ -14,7 +14,9 @@ int FlashState = 0;
|
||||||
int FlashCount = 0;
|
int FlashCount = 0;
|
||||||
int PoisonFlag = 0;
|
int PoisonFlag = 0;
|
||||||
int DashTimer = 0;
|
int DashTimer = 0;
|
||||||
|
extern RendererHUDBar* g_HealthBar;
|
||||||
|
extern RendererHUDBar* g_DashBar;
|
||||||
|
extern RendererHUDBar* g_AirBar;
|
||||||
extern LaraExtraInfo g_LaraExtra;
|
extern LaraExtraInfo g_LaraExtra;
|
||||||
|
|
||||||
void DrawHealthBarOverlay(int value)
|
void DrawHealthBarOverlay(int value)
|
||||||
|
@ -26,20 +28,20 @@ void DrawHealthBarOverlay(int value)
|
||||||
color2 = 0xA0A000;
|
color2 = 0xA0A000;
|
||||||
else
|
else
|
||||||
color2 = 0xA00000;
|
color2 = 0xA00000;
|
||||||
g_Renderer->DrawBar(245, 32, 150, 12, value, 0xA00000, color2);
|
g_Renderer->DrawBar(value, g_HealthBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawHealthBar(int value)
|
void DrawHealthBar(float value)
|
||||||
{
|
{
|
||||||
if (CurrentLevel)
|
if (CurrentLevel)
|
||||||
{
|
{
|
||||||
int color2;
|
//int color2;
|
||||||
if (Lara.poisoned || Lara.gassed)
|
//if (Lara.poisoned || Lara.gassed)
|
||||||
color2 = 0xA0A000;
|
// color2 = 0xA0A000;
|
||||||
else
|
//else
|
||||||
color2 = 0xA00000;
|
// color2 = 0xA00000;
|
||||||
g_Renderer->DrawBar(20, 32, 150, 12, value, 0xA00000, color2);
|
g_Renderer->DrawBar(value,g_HealthBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,14 +68,14 @@ void UpdateHealtBar(int flash)
|
||||||
if (!BinocularRange)
|
if (!BinocularRange)
|
||||||
{
|
{
|
||||||
if (flash)
|
if (flash)
|
||||||
DrawHealthBar(hitPoints / 10);
|
DrawHealthBar(hitPoints / 1000.0f);
|
||||||
else
|
else
|
||||||
DrawHealthBar(0);
|
DrawHealthBar(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (flash)
|
if (flash)
|
||||||
DrawHealthBarOverlay(hitPoints / 10);
|
DrawHealthBarOverlay(hitPoints / 1000.0f);
|
||||||
else
|
else
|
||||||
DrawHealthBarOverlay(0);
|
DrawHealthBarOverlay(0);
|
||||||
}
|
}
|
||||||
|
@ -85,11 +87,11 @@ void UpdateHealtBar(int flash)
|
||||||
{
|
{
|
||||||
if (!BinocularRange && !SniperOverlay)
|
if (!BinocularRange && !SniperOverlay)
|
||||||
{
|
{
|
||||||
DrawHealthBar(hitPoints / 10);
|
DrawHealthBar(hitPoints / 1000.0f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DrawHealthBarOverlay(hitPoints / 10);
|
DrawHealthBarOverlay(hitPoints / 1000.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,11 +99,11 @@ void UpdateHealtBar(int flash)
|
||||||
PoisonFlag--;
|
PoisonFlag--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawAirBar(int value)
|
void DrawAirBar(float value)
|
||||||
{
|
{
|
||||||
if (CurrentLevel)
|
if (CurrentLevel)
|
||||||
{
|
{
|
||||||
g_Renderer->DrawBar(20, 10, 150, 12, value, 0x0000A0, 0x0050A0);
|
g_Renderer->DrawBar(value, g_AirBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,12 +130,12 @@ void UpdateAirBar(int flash)
|
||||||
if (air <= 450)
|
if (air <= 450)
|
||||||
{
|
{
|
||||||
if (flash)
|
if (flash)
|
||||||
DrawAirBar((air * 100) / 1800);
|
DrawAirBar(air/ 1800.0f);
|
||||||
else
|
else
|
||||||
DrawAirBar(0);
|
DrawAirBar(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DrawAirBar((air * 100) / 1800);
|
DrawAirBar(air / 1800.0f);
|
||||||
|
|
||||||
if (Lara.gassed)
|
if (Lara.gassed)
|
||||||
{
|
{
|
||||||
|
@ -147,7 +149,7 @@ void DrawDashBar(int value)
|
||||||
{
|
{
|
||||||
if (CurrentLevel)
|
if (CurrentLevel)
|
||||||
{
|
{
|
||||||
g_Renderer->DrawBar(630, 32, 150, 12, value, 0xA0A000, 0x00A000);
|
g_Renderer->DrawBar(value, g_DashBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
#define MAX_COLLECTED_PICKUPS 32
|
#define MAX_COLLECTED_PICKUPS 32
|
||||||
|
|
||||||
void DrawHealthBarOverlay(int value);
|
void DrawHealthBarOverlay(int value);
|
||||||
void DrawHealthBar(int value);
|
void DrawHealthBar(float value);
|
||||||
void UpdateHealtBar(int flash);
|
void UpdateHealtBar(int flash);
|
||||||
void DrawAirBar(int value);
|
void DrawAirBar(float value);
|
||||||
void UpdateAirBar(int flash);
|
void UpdateAirBar(int flash);
|
||||||
void DrawDashBar(int value);
|
void DrawDashBar(int value);
|
||||||
void AddDisplayPickup(short objectNumber);
|
void AddDisplayPickup(short objectNumber);
|
||||||
|
|
|
@ -81,11 +81,11 @@ void Renderer11::updateAnimatedTextures()
|
||||||
for (int p = 0; p < bucket->Polygons.size(); p++)
|
for (int p = 0; p < bucket->Polygons.size(); p++)
|
||||||
{
|
{
|
||||||
RendererPolygon* polygon = &bucket->Polygons[p];
|
RendererPolygon* polygon = &bucket->Polygons[p];
|
||||||
RendererAnimatedTextureSet* set = m_animatedTextureSets[polygon->AnimatedSet];
|
RendererAnimatedTextureSet& const set = m_animatedTextureSets[polygon->AnimatedSet];
|
||||||
int textureIndex = -1;
|
int textureIndex = -1;
|
||||||
for (int j = 0; j < set->NumTextures; j++)
|
for (int j = 0; j < set.NumTextures; j++)
|
||||||
{
|
{
|
||||||
if (set->Textures[j]->Id == polygon->TextureId)
|
if (set.Textures[j].Id == polygon->TextureId)
|
||||||
{
|
{
|
||||||
textureIndex = j;
|
textureIndex = j;
|
||||||
break;
|
break;
|
||||||
|
@ -94,17 +94,17 @@ void Renderer11::updateAnimatedTextures()
|
||||||
if (textureIndex == -1)
|
if (textureIndex == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (textureIndex == set->NumTextures - 1)
|
if (textureIndex == set.NumTextures - 1)
|
||||||
textureIndex = 0;
|
textureIndex = 0;
|
||||||
else
|
else
|
||||||
textureIndex++;
|
textureIndex++;
|
||||||
|
|
||||||
polygon->TextureId = set->Textures[textureIndex]->Id;
|
polygon->TextureId = set.Textures[textureIndex].Id;
|
||||||
|
|
||||||
for (int v = 0; v < (polygon->Shape == SHAPE_RECTANGLE ? 4 : 3); v++)
|
for (int v = 0; v < (polygon->Shape == SHAPE_RECTANGLE ? 4 : 3); v++)
|
||||||
{
|
{
|
||||||
bucket->Vertices[polygon->Indices[v]].UV.x = set->Textures[textureIndex]->UV[v].x;
|
bucket->Vertices[polygon->Indices[v]].UV.x = set.Textures[textureIndex].UV[v].x;
|
||||||
bucket->Vertices[polygon->Indices[v]].UV.y = set->Textures[textureIndex]->UV[v].y;
|
bucket->Vertices[polygon->Indices[v]].UV.y = set.Textures[textureIndex].UV[v].y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -668,10 +668,10 @@ int Renderer11::getAnimatedTextureInfo(short textureId)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_numAnimatedTextureSets; i++)
|
for (int i = 0; i < m_numAnimatedTextureSets; i++)
|
||||||
{
|
{
|
||||||
RendererAnimatedTextureSet* set = m_animatedTextureSets[i];
|
RendererAnimatedTextureSet& const set = m_animatedTextureSets[i];
|
||||||
for (int j = 0; j < set->NumTextures; j++)
|
for (int j = 0; j < set.NumTextures; j++)
|
||||||
{
|
{
|
||||||
if (set->Textures[j]->Id == textureId)
|
if (set.Textures[j].Id == textureId)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,20 +102,12 @@ void Renderer11::FreeRendererData()
|
||||||
DX11_DELETE(m_sprites[i]);
|
DX11_DELETE(m_sprites[i]);
|
||||||
free(m_sprites);
|
free(m_sprites);
|
||||||
|
|
||||||
for (int i = 0; i < ID_NUMBER_OBJECTS; i++)
|
|
||||||
DX11_DELETE(m_spriteSequences[i]);
|
|
||||||
free(m_spriteSequences);
|
|
||||||
|
|
||||||
for (int i = 0; i < NUM_STATICS; i++)
|
for (int i = 0; i < NUM_STATICS; i++)
|
||||||
DX11_DELETE(m_staticObjects[i]);
|
DX11_DELETE(m_staticObjects[i]);
|
||||||
free(m_staticObjects);
|
free(m_staticObjects);
|
||||||
|
|
||||||
m_rooms.clear();
|
m_rooms.clear();
|
||||||
|
|
||||||
for (int i = 0; i < m_numAnimatedTextureSets; i++)
|
|
||||||
DX11_DELETE(m_animatedTextureSets[i]);
|
|
||||||
free(m_animatedTextureSets);
|
|
||||||
|
|
||||||
DX11_DELETE(m_textureAtlas);
|
DX11_DELETE(m_textureAtlas);
|
||||||
DX11_DELETE(m_skyTexture);
|
DX11_DELETE(m_skyTexture);
|
||||||
DX11_DELETE(m_roomsVertexBuffer);
|
DX11_DELETE(m_roomsVertexBuffer);
|
||||||
|
@ -165,8 +157,8 @@ ID3D11VertexShader* Renderer11::compileVertexShader(const char* fileName, const
|
||||||
ID3DBlob* errors = NULL;
|
ID3DBlob* errors = NULL;
|
||||||
|
|
||||||
printf("Compiling vertex shader: %s\n", fileName);
|
printf("Compiling vertex shader: %s\n", fileName);
|
||||||
|
UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG;
|
||||||
res = D3DX11CompileFromFileA(fileName, NULL, NULL, function, model, D3D10_SHADER_OPTIMIZATION_LEVEL3, 0, NULL, bytecode, &errors, NULL);
|
res = D3DX11CompileFromFileA(fileName, NULL, NULL, function, model, flags, 0, NULL, bytecode, &errors, NULL);
|
||||||
if (FAILED(res))
|
if (FAILED(res))
|
||||||
{
|
{
|
||||||
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
||||||
|
@ -189,8 +181,8 @@ ID3D11PixelShader* Renderer11::compilePixelShader(const char* fileName, const ch
|
||||||
ID3DBlob* errors = NULL;
|
ID3DBlob* errors = NULL;
|
||||||
|
|
||||||
printf("Compiling pixel shader: %s\n", fileName);
|
printf("Compiling pixel shader: %s\n", fileName);
|
||||||
|
UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG;
|
||||||
res = D3DX11CompileFromFileA(fileName, NULL, NULL, function, model, D3D10_SHADER_OPTIMIZATION_LEVEL3, 0, NULL, bytecode, &errors, NULL);
|
res = D3DX11CompileFromFileA(fileName, NULL, NULL, function, model, flags, 0, NULL, bytecode, &errors, NULL);
|
||||||
if (FAILED(res))
|
if (FAILED(res))
|
||||||
{
|
{
|
||||||
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
||||||
|
@ -256,7 +248,7 @@ ID3D11Buffer* Renderer11::createConstantBuffer(int size)
|
||||||
D3D11_BUFFER_DESC desc;
|
D3D11_BUFFER_DESC desc;
|
||||||
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
|
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
|
||||||
|
|
||||||
desc.ByteWidth = ceil(size / 16) * 16; // Constant buffer must have a size multiple of 16 bytes
|
desc.ByteWidth = ceil(size / 16.0f) * 16; // Constant buffer must have a size multiple of 16 bytes
|
||||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||||
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
|
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
|
||||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||||
|
@ -271,3 +263,129 @@ ID3D11Buffer* Renderer11::createConstantBuffer(int size)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RendererHUDBar::RendererHUDBar(ID3D11Device* m_device,int x, int y, int w, int h, int borderSize, array<Vector4,9> colors)
|
||||||
|
{
|
||||||
|
array<Vector3, 9> barVertices = {
|
||||||
|
Vector3(x, HUD_ZERO_Y +y, 0.5),
|
||||||
|
Vector3(x + (w / 2.0f), HUD_ZERO_Y + y, 0.5),
|
||||||
|
Vector3(x + w, HUD_ZERO_Y + y, 0.5),
|
||||||
|
Vector3(x, HUD_ZERO_Y + (y + h / 2.0f), 0.5),
|
||||||
|
Vector3(x + (w / 2.0f), HUD_ZERO_Y + (y + h / 2.0f), 0.5),
|
||||||
|
Vector3(x + w, HUD_ZERO_Y + (y + h / 2.0f), 0.5),
|
||||||
|
Vector3(x, HUD_ZERO_Y + y + h, 0.5),
|
||||||
|
Vector3(x + (w / 2.0f), HUD_ZERO_Y + y + h, 0.5),
|
||||||
|
Vector3(x + w, HUD_ZERO_Y + y + h, 0.5),
|
||||||
|
|
||||||
|
};
|
||||||
|
const float HUD_BORDER_WIDTH = borderSize * (REFERENCE_RES_WIDTH/ REFERENCE_RES_HEIGHT);
|
||||||
|
const float HUD_BORDER_HEIGT = borderSize;
|
||||||
|
array<Vector3, 16> barBorderVertices = {
|
||||||
|
//top left
|
||||||
|
Vector3(x - HUD_BORDER_WIDTH ,HUD_ZERO_Y+y - HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x ,HUD_ZERO_Y+y - HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x ,HUD_ZERO_Y+y,0),
|
||||||
|
Vector3(x - HUD_BORDER_WIDTH ,HUD_ZERO_Y+y,0),
|
||||||
|
//top right
|
||||||
|
Vector3(x + w ,HUD_ZERO_Y+y - HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x + w + HUD_BORDER_WIDTH,HUD_ZERO_Y+y - HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x + w + HUD_BORDER_WIDTH,HUD_ZERO_Y+y,0),
|
||||||
|
Vector3(x + w ,HUD_ZERO_Y+y,0),
|
||||||
|
//bottom right
|
||||||
|
Vector3(x + w ,HUD_ZERO_Y+y + h,0),
|
||||||
|
Vector3(x + w + HUD_BORDER_WIDTH,HUD_ZERO_Y+y + h,0),
|
||||||
|
Vector3(x + w + HUD_BORDER_WIDTH,HUD_ZERO_Y+y + h + HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x + w ,HUD_ZERO_Y+y + h + HUD_BORDER_HEIGT,0),
|
||||||
|
//bottom left
|
||||||
|
Vector3(x - HUD_BORDER_WIDTH ,HUD_ZERO_Y+y + h,0),
|
||||||
|
Vector3(x ,HUD_ZERO_Y+y + h,0),
|
||||||
|
Vector3(x ,HUD_ZERO_Y+y + h + HUD_BORDER_HEIGT,0),
|
||||||
|
Vector3(x - HUD_BORDER_WIDTH ,HUD_ZERO_Y+y + h + HUD_BORDER_HEIGT,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
array<Vector2, 9> barUVs = {
|
||||||
|
Vector2(0,0),
|
||||||
|
Vector2(0.5,0),
|
||||||
|
Vector2(1,0),
|
||||||
|
Vector2(0,0.5),
|
||||||
|
Vector2(0.5,0.5),
|
||||||
|
Vector2(1,0.5),
|
||||||
|
Vector2(0,1),
|
||||||
|
Vector2(0.5,1),
|
||||||
|
Vector2(1,1),
|
||||||
|
};
|
||||||
|
array<Vector2, 16> barBorderUVs = {
|
||||||
|
//top left
|
||||||
|
Vector2(0,0),
|
||||||
|
Vector2(0.25,0),
|
||||||
|
Vector2(0.25,0.25),
|
||||||
|
Vector2(0,0.25),
|
||||||
|
//top right
|
||||||
|
Vector2(0.75,0),
|
||||||
|
Vector2(1,0),
|
||||||
|
Vector2(1,0.25),
|
||||||
|
Vector2(0.75,0.25),
|
||||||
|
//bottom right
|
||||||
|
Vector2(0.75,0.75),
|
||||||
|
Vector2(1,0.75),
|
||||||
|
Vector2(1,1),
|
||||||
|
Vector2(0.75,1),
|
||||||
|
//bottom left
|
||||||
|
Vector2(0,0.75),
|
||||||
|
Vector2(0.25,0.75),
|
||||||
|
Vector2(0.25,1),
|
||||||
|
Vector2(0,1),
|
||||||
|
};
|
||||||
|
|
||||||
|
array<int, 24> barIndices = {
|
||||||
|
0,1,3,1,4,3,
|
||||||
|
//
|
||||||
|
1,2,4,2,5,4,
|
||||||
|
//
|
||||||
|
3,4,6,4,7,6,
|
||||||
|
//
|
||||||
|
4,5,7,5,8,7
|
||||||
|
};
|
||||||
|
array<int, 56> barBorderIndices = {
|
||||||
|
//top left
|
||||||
|
0,1,3,1,2,3,
|
||||||
|
//top center
|
||||||
|
1,4,2,4,7,2,
|
||||||
|
//top right
|
||||||
|
4,5,7,5,6,7,
|
||||||
|
//right
|
||||||
|
7,6,8,6,9,8,
|
||||||
|
//bottom right
|
||||||
|
8,9,11,9,10,11,
|
||||||
|
//bottom
|
||||||
|
13,8,14,8,11,14,
|
||||||
|
//bottom left
|
||||||
|
12,13,15,13,14,15,
|
||||||
|
//left
|
||||||
|
3,2,12,2,13,12,
|
||||||
|
//center
|
||||||
|
2,7,13,7,8,13
|
||||||
|
};
|
||||||
|
array<RendererVertex, 9> vertices;
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
|
||||||
|
vertices[i].Position = barVertices[i];
|
||||||
|
vertices[i].Color = colors[i];
|
||||||
|
vertices[i].UV = barUVs[i];
|
||||||
|
vertices[i].Normal = Vector3(0, 0, 0);
|
||||||
|
vertices[i].Bone = 0.0f;
|
||||||
|
}
|
||||||
|
vertexBuffer = VertexBuffer::Create(m_device, vertices.size(), vertices.data());
|
||||||
|
indexBuffer = IndexBuffer::Create(m_device, barIndices.size(), barIndices.data());
|
||||||
|
|
||||||
|
array<RendererVertex, barBorderVertices.size()> verticesBorder;
|
||||||
|
for (int i = 0; i < barBorderVertices.size(); i++) {
|
||||||
|
verticesBorder[i].Position = barBorderVertices[i];
|
||||||
|
verticesBorder[i].Color = Vector4(1, 1, 1, 1);
|
||||||
|
verticesBorder[i].UV = barBorderUVs[i];
|
||||||
|
verticesBorder[i].Normal = Vector3(0, 0, 0);
|
||||||
|
verticesBorder[i].Bone = 0.0f;
|
||||||
|
}
|
||||||
|
vertexBufferBorder = VertexBuffer::Create(m_device, verticesBorder.size(), verticesBorder.data());
|
||||||
|
indexBufferBorder = IndexBuffer::Create(m_device, barBorderIndices.size(), barBorderIndices.data());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -27,154 +27,20 @@
|
||||||
|
|
||||||
#define DX11_RELEASE(x) if (x != NULL) x->Release()
|
#define DX11_RELEASE(x) if (x != NULL) x->Release()
|
||||||
#define DX11_DELETE(x) if (x != NULL) { delete x; x = NULL; }
|
#define DX11_DELETE(x) if (x != NULL) { delete x; x = NULL; }
|
||||||
|
constexpr int REFERENCE_RES_WIDTH = 800;
|
||||||
|
constexpr int REFERENCE_RES_HEIGHT = 450;
|
||||||
|
constexpr float HUD_UNIT_X = 1.0f / REFERENCE_RES_WIDTH;
|
||||||
|
constexpr float HUD_UNIT_Y = 1.0f / REFERENCE_RES_HEIGHT;
|
||||||
|
constexpr float HUD_ZERO_Y = -REFERENCE_RES_HEIGHT;
|
||||||
using namespace DirectX;
|
using namespace DirectX;
|
||||||
using namespace DirectX::SimpleMath;
|
using namespace DirectX::SimpleMath;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
template <class T>
|
|
||||||
class PreallocatedVector
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
T** m_objects;
|
|
||||||
int m_maxItems;
|
|
||||||
int m_numItems;
|
|
||||||
int m_startSize;
|
|
||||||
|
|
||||||
public:
|
|
||||||
PreallocatedVector()
|
|
||||||
{
|
|
||||||
m_objects = NULL;
|
|
||||||
m_maxItems = 0;
|
|
||||||
m_startSize = 0;
|
|
||||||
m_numItems = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
~PreallocatedVector()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Reserve(int numItems)
|
|
||||||
{
|
|
||||||
m_objects = (T**)malloc(sizeof(T*) * numItems);
|
|
||||||
ZeroMemory(m_objects, sizeof(T*) * m_maxItems);
|
|
||||||
m_maxItems = numItems;
|
|
||||||
m_numItems = 0;
|
|
||||||
m_startSize = numItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Clear()
|
|
||||||
{
|
|
||||||
m_numItems = 0;
|
|
||||||
ZeroMemory(m_objects, sizeof(T*) * m_maxItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int Size()
|
|
||||||
{
|
|
||||||
return m_numItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Sort(int(*compareFunc)(T*, T*))
|
|
||||||
{
|
|
||||||
qsort(m_objects, m_numItems, sizeof(T), compareFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline T*& operator[] (int x) {
|
|
||||||
if (x >= m_maxItems)
|
|
||||||
return m_objects[0];
|
|
||||||
return m_objects[x];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Add(T* value)
|
|
||||||
{
|
|
||||||
if (m_numItems >= m_maxItems)
|
|
||||||
return;
|
|
||||||
m_objects[m_numItems++] = value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T, class U>
|
|
||||||
class PreallocatedDictionary
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
T** m_keys;
|
|
||||||
U** m_objects;
|
|
||||||
int m_maxItems;
|
|
||||||
int m_numItems;
|
|
||||||
int m_startSize;
|
|
||||||
|
|
||||||
public:
|
|
||||||
PreallocatedDictionary()
|
|
||||||
{
|
|
||||||
m_keys = NULL;
|
|
||||||
m_objects = NULL;
|
|
||||||
m_maxItems = 0;
|
|
||||||
m_startSize = 0;
|
|
||||||
m_numItems = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
~PreallocatedDictionary()
|
|
||||||
{
|
|
||||||
free(m_keys);
|
|
||||||
free(m_objects);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Reserve(int numItems)
|
|
||||||
{
|
|
||||||
m_keys = (T**)malloc(sizeof(T*) * numItems);
|
|
||||||
m_objects = (U**)malloc(sizeof(U*) * numItems);
|
|
||||||
ZeroMemory(m_keys, sizeof(T*) * m_maxItems);
|
|
||||||
ZeroMemory(m_objects, sizeof(U*) * m_maxItems);
|
|
||||||
m_maxItems = numItems;
|
|
||||||
m_numItems = 0;
|
|
||||||
m_startSize = numItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Clear()
|
|
||||||
{
|
|
||||||
m_numItems = 0;
|
|
||||||
ZeroMemory(m_keys, sizeof(T*) * m_maxItems);
|
|
||||||
ZeroMemory(m_objects, sizeof(T*) * m_maxItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int Size()
|
|
||||||
{
|
|
||||||
return m_numItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline T*& operator[] (int x) {
|
|
||||||
return m_objects[x];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool KeyExists(T* key)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_numItems; i++)
|
|
||||||
if (m_keys[i] == key)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline U* Get(T* key)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_numItems; i++)
|
|
||||||
if (m_keys[i] == key)
|
|
||||||
return m_objects[i];
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void Add(T* key, U* value)
|
|
||||||
{
|
|
||||||
m_keys[m_numItems] = key;
|
|
||||||
m_objects[m_numItems++] = value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RendererDisplayMode {
|
struct RendererDisplayMode {
|
||||||
int Width;
|
int Width;
|
||||||
int Height;
|
int Height;
|
||||||
int RefreshRate;
|
int RefreshRate;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RendererVideoAdapter {
|
struct RendererVideoAdapter {
|
||||||
string Name;
|
string Name;
|
||||||
int Index;
|
int Index;
|
||||||
|
@ -475,6 +341,22 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct RendererHUDBar {
|
||||||
|
VertexBuffer* vertexBufferBorder;
|
||||||
|
IndexBuffer* indexBufferBorder;
|
||||||
|
VertexBuffer* vertexBuffer;
|
||||||
|
IndexBuffer* indexBuffer;
|
||||||
|
/*
|
||||||
|
Initialises a new Bar for rendering. the Coordinates are set in the Reference Resolution (default 800x600).
|
||||||
|
The colors are setup like this
|
||||||
|
0-----------1-----------2
|
||||||
|
| | |
|
||||||
|
3-----------4-----------5
|
||||||
|
| | |
|
||||||
|
6-----------7-----------8
|
||||||
|
*/
|
||||||
|
RendererHUDBar(ID3D11Device* m_device, int x, int y, int w, int h, int borderSize, array<Vector4,9> colors);
|
||||||
|
};
|
||||||
struct RendererStringToDraw
|
struct RendererStringToDraw
|
||||||
{
|
{
|
||||||
float X;
|
float X;
|
||||||
|
@ -541,6 +423,13 @@ struct ShaderLight {
|
||||||
float Range;
|
float Range;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CHUDBuffer {
|
||||||
|
Matrix View;
|
||||||
|
Matrix Projection;
|
||||||
|
};
|
||||||
|
struct CHUDBarBuffer {
|
||||||
|
float Percent;
|
||||||
|
};
|
||||||
struct CCameraMatrixBuffer
|
struct CCameraMatrixBuffer
|
||||||
{
|
{
|
||||||
Matrix View;
|
Matrix View;
|
||||||
|
@ -594,14 +483,7 @@ struct RendererAnimatedTexture
|
||||||
struct RendererAnimatedTextureSet
|
struct RendererAnimatedTextureSet
|
||||||
{
|
{
|
||||||
int NumTextures;
|
int NumTextures;
|
||||||
RendererAnimatedTexture** Textures;
|
vector<RendererAnimatedTexture> Textures;
|
||||||
|
|
||||||
~RendererAnimatedTextureSet()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < NumTextures; i++)
|
|
||||||
delete Textures[i];
|
|
||||||
free(Textures);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RendererBucket
|
struct RendererBucket
|
||||||
|
@ -635,7 +517,7 @@ struct RendererRoom
|
||||||
bool Visited;
|
bool Visited;
|
||||||
float Distance;
|
float Distance;
|
||||||
int RoomNumber;
|
int RoomNumber;
|
||||||
PreallocatedVector<RendererLight> LightsToDraw;
|
vector<RendererLight*> LightsToDraw;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RendererRoomNode {
|
struct RendererRoomNode {
|
||||||
|
@ -653,7 +535,7 @@ struct RendererItem {
|
||||||
Matrix Scale;
|
Matrix Scale;
|
||||||
Matrix AnimationTransforms[32];
|
Matrix AnimationTransforms[32];
|
||||||
int NumMeshes;
|
int NumMeshes;
|
||||||
PreallocatedVector<RendererLight> Lights;
|
vector<RendererLight*> Lights;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RendererMesh
|
struct RendererMesh
|
||||||
|
@ -668,7 +550,7 @@ struct RendererEffect {
|
||||||
FX_INFO* Effect;
|
FX_INFO* Effect;
|
||||||
Matrix World;
|
Matrix World;
|
||||||
RendererMesh* Mesh;
|
RendererMesh* Mesh;
|
||||||
PreallocatedVector<RendererLight> Lights;
|
vector<RendererLight*> Lights;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RendererObject
|
struct RendererObject
|
||||||
|
@ -700,21 +582,33 @@ struct RendererSprite {
|
||||||
|
|
||||||
struct RendererSpriteSequence {
|
struct RendererSpriteSequence {
|
||||||
int Id;
|
int Id;
|
||||||
RendererSprite** SpritesList;
|
vector<RendererSprite*> SpritesList;
|
||||||
int NumSprites;
|
int NumSprites;
|
||||||
|
|
||||||
|
RendererSpriteSequence()
|
||||||
|
{
|
||||||
|
}
|
||||||
RendererSpriteSequence(int id, int num)
|
RendererSpriteSequence(int id, int num)
|
||||||
{
|
{
|
||||||
Id = id;
|
Id = id;
|
||||||
NumSprites = num;
|
NumSprites = num;
|
||||||
SpritesList = (RendererSprite**)malloc(sizeof(RendererSprite*) * num);
|
SpritesList = vector<RendererSprite*>(NumSprites);
|
||||||
}
|
}
|
||||||
|
|
||||||
~RendererSpriteSequence()
|
RendererSpriteSequence(const RendererSpriteSequence& rhs) {
|
||||||
{
|
Id = rhs.Id;
|
||||||
/*for (int i = 0; i < NumSprites; i++)
|
NumSprites = rhs.NumSprites;
|
||||||
delete SpritesList[i];
|
SpritesList = rhs.SpritesList;
|
||||||
free(SpritesList);*/
|
}
|
||||||
|
|
||||||
|
RendererSpriteSequence& operator=(const RendererSpriteSequence& other) {
|
||||||
|
if (this != &other) {
|
||||||
|
Id = other.Id;
|
||||||
|
NumSprites = other.NumSprites;
|
||||||
|
SpritesList = vector<RendererSprite*>(NumSprites);
|
||||||
|
std::copy(other.SpritesList.begin(), other.SpritesList.end(),back_inserter(SpritesList));
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -813,7 +707,10 @@ private:
|
||||||
ID3D11PixelShader* m_psFullScreenQuad;
|
ID3D11PixelShader* m_psFullScreenQuad;
|
||||||
ID3D11VertexShader* m_vsShadowMap;
|
ID3D11VertexShader* m_vsShadowMap;
|
||||||
ID3D11PixelShader* m_psShadowMap;
|
ID3D11PixelShader* m_psShadowMap;
|
||||||
|
ID3D11VertexShader* m_vsHUD;
|
||||||
|
ID3D11PixelShader* m_psHUDColor;
|
||||||
|
ID3D11PixelShader* m_psHUDTexture;
|
||||||
|
ID3D11PixelShader* m_psHUDBarColor;
|
||||||
|
|
||||||
ID3D11ShaderResourceView* m_shadowMapRV;
|
ID3D11ShaderResourceView* m_shadowMapRV;
|
||||||
ID3D11Texture2D* m_shadowMapTexture;
|
ID3D11Texture2D* m_shadowMapTexture;
|
||||||
|
@ -835,7 +732,10 @@ private:
|
||||||
ID3D11Buffer* m_cbRoom;
|
ID3D11Buffer* m_cbRoom;
|
||||||
CShadowLightBuffer m_stShadowMap;
|
CShadowLightBuffer m_stShadowMap;
|
||||||
ID3D11Buffer* m_cbShadowMap;
|
ID3D11Buffer* m_cbShadowMap;
|
||||||
|
CHUDBuffer m_stHUD;
|
||||||
|
ID3D11Buffer* m_cbHUD;
|
||||||
|
CHUDBarBuffer m_stHUDBar;
|
||||||
|
ID3D11Buffer* m_cbHUDBar;
|
||||||
// Text and sprites
|
// Text and sprites
|
||||||
SpriteFont* m_gameFont;
|
SpriteFont* m_gameFont;
|
||||||
SpriteBatch* m_spriteBatch;
|
SpriteBatch* m_spriteBatch;
|
||||||
|
@ -845,6 +745,7 @@ private:
|
||||||
PrimitiveBatch<RendererVertex>* m_primitiveBatch;
|
PrimitiveBatch<RendererVertex>* m_primitiveBatch;
|
||||||
|
|
||||||
// System resources
|
// System resources
|
||||||
|
Texture2D* m_HUDBarBorderTexture;
|
||||||
Texture2D* m_caustics[NUM_CAUSTICS_TEXTURES];
|
Texture2D* m_caustics[NUM_CAUSTICS_TEXTURES];
|
||||||
Texture2D* m_binocularsTexture;
|
Texture2D* m_binocularsTexture;
|
||||||
Texture2D* m_whiteTexture;
|
Texture2D* m_whiteTexture;
|
||||||
|
@ -894,10 +795,10 @@ private:
|
||||||
int m_numStatics;
|
int m_numStatics;
|
||||||
int m_numSprites;
|
int m_numSprites;
|
||||||
int m_numSpritesSequences;
|
int m_numSpritesSequences;
|
||||||
RendererSpriteSequence** m_spriteSequences;
|
vector<RendererSpriteSequence> m_spriteSequences;
|
||||||
unordered_map<unsigned int, RendererMesh*> m_meshPointersToMesh;
|
unordered_map<unsigned int, RendererMesh*> m_meshPointersToMesh;
|
||||||
Matrix m_LaraWorldMatrix;
|
Matrix m_LaraWorldMatrix;
|
||||||
RendererAnimatedTextureSet** m_animatedTextureSets;
|
vector<RendererAnimatedTextureSet> m_animatedTextureSets;
|
||||||
int m_numAnimatedTextureSets;
|
int m_numAnimatedTextureSets;
|
||||||
int m_currentCausticsFrame;
|
int m_currentCausticsFrame;
|
||||||
RendererUnderwaterDustParticle m_underwaterDustParticles[NUM_UNDERWATER_DUST_PARTICLES];
|
RendererUnderwaterDustParticle m_underwaterDustParticles[NUM_UNDERWATER_DUST_PARTICLES];
|
||||||
|
@ -1011,7 +912,7 @@ private:
|
||||||
bool isInRoom(int x, int y, int z, short roomNumber);
|
bool isInRoom(int x, int y, int z, short roomNumber);
|
||||||
bool drawColoredQuad(int x, int y, int w, int h, Vector4 color);
|
bool drawColoredQuad(int x, int y, int w, int h, Vector4 color);
|
||||||
bool initialiseScreen(int w, int h, int refreshRate, bool windowed, HWND handle, bool reset);
|
bool initialiseScreen(int w, int h, int refreshRate, bool windowed, HWND handle, bool reset);
|
||||||
|
bool initialiseBars();
|
||||||
public:
|
public:
|
||||||
Matrix View;
|
Matrix View;
|
||||||
Matrix Projection;
|
Matrix Projection;
|
||||||
|
@ -1055,7 +956,7 @@ public:
|
||||||
void AddSprite3D(RendererSprite* sprite, Vector3 vtx1, Vector3 vtx2, Vector3 vtx3, Vector3 vtx4, Vector4 color, float rotation, float scale, float width, float height, BLEND_MODES blendMode);
|
void AddSprite3D(RendererSprite* sprite, Vector3 vtx1, Vector3 vtx2, Vector3 vtx3, Vector3 vtx4, Vector4 color, float rotation, float scale, float width, float height, BLEND_MODES blendMode);
|
||||||
void AddLine3D(Vector3 start, Vector3 end, Vector4 color);
|
void AddLine3D(Vector3 start, Vector3 end, Vector4 color);
|
||||||
bool ChangeScreenResolution(int width, int height, int frequency, bool windowed);
|
bool ChangeScreenResolution(int width, int height, int frequency, bool windowed);
|
||||||
bool DrawBar(int x, int y, int w, int h, int percent, int color1, int color2);
|
bool DrawBar(float percent, const RendererHUDBar* const bar);
|
||||||
private:
|
private:
|
||||||
void drawFootprints();
|
void drawFootprints();
|
||||||
};
|
};
|
|
@ -8,8 +8,7 @@ bool Renderer11::PrepareDataForTheRenderer()
|
||||||
m_moveableObjects = (RendererObject * *)malloc(sizeof(RendererObject*) * ID_NUMBER_OBJECTS);
|
m_moveableObjects = (RendererObject * *)malloc(sizeof(RendererObject*) * ID_NUMBER_OBJECTS);
|
||||||
ZeroMemory(m_moveableObjects, sizeof(RendererObject*) * ID_NUMBER_OBJECTS);
|
ZeroMemory(m_moveableObjects, sizeof(RendererObject*) * ID_NUMBER_OBJECTS);
|
||||||
|
|
||||||
m_spriteSequences = (RendererSpriteSequence * *)malloc(sizeof(RendererSpriteSequence*) * ID_NUMBER_OBJECTS);
|
m_spriteSequences = vector<RendererSpriteSequence>(ID_NUMBER_OBJECTS);
|
||||||
ZeroMemory(m_spriteSequences, sizeof(RendererSpriteSequence*) * ID_NUMBER_OBJECTS);
|
|
||||||
|
|
||||||
m_staticObjects = (RendererObject * *)malloc(sizeof(RendererObject*) * NUM_STATICS);
|
m_staticObjects = (RendererObject * *)malloc(sizeof(RendererObject*) * NUM_STATICS);
|
||||||
ZeroMemory(m_staticObjects, sizeof(RendererObject*) * NUM_STATICS);
|
ZeroMemory(m_staticObjects, sizeof(RendererObject*) * NUM_STATICS);
|
||||||
|
@ -23,17 +22,18 @@ bool Renderer11::PrepareDataForTheRenderer()
|
||||||
short* animatedPtr = AnimatedTextureRanges;
|
short* animatedPtr = AnimatedTextureRanges;
|
||||||
animatedPtr++;
|
animatedPtr++;
|
||||||
|
|
||||||
m_animatedTextureSets = (RendererAnimatedTextureSet * *)malloc(sizeof(RendererAnimatedTextureSet*) * NUM_ANIMATED_SETS);
|
m_animatedTextureSets = vector<RendererAnimatedTextureSet>(NUM_ANIMATED_SETS);
|
||||||
m_numAnimatedTextureSets = numSets;
|
m_numAnimatedTextureSets = numSets;
|
||||||
|
|
||||||
for (int i = 0; i < numSets; i++)
|
for (int i = 0; i < numSets; i++)
|
||||||
{
|
{
|
||||||
RendererAnimatedTextureSet* set = new RendererAnimatedTextureSet();
|
m_animatedTextureSets[i] = RendererAnimatedTextureSet();
|
||||||
|
RendererAnimatedTextureSet& const set = m_animatedTextureSets[i];
|
||||||
short numTextures = *animatedPtr + 1;
|
short numTextures = *animatedPtr + 1;
|
||||||
animatedPtr++;
|
animatedPtr++;
|
||||||
|
|
||||||
set->Textures = (RendererAnimatedTexture * *)malloc(sizeof(RendererAnimatedTexture) * numTextures);
|
set.Textures = vector<RendererAnimatedTexture>(numTextures);
|
||||||
set->NumTextures = numTextures;
|
set.NumTextures = numTextures;
|
||||||
|
|
||||||
for (int j = 0; j < numTextures; j++)
|
for (int j = 0; j < numTextures; j++)
|
||||||
{
|
{
|
||||||
|
@ -42,22 +42,19 @@ bool Renderer11::PrepareDataForTheRenderer()
|
||||||
|
|
||||||
OBJECT_TEXTURE* texture = &ObjectTextures[textureId];
|
OBJECT_TEXTURE* texture = &ObjectTextures[textureId];
|
||||||
int tile = texture->tileAndFlag & 0x7FFF;
|
int tile = texture->tileAndFlag & 0x7FFF;
|
||||||
|
set.Textures[j] = RendererAnimatedTexture();
|
||||||
RendererAnimatedTexture* newTexture = new RendererAnimatedTexture();
|
RendererAnimatedTexture& const newTexture = set.Textures[j];
|
||||||
newTexture->Id = textureId;
|
newTexture.Id = textureId;
|
||||||
|
|
||||||
for (int k = 0; k < 4; k++)
|
for (int k = 0; k < 4; k++)
|
||||||
{
|
{
|
||||||
float x = (texture->vertices[k].x * 256.0f + 0.5f + GET_ATLAS_PAGE_X(tile)) / (float)TEXTURE_ATLAS_SIZE;
|
float x = (texture->vertices[k].x * 256.0f + 0.5f + GET_ATLAS_PAGE_X(tile)) / (float)TEXTURE_ATLAS_SIZE;
|
||||||
float y = (texture->vertices[k].y * 256.0f + 0.5f + GET_ATLAS_PAGE_Y(tile)) / (float)TEXTURE_ATLAS_SIZE;
|
float y = (texture->vertices[k].y * 256.0f + 0.5f + GET_ATLAS_PAGE_Y(tile)) / (float)TEXTURE_ATLAS_SIZE;
|
||||||
|
|
||||||
newTexture->UV[k] = Vector2(x, y);
|
newTexture.UV[k] = Vector2(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
set->Textures[j] = newTexture;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_animatedTextureSets[i] = set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 1: create the texture atlas
|
// Step 1: create the texture atlas
|
||||||
|
@ -142,7 +139,7 @@ bool Renderer11::PrepareDataForTheRenderer()
|
||||||
r.RoomNumber = i;
|
r.RoomNumber = i;
|
||||||
r.Room = room;
|
r.Room = room;
|
||||||
r.AmbientLight = Vector4(room->ambient.b / 255.0f, room->ambient.g / 255.0f, room->ambient.r / 255.0f, 1.0f);
|
r.AmbientLight = Vector4(room->ambient.b / 255.0f, room->ambient.g / 255.0f, room->ambient.r / 255.0f, 1.0f);
|
||||||
r.LightsToDraw.Reserve(32);
|
r.LightsToDraw = vector<RendererLight*>(MAX_LIGHTS);
|
||||||
r.Statics.resize(128);
|
r.Statics.resize(128);
|
||||||
|
|
||||||
if (room->NumVertices == 0)
|
if (room->NumVertices == 0)
|
||||||
|
@ -793,12 +790,12 @@ bool Renderer11::PrepareDataForTheRenderer()
|
||||||
{
|
{
|
||||||
short numSprites = abs(obj->nmeshes);
|
short numSprites = abs(obj->nmeshes);
|
||||||
short baseSprite = obj->meshIndex;
|
short baseSprite = obj->meshIndex;
|
||||||
|
m_spriteSequences[MoveablesIds[i]] = RendererSpriteSequence(MoveablesIds[i], numSprites);
|
||||||
RendererSpriteSequence* sequence = new RendererSpriteSequence(MoveablesIds[i], numSprites);
|
RendererSpriteSequence& sequence = m_spriteSequences[MoveablesIds[i]];
|
||||||
|
|
||||||
for (int j = baseSprite; j < baseSprite + numSprites; j++)
|
for (int j = baseSprite; j < baseSprite + numSprites; j++)
|
||||||
{
|
{
|
||||||
sequence->SpritesList[j - baseSprite] = m_sprites[j];
|
sequence.SpritesList[j - baseSprite] = m_sprites[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
m_spriteSequences[MoveablesIds[i]] = sequence;
|
m_spriteSequences[MoveablesIds[i]] = sequence;
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
#include "../Game/rope.h"
|
#include "../Game/rope.h"
|
||||||
#include "../Game/tomb4fx.h"
|
#include "../Game/tomb4fx.h"
|
||||||
extern GUNSHELL_STRUCT Gunshells[MAX_GUNSHELL];
|
extern GUNSHELL_STRUCT Gunshells[MAX_GUNSHELL];
|
||||||
|
extern RendererHUDBar* g_DashBar;
|
||||||
|
extern RendererHUDBar* g_SFXVolumeBar;
|
||||||
|
extern RendererHUDBar* g_MusicVolumeBar;
|
||||||
int Renderer11::DrawPickup(short objectNum)
|
int Renderer11::DrawPickup(short objectNum)
|
||||||
{
|
{
|
||||||
drawObjectOn2DPosition(700 + PickupX, 450, objectNum, 0, m_pickupRotation, 0); // TODO: + PickupY
|
drawObjectOn2DPosition(700 + PickupX, 450, objectNum, 0, m_pickupRotation, 0); // TODO: + PickupY
|
||||||
|
@ -385,8 +388,8 @@ bool Renderer11::drawGunShells()
|
||||||
m_stItem.AmbientLight = room.AmbientLight;
|
m_stItem.AmbientLight = room.AmbientLight;
|
||||||
memcpy(m_stItem.BonesMatrices, &Matrix::Identity, sizeof(Matrix));
|
memcpy(m_stItem.BonesMatrices, &Matrix::Identity, sizeof(Matrix));
|
||||||
|
|
||||||
m_stLights.NumLights = item->Lights.Size();
|
m_stLights.NumLights = item->Lights.size();
|
||||||
for (int j = 0; j < item->Lights.Size(); j++)
|
for (int j = 0; j < item->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
@ -847,7 +850,8 @@ int Renderer11::drawInventoryScene()
|
||||||
PrintString(200, y, g_GameFlow->GetString(STRING_MUSIC_VOLUME),
|
PrintString(200, y, g_GameFlow->GetString(STRING_MUSIC_VOLUME),
|
||||||
PRINTSTRING_COLOR_ORANGE,
|
PRINTSTRING_COLOR_ORANGE,
|
||||||
PRINTSTRING_OUTLINE | (ring->selectedIndex == 2 ? PRINTSTRING_BLINK : 0));
|
PRINTSTRING_OUTLINE | (ring->selectedIndex == 2 ? PRINTSTRING_BLINK : 0));
|
||||||
DrawBar(400, y + 4, 150, 18, ring->Configuration.MusicVolume, 0x0000FF, 0x0000FF);
|
//DrawBar(400, y + 4, 150, 18, ring->Configuration.MusicVolume, 0x0000FF, 0x0000FF);
|
||||||
|
DrawBar(ring->Configuration.MusicVolume / 100.0f, g_MusicVolumeBar);
|
||||||
|
|
||||||
y += 25;
|
y += 25;
|
||||||
|
|
||||||
|
@ -855,8 +859,8 @@ int Renderer11::drawInventoryScene()
|
||||||
PrintString(200, y, g_GameFlow->GetString(STRING_SFX_VOLUME),
|
PrintString(200, y, g_GameFlow->GetString(STRING_SFX_VOLUME),
|
||||||
PRINTSTRING_COLOR_ORANGE,
|
PRINTSTRING_COLOR_ORANGE,
|
||||||
PRINTSTRING_OUTLINE | (ring->selectedIndex == 3 ? PRINTSTRING_BLINK : 0));
|
PRINTSTRING_OUTLINE | (ring->selectedIndex == 3 ? PRINTSTRING_BLINK : 0));
|
||||||
DrawBar(400, y + 4, 150, 18, ring->Configuration.SfxVolume, 0x0000FF, 0x0000FF);
|
//DrawBar(400, y + 4, 150, 18, ring->Configuration.SfxVolume, 0x0000FF, 0x0000FF);
|
||||||
|
DrawBar(ring->Configuration.SfxVolume / 100.0f, g_SFXVolumeBar);
|
||||||
y += 25;
|
y += 25;
|
||||||
|
|
||||||
// Apply and cancel
|
// Apply and cancel
|
||||||
|
@ -1099,8 +1103,8 @@ int Renderer11::drawInventoryScene()
|
||||||
if (g_Inventory->GetType() == INV_TYPE_TITLE && g_GameFlow->TitleType == TITLE_FLYBY && drawLogo)
|
if (g_Inventory->GetType() == INV_TYPE_TITLE && g_GameFlow->TitleType == TITLE_FLYBY && drawLogo)
|
||||||
{
|
{
|
||||||
// Draw main logo
|
// Draw main logo
|
||||||
float factorX = ScreenWidth / 800.0f;
|
float factorX = (float)ScreenWidth / REFERENCE_RES_WIDTH;
|
||||||
float factorY = ScreenHeight / 600.0f;
|
float factorY = (float)ScreenHeight / REFERENCE_RES_HEIGHT;
|
||||||
|
|
||||||
RECT rect;
|
RECT rect;
|
||||||
rect.left = 250 * factorX;
|
rect.left = 250 * factorX;
|
||||||
|
@ -1328,7 +1332,6 @@ bool Renderer11::drawLines2D()
|
||||||
|
|
||||||
m_context->VSSetShader(m_vsSolid, NULL, 0);
|
m_context->VSSetShader(m_vsSolid, NULL, 0);
|
||||||
m_context->PSSetShader(m_psSolid, NULL, 0);
|
m_context->PSSetShader(m_psSolid, NULL, 0);
|
||||||
|
|
||||||
Matrix world = Matrix::CreateOrthographicOffCenter(0, ScreenWidth, ScreenHeight, 0, m_viewport.MinDepth, m_viewport.MaxDepth);
|
Matrix world = Matrix::CreateOrthographicOffCenter(0, ScreenWidth, ScreenHeight, 0, m_viewport.MinDepth, m_viewport.MaxDepth);
|
||||||
|
|
||||||
m_stCameraMatrices.View = Matrix::Identity;
|
m_stCameraMatrices.View = Matrix::Identity;
|
||||||
|
@ -1782,7 +1785,7 @@ void Renderer11::DrawLoadingScreen(char* fileName)
|
||||||
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
|
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
|
||||||
|
|
||||||
m_swapChain->Present(0, 0);
|
m_swapChain->Present(0, 0);
|
||||||
|
m_context->ClearState();
|
||||||
if (m_fadeStatus == RENDERER_FADE_STATUS::FADE_IN && m_fadeFactor >= 1.0f)
|
if (m_fadeStatus == RENDERER_FADE_STATUS::FADE_IN && m_fadeFactor >= 1.0f)
|
||||||
{
|
{
|
||||||
m_fadeStatus = RENDERER_FADE_STATUS::NO_FADE;
|
m_fadeStatus = RENDERER_FADE_STATUS::NO_FADE;
|
||||||
|
@ -2024,7 +2027,7 @@ bool Renderer11::drawScene(bool dump)
|
||||||
// Bars
|
// Bars
|
||||||
int flash = FlashIt();
|
int flash = FlashIt();
|
||||||
if (DashTimer < 120)
|
if (DashTimer < 120)
|
||||||
DrawBar(630, 32, 150, 12, 100 * (unsigned short)DashTimer / 120, 0xA0A000, 0xA000);
|
DrawBar(DashTimer / 120.0f, g_DashBar);
|
||||||
UpdateHealtBar(flash);
|
UpdateHealtBar(flash);
|
||||||
UpdateAirBar(flash);
|
UpdateAirBar(flash);
|
||||||
DrawAllPickups();
|
DrawAllPickups();
|
||||||
|
@ -2165,8 +2168,8 @@ bool Renderer11::drawAnimatingItem(RendererItem* item, bool transparent, bool an
|
||||||
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
||||||
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
||||||
|
|
||||||
m_stLights.NumLights = item->Lights.Size();
|
m_stLights.NumLights = item->Lights.size();
|
||||||
for (int j = 0; j < item->Lights.Size(); j++)
|
for (int j = 0; j < item->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
@ -2339,8 +2342,8 @@ bool Renderer11::drawRooms(bool transparent, bool animated)
|
||||||
{
|
{
|
||||||
RendererRoom* room = m_roomsToDraw[i];
|
RendererRoom* room = m_roomsToDraw[i];
|
||||||
|
|
||||||
m_stLights.NumLights = room->LightsToDraw.Size();
|
m_stLights.NumLights = room->LightsToDraw.size();
|
||||||
for (int j = 0; j < room->LightsToDraw.Size(); j++)
|
for (int j = 0; j < room->LightsToDraw.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], room->LightsToDraw[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], room->LightsToDraw[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(1, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(1, 1, &m_cbLights);
|
||||||
|
|
|
@ -1,35 +1,116 @@
|
||||||
#include "Renderer11.h"
|
#include "Renderer11.h"
|
||||||
|
|
||||||
bool Renderer11::DrawBar(int x, int y, int w, int h, int percent, int color1, int color2)
|
RendererHUDBar* g_HealthBar;
|
||||||
|
RendererHUDBar* g_AirBar;
|
||||||
|
RendererHUDBar* g_DashBar;
|
||||||
|
RendererHUDBar* g_MusicVolumeBar;
|
||||||
|
RendererHUDBar* g_SFXVolumeBar;
|
||||||
|
|
||||||
|
bool Renderer11::initialiseBars()
|
||||||
{
|
{
|
||||||
byte r1 = (color1 >> 16) & 0xFF;
|
array<Vector4, 9> healthColors = {
|
||||||
byte g1 = (color1 >> 8) & 0xFF;
|
//top
|
||||||
byte b1 = (color1 >> 0) & 0xFF;
|
Vector4(82 / 255.0f,0,0,1),
|
||||||
|
Vector4(36 / 255.0f,46 / 255.0f,0,1),
|
||||||
|
Vector4(0,82 / 255.0f,0,1),
|
||||||
|
//center
|
||||||
|
Vector4(159 / 255.0f,0,0,1),
|
||||||
|
Vector4(78 / 255.0f,81 / 255.0f,0,1),
|
||||||
|
Vector4(0,158 / 255.0f,0,1),
|
||||||
|
//bottom
|
||||||
|
Vector4(82 / 255.0f,0,0,1),
|
||||||
|
Vector4(36 / 255.0f,46 / 255.0f,0,1),
|
||||||
|
Vector4(0,82 / 255.0f,0,1),
|
||||||
|
};
|
||||||
|
|
||||||
byte r2 = (color2 >> 16) & 0xFF;
|
array<Vector4, 9> airColors = {
|
||||||
byte g2 = (color2 >> 8) & 0xFF;
|
//top
|
||||||
byte b2 = (color2 >> 0) & 0xFF;
|
Vector4(0 ,0,90 / 255.0f,1),
|
||||||
|
Vector4(0 / 255.0f,28 / 255.0f,84 / 255.0f,1),
|
||||||
|
Vector4(0 ,47 / 255.0f,96/255.0f,1),
|
||||||
|
//center
|
||||||
|
Vector4(0,3 / 255,153 / 255.0f,1),
|
||||||
|
Vector4(0,39 / 255,155 / 255.0f,1),
|
||||||
|
Vector4(0,78 / 255.0f,159/255.0f,1),
|
||||||
|
//bottom
|
||||||
|
Vector4(0 ,0,90 / 255.0f,1),
|
||||||
|
Vector4(0 / 255.0f,28 / 255.0f,84 / 255.0f,1),
|
||||||
|
Vector4(0 ,47 / 255.0f,96 / 255.0f,1),
|
||||||
|
};
|
||||||
|
|
||||||
float factorX = ScreenWidth / 800.0f;
|
array<Vector4, 9> dashColors = {
|
||||||
float factorY = ScreenHeight / 600.0f;
|
//top
|
||||||
|
Vector4(78 / 255.0f,4 / 255.0f,0,1),
|
||||||
|
Vector4(161 / 255.0f,25 / 255.0f,84 / 255.0f,1),
|
||||||
|
Vector4(136 / 255.0f,117 / 255.0f,5 / 255.0f,1),
|
||||||
|
//center
|
||||||
|
Vector4(211 / 255.0f,29 / 255.0f,23 / 255.0f,1),
|
||||||
|
Vector4(245 / 255.0f,119 / 255,24 / 255.0f,1),
|
||||||
|
Vector4(207 / 255.0f,183 / 255.0f,27 / 255.0f,1),
|
||||||
|
//bottom
|
||||||
|
Vector4(78 / 255.0f,4 / 255.0f,0,1),
|
||||||
|
Vector4(161 / 255.0f,25 / 255.0f,84 / 255.0f,1),
|
||||||
|
Vector4(136 / 255.0f,117 / 255.0f,5 / 255.0f,1),
|
||||||
|
};
|
||||||
|
array<Vector4, 9> soundSettingColors = {
|
||||||
|
//top
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
//center
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
//bottom
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
Vector4(0.18f,0.3f,0.72f,1),
|
||||||
|
};
|
||||||
|
g_HealthBar = new RendererHUDBar(m_device, 20, 32, 150, 8, 1, healthColors);
|
||||||
|
g_AirBar = new RendererHUDBar(m_device, 630, 32, 150, 8, 1, airColors);
|
||||||
|
g_DashBar = new RendererHUDBar(m_device, 630, 32 + 8 + 4, 150, 8, 1, dashColors);
|
||||||
|
g_MusicVolumeBar = new RendererHUDBar(m_device, 400, 212, 150, 8, 1, soundSettingColors);
|
||||||
|
g_SFXVolumeBar = new RendererHUDBar(m_device, 400, 230, 150, 8, 1, soundSettingColors);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool Renderer11::DrawBar(float percent,const RendererHUDBar* const bar)
|
||||||
|
{
|
||||||
|
UINT strides = sizeof(RendererVertex);
|
||||||
|
UINT offset = 0;
|
||||||
|
float color[] = { 0,0,0,1.0f };
|
||||||
|
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.0f, 0xFF);
|
||||||
|
m_context->IASetInputLayout(m_inputLayout);
|
||||||
|
m_context->IASetVertexBuffers(0, 1, &bar->vertexBufferBorder->Buffer, &strides, &offset);
|
||||||
|
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||||
|
m_context->IASetIndexBuffer(bar->indexBufferBorder->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||||
|
m_context->VSSetConstantBuffers(0, 1, &m_cbHUD);
|
||||||
|
m_context->VSSetShader(m_vsHUD, NULL, 0);
|
||||||
|
m_context->PSSetShaderResources(0, 1, &m_HUDBarBorderTexture->ShaderResourceView);
|
||||||
|
ID3D11SamplerState* sampler = m_states->LinearClamp();
|
||||||
|
m_context->PSSetSamplers(0, 1, &sampler);
|
||||||
|
m_context->PSSetShader(m_psHUDTexture, NULL, 0);
|
||||||
|
m_context->OMSetBlendState(m_states->Opaque(), NULL, 0xFFFFFFFF);
|
||||||
|
m_context->OMSetDepthStencilState(m_states->DepthNone(), NULL);
|
||||||
|
m_context->RSSetState(m_states->CullNone());
|
||||||
|
m_context->DrawIndexed(56, 0, 0);
|
||||||
|
|
||||||
int realX = x * factorX;
|
|
||||||
int realY = y * factorY;
|
|
||||||
int realW = w * factorX;
|
|
||||||
int realH = h * factorY;
|
|
||||||
|
|
||||||
int realPercent = percent / 100.0f * realW;
|
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.0f, 0xFF);
|
||||||
|
m_context->IASetInputLayout(m_inputLayout);
|
||||||
|
m_context->IASetVertexBuffers(0, 1, &bar->vertexBuffer->Buffer, &strides, &offset);
|
||||||
|
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||||
|
m_context->IASetIndexBuffer(bar->indexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||||
|
m_stHUDBar.Percent = percent;
|
||||||
|
updateConstantBuffer(m_cbHUDBar, &m_stHUDBar, sizeof(CHUDBarBuffer));
|
||||||
|
m_context->VSSetConstantBuffers(0, 1, &m_cbHUD);
|
||||||
|
m_context->PSSetConstantBuffers(0, 1, &m_cbHUDBar);
|
||||||
|
m_context->VSSetShader(m_vsHUD,NULL,0);
|
||||||
|
m_context->PSSetShader(m_psHUDBarColor, NULL,0);
|
||||||
|
m_context->OMSetBlendState(m_states->Opaque(), NULL,0xFFFFFFFF);
|
||||||
|
m_context->OMSetDepthStencilState(m_states->DepthNone(),NULL);
|
||||||
|
m_context->RSSetState(m_states->CullNone());
|
||||||
|
m_context->DrawIndexed(24, 0, 0);
|
||||||
|
|
||||||
for (int i = 0; i < realH; i++)
|
|
||||||
AddLine2D(realX, realY + i, realX + realW, realY + i, 0, 0, 0, 255);
|
|
||||||
|
|
||||||
for (int i = 0; i < realH; i++)
|
|
||||||
AddLine2D(realX, realY + i, realX + realPercent, realY + i, r1, g1, b1, 255);
|
|
||||||
|
|
||||||
AddLine2D(realX, realY, realX + realW, realY, 255, 255, 255, 255);
|
|
||||||
AddLine2D(realX, realY + realH, realX + realW, realY + realH, 255, 255, 255, 255);
|
|
||||||
AddLine2D(realX, realY, realX, realY + realH, 255, 255, 255, 255);
|
|
||||||
AddLine2D(realX + realW, realY, realX + realW, realY + realH + 1, 255, 255, 255, 255);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,8 +323,8 @@ bool Renderer11::drawGunFlashes()
|
||||||
m_stItem.AmbientLight = room.AmbientLight;
|
m_stItem.AmbientLight = room.AmbientLight;
|
||||||
memcpy(m_stItem.BonesMatrices, &Matrix::Identity, sizeof(Matrix));
|
memcpy(m_stItem.BonesMatrices, &Matrix::Identity, sizeof(Matrix));
|
||||||
|
|
||||||
m_stLights.NumLights = item->Lights.Size();
|
m_stLights.NumLights = item->Lights.size();
|
||||||
for (int j = 0; j < item->Lights.Size(); j++)
|
for (int j = 0; j < item->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
@ -338,7 +338,7 @@ bool Renderer11::drawGunFlashes()
|
||||||
short rotationX = 0;
|
short rotationX = 0;
|
||||||
|
|
||||||
m_context->OMSetBlendState(m_states->Additive(), NULL, 0xFFFFFFFF);
|
m_context->OMSetBlendState(m_states->Additive(), NULL, 0xFFFFFFFF);
|
||||||
m_context->OMSetDepthStencilState(m_states->DepthNone(), 0);
|
m_context->OMSetDepthStencilState(m_states->DepthRead(), 0);
|
||||||
|
|
||||||
if (Lara.weaponItem != WEAPON_FLARE && Lara.weaponItem != WEAPON_SHOTGUN && Lara.weaponItem != WEAPON_CROSSBOW)
|
if (Lara.weaponItem != WEAPON_FLARE && Lara.weaponItem != WEAPON_SHOTGUN && Lara.weaponItem != WEAPON_CROSSBOW)
|
||||||
{
|
{
|
||||||
|
@ -670,8 +670,8 @@ bool Renderer11::drawEffect(RendererEffect* effect, bool transparent)
|
||||||
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
||||||
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
||||||
|
|
||||||
m_stLights.NumLights = effect->Lights.Size();
|
m_stLights.NumLights = effect->Lights.size();
|
||||||
for (int j = 0; j < effect->Lights.Size(); j++)
|
for (int j = 0; j < effect->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], effect->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], effect->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
@ -763,8 +763,8 @@ bool Renderer11::drawWaterfalls()
|
||||||
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
updateConstantBuffer(m_cbItem, &m_stItem, sizeof(CItemBuffer));
|
||||||
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
m_context->VSSetConstantBuffers(1, 1, &m_cbItem);
|
||||||
|
|
||||||
m_stLights.NumLights = item->Lights.Size();
|
m_stLights.NumLights = item->Lights.size();
|
||||||
for (int j = 0; j < item->Lights.Size(); j++)
|
for (int j = 0; j < item->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
|
|
@ -6,7 +6,7 @@ void Renderer11::collectRooms()
|
||||||
for (int i = 0; i < NumberRooms; i++)
|
for (int i = 0; i < NumberRooms; i++)
|
||||||
{
|
{
|
||||||
m_rooms[i].Visited = false;
|
m_rooms[i].Visited = false;
|
||||||
m_rooms[i].LightsToDraw.Clear();
|
m_rooms[i].LightsToDraw.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector4 vp = Vector4(-1.0f, -1.0f, 1.0f, 1.0f);
|
Vector4 vp = Vector4(-1.0f, -1.0f, 1.0f, 1.0f);
|
||||||
|
@ -92,7 +92,7 @@ void Renderer11::collectStatics(short roomNumber)
|
||||||
|
|
||||||
void Renderer11::collectLightsForEffect(short roomNumber, RendererEffect * effect)
|
void Renderer11::collectLightsForEffect(short roomNumber, RendererEffect * effect)
|
||||||
{
|
{
|
||||||
effect->Lights.Clear();
|
effect->Lights.clear();
|
||||||
if (m_rooms.size() <= roomNumber) {
|
if (m_rooms.size() <= roomNumber) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -188,13 +188,13 @@ void Renderer11::collectLightsForEffect(short roomNumber, RendererEffect * effec
|
||||||
|
|
||||||
for (int i = 0; i < min(MAX_LIGHTS_PER_ITEM, m_tempItemLights.size()); i++)
|
for (int i = 0; i < min(MAX_LIGHTS_PER_ITEM, m_tempItemLights.size()); i++)
|
||||||
{
|
{
|
||||||
effect->Lights.Add(m_tempItemLights[i]);
|
effect->Lights.push_back(m_tempItemLights[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer11::collectLightsForItem(short roomNumber, RendererItem * item)
|
void Renderer11::collectLightsForItem(short roomNumber, RendererItem * item)
|
||||||
{
|
{
|
||||||
item->Lights.Clear();
|
item->Lights.clear();
|
||||||
if (m_rooms.size() <= roomNumber) {
|
if (m_rooms.size() <= roomNumber) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -303,7 +303,7 @@ void Renderer11::collectLightsForItem(short roomNumber, RendererItem * item)
|
||||||
|
|
||||||
for (int i = 0; i < min(MAX_LIGHTS_PER_ITEM, m_tempItemLights.size()); i++)
|
for (int i = 0; i < min(MAX_LIGHTS_PER_ITEM, m_tempItemLights.size()); i++)
|
||||||
{
|
{
|
||||||
item->Lights.Add(m_tempItemLights[i]);
|
item->Lights.push_back(m_tempItemLights[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item->Item->objectNumber == ID_LARA)
|
if (item->Item->objectNumber == ID_LARA)
|
||||||
|
@ -355,7 +355,7 @@ void Renderer11::collectLightsForRoom(short roomNumber)
|
||||||
// If the distance is less than the circle's radius, an intersection occurs
|
// If the distance is less than the circle's radius, an intersection occurs
|
||||||
float distanceSquared = (distanceX * distanceX) + (distanceY * distanceY);
|
float distanceSquared = (distanceX * distanceX) + (distanceY * distanceY);
|
||||||
if (distanceSquared < SQUARE(light->Out))
|
if (distanceSquared < SQUARE(light->Out))
|
||||||
room.LightsToDraw.Add(light);
|
room.LightsToDraw.push_back(light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,9 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
||||||
if (m_caustics[i] == NULL)
|
if (m_caustics[i] == NULL)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_HUDBarBorderTexture = Texture2D::LoadFromFile(m_device, "bar_border.png");
|
||||||
|
if (!m_HUDBarBorderTexture)
|
||||||
|
return false;
|
||||||
m_titleScreen = Texture2D::LoadFromFile(m_device, (char*)g_GameFlow->GetLevel(0)->Background.c_str());
|
m_titleScreen = Texture2D::LoadFromFile(m_device, (char*)g_GameFlow->GetLevel(0)->Background.c_str());
|
||||||
if (m_titleScreen == NULL)
|
if (m_titleScreen == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
@ -164,6 +166,19 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
||||||
if (m_psShadowMap == NULL)
|
if (m_psShadowMap == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
m_vsHUD = compileVertexShader("Shaders\\HUD\\DX11_VS_HUD.hlsl", "VS", "vs_4_0", &blob);
|
||||||
|
if (m_vsHUD == NULL)
|
||||||
|
return false;
|
||||||
|
m_psHUDColor = compilePixelShader("Shaders\\HUD\\DX11_PS_HUD.hlsl", "PSColored", "ps_4_0", &blob);
|
||||||
|
if (m_psHUDColor == NULL)
|
||||||
|
return false;
|
||||||
|
m_psHUDTexture = compilePixelShader("Shaders\\HUD\\DX11_PS_HUD.hlsl", "PSTextured", "ps_4_0", &blob);
|
||||||
|
if (m_psHUDTexture == NULL)
|
||||||
|
return false;
|
||||||
|
m_psHUDBarColor = compilePixelShader("Shaders\\HUD\\DX11_PS_HUDBar.hlsl", "PSColored", "ps_4_0", &blob);
|
||||||
|
if (m_psHUDBarColor == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Initialise constant buffers
|
// Initialise constant buffers
|
||||||
m_cbCameraMatrices = createConstantBuffer(sizeof(CCameraMatrixBuffer));
|
m_cbCameraMatrices = createConstantBuffer(sizeof(CCameraMatrixBuffer));
|
||||||
m_cbItem = createConstantBuffer(sizeof(CItemBuffer));
|
m_cbItem = createConstantBuffer(sizeof(CItemBuffer));
|
||||||
|
@ -172,6 +187,12 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
||||||
m_cbMisc = createConstantBuffer(sizeof(CMiscBuffer));
|
m_cbMisc = createConstantBuffer(sizeof(CMiscBuffer));
|
||||||
m_cbShadowMap = createConstantBuffer(sizeof(CShadowLightBuffer));
|
m_cbShadowMap = createConstantBuffer(sizeof(CShadowLightBuffer));
|
||||||
m_cbRoom = createConstantBuffer(sizeof(CRoomBuffer));
|
m_cbRoom = createConstantBuffer(sizeof(CRoomBuffer));
|
||||||
|
//Prepare HUD Constant buffer
|
||||||
|
m_cbHUDBar = createConstantBuffer(sizeof(CHUDBarBuffer));
|
||||||
|
m_cbHUD = createConstantBuffer(sizeof(CHUDBuffer));
|
||||||
|
m_stHUD.View = Matrix::CreateLookAt(Vector3::Zero, Vector3(0, 0, 1), Vector3(0, -1, 0)).Transpose();
|
||||||
|
m_stHUD.Projection =Matrix::CreateOrthographicOffCenter(0, REFERENCE_RES_WIDTH, 0, REFERENCE_RES_HEIGHT, 0, 1.0f).Transpose();
|
||||||
|
updateConstantBuffer(m_cbHUD, &m_stHUD, sizeof(CHUDBuffer));
|
||||||
m_currentCausticsFrame = 0;
|
m_currentCausticsFrame = 0;
|
||||||
m_firstWeather = true;
|
m_firstWeather = true;
|
||||||
|
|
||||||
|
@ -193,8 +214,8 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
||||||
|
|
||||||
for (int i = 0; i < NUM_ITEMS; i++)
|
for (int i = 0; i < NUM_ITEMS; i++)
|
||||||
{
|
{
|
||||||
m_items[i].Lights.Reserve(MAX_LIGHTS_PER_ITEM);
|
m_items[i].Lights = vector<RendererLight*>(MAX_LIGHTS_PER_ITEM);
|
||||||
m_effects[i].Lights.Reserve(MAX_LIGHTS_PER_ITEM);
|
m_effects[i].Lights = vector<RendererLight*>(MAX_LIGHTS_PER_ITEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_textureAtlas = NULL;
|
m_textureAtlas = NULL;
|
||||||
|
@ -211,7 +232,7 @@ bool Renderer11::Initialise(int w, int h, int refreshRate, bool windowed, HWND h
|
||||||
blendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
|
blendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
|
||||||
blendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
|
blendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
|
||||||
m_device->CreateBlendState(&blendStateDesc, &m_subtractiveBlendState);
|
m_device->CreateBlendState(&blendStateDesc, &m_subtractiveBlendState);
|
||||||
|
initialiseBars();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,7 +423,7 @@ bool Renderer11::Create()
|
||||||
#ifdef _RELEASE
|
#ifdef _RELEASE
|
||||||
res = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, levels, 1, D3D11_SDK_VERSION, &m_device, &featureLevel, &m_context);
|
res = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, levels, 1, D3D11_SDK_VERSION, &m_device, &featureLevel, &m_context);
|
||||||
#else
|
#else
|
||||||
res = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, levels, 1, D3D11_SDK_VERSION, &m_device, &featureLevel, &m_context); // D3D11_CREATE_DEVICE_DEBUG
|
res = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_DEBUG, levels, 1, D3D11_SDK_VERSION, &m_device, &featureLevel, &m_context); // D3D11_CREATE_DEVICE_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (FAILED(res))
|
if (FAILED(res))
|
||||||
|
|
|
@ -304,8 +304,8 @@ bool Renderer11::drawLara(bool transparent, bool shadowMap)
|
||||||
|
|
||||||
if (!shadowMap)
|
if (!shadowMap)
|
||||||
{
|
{
|
||||||
m_stLights.NumLights = item->Lights.Size();
|
m_stLights.NumLights = item->Lights.size();
|
||||||
for (int j = 0; j < item->Lights.Size(); j++)
|
for (int j = 0; j < item->Lights.size(); j++)
|
||||||
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
memcpy(&m_stLights.Lights[j], item->Lights[j], sizeof(ShaderLight));
|
||||||
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
updateConstantBuffer(m_cbLights, &m_stLights, sizeof(CLightBuffer));
|
||||||
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
m_context->PSSetConstantBuffers(2, 1, &m_cbLights);
|
||||||
|
|
19
TR5Main/Shaders/HUD/DX11_PS_HUD.hlsl
Normal file
19
TR5Main/Shaders/HUD/DX11_PS_HUD.hlsl
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
half4 PSColored(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
return input.Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSTextured(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
float4 output = Texture.Sample(Sampler, input.UV);
|
||||||
|
return output;
|
||||||
|
}
|
41
TR5Main/Shaders/HUD/DX11_PS_HUDBar.hlsl
Normal file
41
TR5Main/Shaders/HUD/DX11_PS_HUDBar.hlsl
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
cbuffer HUDBarBuffer : register(b0)
|
||||||
|
{
|
||||||
|
float Percent;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
half4 glassOverlay(float2 UVs, half4 originalColor) {
|
||||||
|
float y = UVs.y;
|
||||||
|
y -= 0.15f;
|
||||||
|
y = distance(0.1f, y);
|
||||||
|
y = 1 - y;
|
||||||
|
y = pow(y, 4);
|
||||||
|
y = saturate(y);
|
||||||
|
half4 color = originalColor;
|
||||||
|
return saturate(lerp(color, (color * 1.6f)+half4(0.4f, 0.4f, 0.4f, 0.0f), y));
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSColored(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
if (input.UV.x > Percent) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
return glassOverlay(input.UV,input.Color);
|
||||||
|
}
|
||||||
|
|
||||||
|
half4 PSTextured(PixelShaderInput input) : SV_TARGET
|
||||||
|
{
|
||||||
|
if (input.UV.x > Percent) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
float4 color = Texture.Sample(Sampler, input.UV);
|
||||||
|
return glassOverlay(input.UV, color);
|
||||||
|
}
|
31
TR5Main/Shaders/HUD/DX11_VS_HUD.hlsl
Normal file
31
TR5Main/Shaders/HUD/DX11_VS_HUD.hlsl
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
cbuffer HUDBuffer : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 View;
|
||||||
|
float4x4 Projection;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertexShaderInput
|
||||||
|
{
|
||||||
|
float3 Position: POSITION;
|
||||||
|
float3 Normal: NORMAL;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
float Bone : BLENDINDICES;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PixelShaderInput
|
||||||
|
{
|
||||||
|
float4 Position: SV_POSITION;
|
||||||
|
float2 UV: TEXCOORD;
|
||||||
|
float4 Color: COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PixelShaderInput VS(VertexShaderInput input)
|
||||||
|
{
|
||||||
|
PixelShaderInput output;
|
||||||
|
output.Position = mul(mul(float4(input.Position, 1.0f), View),Projection);
|
||||||
|
output.Color = input.Color;
|
||||||
|
output.UV = input.UV;
|
||||||
|
return output;
|
||||||
|
}
|
|
@ -82,6 +82,7 @@
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>md "$(TargetDir)\Shaders"
|
<Command>md "$(TargetDir)\Shaders"
|
||||||
xcopy /Y "$(ProjectDir)Shaders\*.fx" "$(TargetDir)\Shaders"
|
xcopy /Y "$(ProjectDir)Shaders\*.fx" "$(TargetDir)\Shaders"
|
||||||
|
xcopy /Y "$(ProjectDir)Shaders\HUD\*.hlsl" "$(TargetDir)\Shaders\HUD\"
|
||||||
md "$(TargetDir)\Scripts"
|
md "$(TargetDir)\Scripts"
|
||||||
xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
|
@ -628,6 +629,30 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
||||||
<Image Include="Banner.bmp" />
|
<Image Include="Banner.bmp" />
|
||||||
<Image Include="C:\Users\Monty\Desktop\Banner.bmp" />
|
<Image Include="C:\Users\Monty\Desktop\Banner.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Shaders\HUD\DX11_PS_HUD.hlsl">
|
||||||
|
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PS</EntryPointName>
|
||||||
|
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
|
||||||
|
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
</None>
|
||||||
|
<None Include="Shaders\HUD\DX11_PS_HUDBar.hlsl">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
|
||||||
|
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">PSColored</EntryPointName>
|
||||||
|
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">2.0</ShaderModel>
|
||||||
|
</None>
|
||||||
|
<FxCompile Include="Shaders\HUD\DX11_VS_HUD.hlsl">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
<EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">VS</EntryPointName>
|
||||||
|
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType>
|
||||||
|
<CompileD2DCustomEffect Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileD2DCustomEffect>
|
||||||
|
</FxCompile>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\packages\directxtk_desktop_2015.2019.10.17.1\build\native\directxtk_desktop_2015.targets" Condition="Exists('..\packages\directxtk_desktop_2015.2019.10.17.1\build\native\directxtk_desktop_2015.targets')" />
|
<Import Project="..\packages\directxtk_desktop_2015.2019.10.17.1\build\native\directxtk_desktop_2015.targets" Condition="Exists('..\packages\directxtk_desktop_2015.2019.10.17.1\build\native\directxtk_desktop_2015.targets')" />
|
||||||
|
|
|
@ -871,12 +871,14 @@
|
||||||
<None Include="Shaders\DX11_Hairs.fx" />
|
<None Include="Shaders\DX11_Hairs.fx" />
|
||||||
<None Include="Shaders\DX11_Statics.fx" />
|
<None Include="Shaders\DX11_Statics.fx" />
|
||||||
<None Include="Shaders\DX11_Sky.fx" />
|
<None Include="Shaders\DX11_Sky.fx" />
|
||||||
<None Include="Shaders\DX11_Sprites.fx" />
|
|
||||||
<None Include="Shaders\DX11_Solid.fx" />
|
<None Include="Shaders\DX11_Solid.fx" />
|
||||||
<None Include="Shaders\DX11_Inventory.fx" />
|
<None Include="Shaders\DX11_Inventory.fx" />
|
||||||
<None Include="Shaders\DX11_FullscreenQuad.fx" />
|
<None Include="Shaders\DX11_FullscreenQuad.fx" />
|
||||||
<None Include="Shaders\DX11_ShadowMap.fx" />
|
<None Include="Shaders\DX11_ShadowMap.fx" />
|
||||||
<None Include="RuleSet.ruleset" />
|
<None Include="RuleSet.ruleset" />
|
||||||
|
<None Include="Shaders\DX11_Sprites.fx" />
|
||||||
|
<None Include="Shaders\HUD\DX11_PS_HUD.hlsl" />
|
||||||
|
<None Include="Shaders\HUD\DX11_PS_HUDBar.hlsl" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="Resources.rc">
|
<ResourceCompile Include="Resources.rc">
|
||||||
|
@ -894,4 +896,7 @@
|
||||||
<Filter>File di risorse</Filter>
|
<Filter>File di risorse</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<FxCompile Include="Shaders\HUD\DX11_VS_HUD.hlsl" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue