diff --git a/.idea/.idea.KhaoticEngineReborn/.idea/inspectionProfiles/Project_Default.xml b/.idea/.idea.KhaoticEngineReborn/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..7636fe9
--- /dev/null
+++ b/.idea/.idea.KhaoticEngineReborn/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml b/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml
index 647da79..d92b15f 100644
--- a/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml
+++ b/.idea/.idea.KhaoticEngineReborn/.idea/workspace.xml
@@ -5,13 +5,15 @@
-
-
+
+
+
+
@@ -41,25 +43,25 @@
- {
+ "keyToString": {
+ "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "C++ Project.enginecustom.executor": "Run",
+ "C/C++ Project.enginecustom.executor": "Run",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.git.unshallow": "true",
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "git-widget-placeholder": "main",
+ "ignore.virus.scanning.warn.message": "true",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "settings.editor.selected.configurable": "preferences.pluginManager",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -165,7 +167,9 @@
-
+
+
+
diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj
index c12c92c..2448f6f 100644
--- a/enginecustom/enginecustom.vcxproj
+++ b/enginecustom/enginecustom.vcxproj
@@ -237,6 +237,16 @@
$(OutDir)\src\hlsl
$(OutDir)\src\hlsl
+
+ F:\Github_Repo\khaotic-engine-Reborn\x64\Debug\\src\hlsl
+ %(Filename)%(Extension)
+ Document
+
+
+ F:\Github_Repo\khaotic-engine-Reborn\x64\Debug\\src\hlsl
+ %(Filename)%(Extension)
+ Document
+
Document
$(OutDir)\src\hlsl
@@ -300,118 +310,6 @@
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Texture\
- $(OutDir)\assets\Texture\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
-
- $(OutDir)\assets\Skybox\
- $(OutDir)\assets\Skybox\
-
@@ -424,85 +322,10 @@
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- Text
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
- $(OutDir)\assets\Model\TXT\
- $(OutDir)\assets\Model\TXT\
-
-
-
- Document
- $(OutDir)\assets\Model\OBJ\
- $(OutDir)\assets\Model\OBJ\
-
-
-
-
-
diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters
index d1bba21..347b62a 100644
--- a/enginecustom/enginecustom.vcxproj.filters
+++ b/enginecustom/enginecustom.vcxproj.filters
@@ -225,6 +225,12 @@
Fichiers sources
+
+ Fichiers sources
+
+
+ Fichiers sources
+
@@ -398,6 +404,12 @@
Fichiers d%27en-tête
+
+ Fichiers d%27en-tête
+
+
+ Fichiers d%27en-tête
+
@@ -592,5 +604,7 @@
+
+
\ No newline at end of file
diff --git a/enginecustom/src/hlsl/skybox.ps b/enginecustom/src/hlsl/skybox.ps
new file mode 100644
index 0000000..0e1b84b
--- /dev/null
+++ b/enginecustom/src/hlsl/skybox.ps
@@ -0,0 +1,61 @@
+/////////////
+// GLOBALS //
+/////////////
+Texture2D shaderTexture : register(t0);
+SamplerState SampleType : register(s0);
+cbuffer SunLightBuffer
+{
+ float4 ambientColor;
+ float4 diffuseColor;
+ float3 lightDirection;
+ float intensity;
+};
+
+cbuffer SunLightColorBuffer
+{
+ float4 sunColor;
+};
+
+//////////////
+// TYPEDEFS //
+//////////////
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+ float3 normal : NORMAL;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// Pixel Shader
+////////////////////////////////////////////////////////////////////////////////
+float4 SunLightPixelShader(PixelInputType input) : SV_TARGET
+{
+ float4 textureColor;
+ float4 color;
+ float lightIntensity;
+ float4 colorArray;
+ float4 colorSum;
+
+ // Sample the pixel color from the texture using the sampler at this texture coordinate location.
+ textureColor = shaderTexture.Sample(SampleType, input.tex);
+
+ // Calculate the different amounts of light on this pixel based on the direction of the light.
+ lightIntensity = saturate(dot(input.normal, -lightDirection));
+
+ // Determine the diffuse color amount of the light.
+ colorArray = (diffuseColor * lightIntensity) * intensity;
+
+ // Initialize the sum of colors.
+ colorSum = float4(0.0f, 0.0f, 0.0f, 1.0f);
+
+ // Add the light color.
+ colorSum.r += colorArray.r;
+ colorSum.g += colorArray.g;
+ colorSum.b += colorArray.b;
+
+ // Multiply the texture pixel by the light color to get the final result.
+ color = saturate(colorSum) * textureColor;
+
+ return color;
+}
diff --git a/enginecustom/src/hlsl/skybox.vs b/enginecustom/src/hlsl/skybox.vs
new file mode 100644
index 0000000..46fab3b
--- /dev/null
+++ b/enginecustom/src/hlsl/skybox.vs
@@ -0,0 +1,67 @@
+/////////////
+// GLOBALS //
+/////////////
+cbuffer MatrixBuffer
+{
+ matrix worldMatrix;
+ matrix viewMatrix;
+ matrix projectionMatrix;
+};
+
+cbuffer CameraBuffer
+{
+ float3 cameraPosition;
+ float padding;
+};
+
+cbuffer SunLightBuffer
+{
+ float4 ambientColor;
+ float4 diffuseColor;
+ float3 lightDirection;
+ float intensity;
+};
+
+//////////////
+// TYPEDEFS //
+//////////////
+struct VertexInputType
+{
+ float4 position : POSITION;
+ float2 tex : TEXCOORD0;
+ float3 normal : NORMAL;
+};
+
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+ float3 normal : NORMAL;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// Vertex Shader
+////////////////////////////////////////////////////////////////////////////////
+PixelInputType SunLightVertexShader(VertexInputType input)
+{
+ PixelInputType output;
+
+ // Change the position vector to be 4 units for proper matrix calculations.
+ input.position.w = 1.0f;
+
+ // Calculate the position of the vertex against the world, view, and projection matrices.
+ output.position = mul(input.position, worldMatrix);
+ output.position = mul(output.position, viewMatrix);
+ output.position = mul(output.position, projectionMatrix);
+
+ // Store the texture coordinates for the pixel shader.
+ output.tex = input.tex;
+
+ // Calculate the normal vector against the world matrix only.
+ output.normal = mul(input.normal, (float3x3) worldMatrix);
+
+ // Normalize the normal vector.
+ output.normal = normalize(output.normal);
+
+ return output;
+}
diff --git a/enginecustom/src/inc/shader/SkyboxShaderClass.h b/enginecustom/src/inc/shader/SkyboxShaderClass.h
index d2e5c57..f6bb526 100644
--- a/enginecustom/src/inc/shader/SkyboxShaderClass.h
+++ b/enginecustom/src/inc/shader/SkyboxShaderClass.h
@@ -1,14 +1,68 @@
#pragma once
+#include "Logger.h"
#include
#include
#include
-
+#include
using namespace DirectX;
using namespace std;
class SkyboxShaderClass
{
-public:
-
-};
+
+ private :
+ struct MatrixBufferType
+ {
+ XMMATRIX world;
+ XMMATRIX view;
+ XMMATRIX projection;
+ };
+
+ struct CameraBufferType
+ {
+ XMFLOAT3 cameraPosition;
+ float padding;
+ };
+
+ struct SunLightBufferType
+ {
+ XMFLOAT4 diffuseColor;
+ XMFLOAT4 ambientColor;
+ XMFLOAT3 sunDirection;
+ float intensity;
+ };
+
+ struct SunLightColorBufferType
+ {
+ XMFLOAT4 sunColor;
+ };
+
+public :
+ SkyboxShaderClass();
+ SkyboxShaderClass(const SkyboxShaderClass&);
+ ~SkyboxShaderClass();
+
+ bool Initialize(ID3D11Device*, HWND);
+ void Shutdown();
+ bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3,float);
+
+private:
+ bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*);
+ void ShutdownShader();
+ void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*);
+
+ bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3, float);
+ void RenderShader(ID3D11DeviceContext*, int);
+
+private:
+ ID3D11VertexShader* m_vertexShader;
+ ID3D11PixelShader* m_pixelShader;
+ ID3D11InputLayout* m_layout;
+ ID3D11SamplerState* m_sampleState;
+ ID3D11Buffer* m_matrixBuffer;
+ ID3D11Buffer* m_cameraBuffer;
+ ID3D11Buffer* m_sunlightBuffer;
+ ID3D11Buffer* m_sunlightColorBuffer;
+ ID3D11Buffer* m_sunlightPositionBuffer;
+};
\ No newline at end of file
diff --git a/enginecustom/src/inc/shader/shadermanagerclass.h b/enginecustom/src/inc/shader/shadermanagerclass.h
index 3b5050d..c708301 100644
--- a/enginecustom/src/inc/shader/shadermanagerclass.h
+++ b/enginecustom/src/inc/shader/shadermanagerclass.h
@@ -45,20 +45,20 @@ public:
bool RenderWaterShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, float, float);
bool RenderCelShadingShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3, float);
bool RenderSunlightShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3, float);
- bool RenderSkyboxShader(
- ID3D11DeviceContext* deviceContext,
- int indexCount,
- XMMATRIX worldMatrix,
- XMMATRIX viewMatrix,
- XMMATRIX projectionMatrix,
- ID3D11ShaderResourceView* front,
- ID3D11ShaderResourceView* back,
- ID3D11ShaderResourceView* left,
- ID3D11ShaderResourceView* right,
- ID3D11ShaderResourceView* top,
- ID3D11ShaderResourceView* bottom,
- XMFLOAT4 sunDiffuseColor
- );
+ bool RenderSkyboxShader(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4, XMFLOAT4, XMFLOAT3, float);
+ // ID3D11DeviceContext* deviceContext,
+ // int indexCount,
+ // XMMATRIX worldMatrix,
+ // XMMATRIX viewMatrix,
+ // XMMATRIX projectionMatrix,
+ // ID3D11ShaderResourceView* front,
+ // ID3D11ShaderResourceView* back,
+ // ID3D11ShaderResourceView* left,
+ // ID3D11ShaderResourceView* right,
+ // ID3D11ShaderResourceView* top,
+ // ID3D11ShaderResourceView* bottom,
+ // XMFLOAT4 sunDiffuseColor
+ // );
private:
TextureShaderClass* m_TextureShader;
diff --git a/enginecustom/src/src/shader/SkyboxShaderClass.cpp b/enginecustom/src/src/shader/SkyboxShaderClass.cpp
index 4d12972..db9338a 100644
--- a/enginecustom/src/src/shader/SkyboxShaderClass.cpp
+++ b/enginecustom/src/src/shader/SkyboxShaderClass.cpp
@@ -1 +1,462 @@
+////////////////////////////////////////////////////////////////////////////////
+// Filename: lightshaderclass.cpp
+////////////////////////////////////////////////////////////////////////////////
#include "SkyboxShaderClass.h"
+
+
+SkyboxShaderClass::SkyboxShaderClass()
+{
+ m_vertexShader = 0;
+ m_pixelShader = 0;
+ m_layout = 0;
+ m_sampleState = 0;
+ m_matrixBuffer = 0;
+ m_cameraBuffer = 0;
+ m_sunlightBuffer = 0;
+ m_sunlightColorBuffer = 0;
+ m_sunlightPositionBuffer = 0;
+}
+
+
+SkyboxShaderClass::SkyboxShaderClass(const SkyboxShaderClass& other)
+{
+}
+
+
+SkyboxShaderClass::~SkyboxShaderClass()
+{
+}
+
+
+bool SkyboxShaderClass::Initialize(ID3D11Device* device, HWND hwnd)
+{
+ Logger::Get().Log("Initializing LightShaderClass", __FILE__, __LINE__, Logger::LogLevel::Initialize);
+
+ wchar_t vsFilename[128];
+ wchar_t psFilename[128];
+ int error;
+ bool result;
+
+ // Set the filename of the vertex shader.
+ error = wcscpy_s(vsFilename, 128, L"src/hlsl/sunlight.vs");
+ if (error != 0)
+ {
+ Logger::Get().Log("Failed to copy string", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Set the filename of the pixel shader.
+ error = wcscpy_s(psFilename, 128, L"src/hlsl/sunlight.ps");
+ if (error != 0)
+ {
+ Logger::Get().Log("Failed to copy string", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+ // Initialize the vertex and pixel shaders.
+ result = InitializeShader(device, hwnd, vsFilename, psFilename);
+ if (!result)
+ {
+ Logger::Get().Log("Failed to initialize shader", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ Logger::Get().Log("SunLightShaderClass initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
+
+ return true;
+}
+
+
+void SkyboxShaderClass::Shutdown()
+{
+ // Shutdown the vertex and pixel shaders as well as the related objects.
+ ShutdownShader();
+
+ return;
+}
+
+bool SkyboxShaderClass::Render(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix,
+ ID3D11ShaderResourceView* texture, XMFLOAT4 diffuseColor, XMFLOAT4 ambientColor, XMFLOAT3 sunDirection, float sunIntensity)
+{
+ bool result;
+
+
+ // Set the shader parameters that it will use for rendering.
+ result = SetShaderParameters(deviceContext, worldMatrix, viewMatrix, projectionMatrix, texture, diffuseColor, ambientColor, sunDirection, sunIntensity);
+ if (!result)
+ {
+ Logger::Get().Log("Failed to set shader parameters", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Now render the prepared buffers with the shader.
+ RenderShader(deviceContext, indexCount);
+
+ return true;
+}
+
+
+bool SkyboxShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename)
+{
+ Logger::Get().Log("Initializing shader", __FILE__, __LINE__, Logger::LogLevel::Initialize);
+
+ HRESULT result;
+ ID3D10Blob* errorMessage;
+ ID3D10Blob* vertexShaderBuffer;
+ ID3D10Blob* pixelShaderBuffer;
+ D3D11_INPUT_ELEMENT_DESC polygonLayout[3];
+ unsigned int numElements;
+ D3D11_SAMPLER_DESC samplerDesc;
+ D3D11_BUFFER_DESC matrixBufferDesc;
+ D3D11_BUFFER_DESC sunlightBufferDesc;
+
+ // Initialize the pointers this function will use to null.
+ errorMessage = 0;
+ vertexShaderBuffer = 0;
+ pixelShaderBuffer = 0;
+
+ // Compile the vertex shader code.
+ result = D3DCompileFromFile(vsFilename, NULL, NULL, "SunLightVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &vertexShaderBuffer, &errorMessage);
+ if (FAILED(result))
+ {
+ if (errorMessage)
+ {
+ OutputShaderErrorMessage(errorMessage, hwnd, vsFilename);
+ }
+ else
+ {
+ Logger::Get().Log("Failed to compile shader", __FILE__, __LINE__, Logger::LogLevel::Error);
+ }
+ return false;
+ }
+
+ // Compile the pixel shader code.
+ result = D3DCompileFromFile(psFilename, NULL, NULL, "SunLightPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pixelShaderBuffer, &errorMessage);
+ if (FAILED(result))
+ {
+ if (errorMessage)
+ {
+ OutputShaderErrorMessage(errorMessage, hwnd, psFilename);
+ }
+ else
+ {
+ Logger::Get().Log("Failed to compile shader", __FILE__, __LINE__, Logger::LogLevel::Error);
+ }
+ return false;
+ }
+
+ // Create the vertex shader from the buffer.
+ result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create vertex shader", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Create the pixel shader from the buffer.
+ result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create pixel shader", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Create the vertex input layout description.
+ polygonLayout[0].SemanticName = "POSITION";
+ polygonLayout[0].SemanticIndex = 0;
+ polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
+ polygonLayout[0].InputSlot = 0;
+ polygonLayout[0].AlignedByteOffset = 0;
+ polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
+ polygonLayout[0].InstanceDataStepRate = 0;
+
+ polygonLayout[1].SemanticName = "TEXCOORD";
+ polygonLayout[1].SemanticIndex = 0;
+ polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
+ polygonLayout[1].InputSlot = 0;
+ polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
+ polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
+ polygonLayout[1].InstanceDataStepRate = 0;
+
+ polygonLayout[2].SemanticName = "NORMAL";
+ polygonLayout[2].SemanticIndex = 0;
+ polygonLayout[2].Format = DXGI_FORMAT_R32G32B32_FLOAT;
+ polygonLayout[2].InputSlot = 0;
+ polygonLayout[2].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
+ polygonLayout[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
+ polygonLayout[2].InstanceDataStepRate = 0;
+
+ // Get a count of the elements in the layout.
+ numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]);
+
+ // Create the vertex input layout.
+ result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &m_layout);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create input layout", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Release the vertex shader buffer and pixel shader buffer since they are no longer needed.
+ vertexShaderBuffer->Release();
+ vertexShaderBuffer = 0;
+
+ pixelShaderBuffer->Release();
+ pixelShaderBuffer = 0;
+
+ // Create a texture sampler state description.
+ samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+ samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
+ samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
+ samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
+ samplerDesc.MipLODBias = 0.0f;
+ samplerDesc.MaxAnisotropy = 1;
+ samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS;
+ samplerDesc.BorderColor[0] = 0;
+ samplerDesc.BorderColor[1] = 0;
+ samplerDesc.BorderColor[2] = 0;
+ samplerDesc.BorderColor[3] = 0;
+ samplerDesc.MinLOD = 0;
+ samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
+
+ // Create the texture sampler state.
+ result = device->CreateSamplerState(&samplerDesc, &m_sampleState);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create sampler state", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Setup the description of the dynamic matrix constant buffer that is in the vertex shader.
+ matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
+ matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType);
+ matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ matrixBufferDesc.MiscFlags = 0;
+ matrixBufferDesc.StructureByteStride = 0;
+
+ // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class.
+ result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create matrix buffer", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ // Setup the description of the dynamic sunlight constant buffer that is in the pixel shader.
+ sunlightBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
+ sunlightBufferDesc.ByteWidth = sizeof(SunLightBufferType);
+ sunlightBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ sunlightBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ sunlightBufferDesc.MiscFlags = 0;
+ sunlightBufferDesc.StructureByteStride = 0;
+
+ // Create the constant buffer pointer so we can access the pixel shader constant buffer from within this class.
+ result = device->CreateBuffer(&sunlightBufferDesc, NULL, &m_sunlightBuffer);
+ if (FAILED(result))
+ {
+ Logger::Get().Log("Failed to create sunlight buffer", __FILE__, __LINE__, Logger::LogLevel::Error);
+ return false;
+ }
+
+ Logger::Get().Log("Shader initialized", __FILE__, __LINE__, Logger::LogLevel::Initialize);
+
+ return true;
+}
+
+
+
+
+void SkyboxShaderClass::ShutdownShader()
+{
+ Logger::Get().Log("Shutting down SunLightShaderClass", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
+
+ // Release the light constant buffers.
+ if (m_sunlightColorBuffer)
+ {
+ m_sunlightColorBuffer->Release();
+ m_sunlightColorBuffer = 0;
+ }
+
+ if (m_sunlightPositionBuffer)
+ {
+ m_sunlightPositionBuffer->Release();
+ m_sunlightPositionBuffer = 0;
+ }
+
+ // Release the light constant buffer.
+ if (m_sunlightBuffer)
+ {
+ m_sunlightBuffer->Release();
+ m_sunlightBuffer = 0;
+ }
+
+ // Release the camera constant buffer.
+ if (m_cameraBuffer)
+ {
+ m_cameraBuffer->Release();
+ m_cameraBuffer = 0;
+ }
+
+ // Release the matrix constant buffer.
+ if (m_matrixBuffer)
+ {
+ m_matrixBuffer->Release();
+ m_matrixBuffer = 0;
+ }
+
+ // Release the sampler state.
+ if (m_sampleState)
+ {
+ m_sampleState->Release();
+ m_sampleState = 0;
+ }
+
+ // Release the layout.
+ if (m_layout)
+ {
+ m_layout->Release();
+ m_layout = 0;
+ }
+
+ // Release the pixel shader.
+ if (m_pixelShader)
+ {
+ m_pixelShader->Release();
+ m_pixelShader = 0;
+ }
+
+ // Release the vertex shader.
+ if (m_vertexShader)
+ {
+ m_vertexShader->Release();
+ m_vertexShader = 0;
+ }
+
+ Logger::Get().Log("SunLightShaderClass shut down", __FILE__, __LINE__, Logger::LogLevel::Shutdown);
+
+ return;
+}
+
+
+void SkyboxShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND hwnd, WCHAR* shaderFilename)
+{
+ char* compileErrors;
+ unsigned __int64 bufferSize, i;
+ ofstream fout;
+
+
+ // Get a pointer to the error message text buffer.
+ compileErrors = (char*)(errorMessage->GetBufferPointer());
+
+ // Get the length of the message.
+ bufferSize = errorMessage->GetBufferSize();
+
+ // Open a file to write the error message to.
+ fout.open("shader-error.txt");
+
+ // Write out the error message.
+ for (i = 0; i < bufferSize; i++)
+ {
+ fout << compileErrors[i];
+ }
+
+ // Close the file.
+ fout.close();
+
+ // Release the error message.
+ errorMessage->Release();
+ errorMessage = 0;
+
+ // Pop a message up on the screen to notify the user to check the text file for compile errors.
+ MessageBox(hwnd, L"Error compiling shader. Check shader-error.txt for message.", shaderFilename, MB_OK);
+
+ return;
+}
+
+
+bool SkyboxShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, ID3D11ShaderResourceView* texture, XMFLOAT4 ambientColor, XMFLOAT4 diffuseColor, XMFLOAT3 lightDirection, float sunIntensity)
+{
+ HRESULT result;
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ MatrixBufferType* dataPtr;
+ CameraBufferType* dataPtr2;
+ SunLightBufferType* dataPtr3;
+ unsigned int bufferNumber;
+
+ // Transpose the matrices to prepare them for the shader.
+ worldMatrix = XMMatrixTranspose(worldMatrix);
+ viewMatrix = XMMatrixTranspose(viewMatrix);
+ projectionMatrix = XMMatrixTranspose(projectionMatrix);
+
+ // Lock the constant buffer so it can be written to.
+ result = deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ if (FAILED(result))
+ {
+ return false;
+ }
+
+ // Get a pointer to the data in the constant buffer.
+ dataPtr = (MatrixBufferType*)mappedResource.pData;
+
+ // Copy the matrices into the constant buffer.
+ dataPtr->world = worldMatrix;
+ dataPtr->view = viewMatrix;
+ dataPtr->projection = projectionMatrix;
+
+ // Unlock the constant buffer.
+ deviceContext->Unmap(m_matrixBuffer, 0);
+
+ // Set the position of the constant buffer in the vertex shader.
+ bufferNumber = 0;
+
+ // Finally set the constant buffer in the vertex shader with the updated values.
+ deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_matrixBuffer);
+
+ // Lock the sunlight constant buffer so it can be written to.
+ result = deviceContext->Map(m_sunlightBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ if (FAILED(result))
+ {
+ return false;
+ }
+
+ // Get a pointer to the data in the constant buffer.
+ dataPtr3 = (SunLightBufferType*)mappedResource.pData;
+
+ // Copy the lighting variables into the constant buffer.
+ dataPtr3->ambientColor = ambientColor;
+ dataPtr3->diffuseColor = diffuseColor;
+ dataPtr3->sunDirection = lightDirection;
+ dataPtr3->intensity = sunIntensity;
+
+ // Unlock the constant buffer.
+ deviceContext->Unmap(m_sunlightBuffer, 0);
+
+ // Set the position of the sunlight constant buffer in the pixel shader.
+ bufferNumber = 0;
+
+ // Finally set the sunlight constant buffer in the pixel shader with the updated values.
+ deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_sunlightBuffer);
+
+ // Set shader texture resource in the pixel shader.
+ deviceContext->PSSetShaderResources(0, 1, &texture);
+
+ return true;
+}
+
+void SkyboxShaderClass::RenderShader(ID3D11DeviceContext* deviceContext, int indexCount)
+{
+ // Set the vertex input layout.
+ deviceContext->IASetInputLayout(m_layout);
+
+ // Set the vertex and pixel shaders that will be used to render this triangle.
+ deviceContext->VSSetShader(m_vertexShader, NULL, 0);
+ deviceContext->PSSetShader(m_pixelShader, NULL, 0);
+
+ // Set the sampler state in the pixel shader.
+ deviceContext->PSSetSamplers(0, 1, &m_sampleState);
+
+ // Render the triangle.
+ deviceContext->DrawIndexed(indexCount, 0, 0);
+
+ return;
+}
diff --git a/enginecustom/src/src/shader/shadermanagerclass.cpp b/enginecustom/src/src/shader/shadermanagerclass.cpp
index a389b71..ef74b6d 100644
--- a/enginecustom/src/src/shader/shadermanagerclass.cpp
+++ b/enginecustom/src/src/shader/shadermanagerclass.cpp
@@ -464,11 +464,12 @@ bool ShaderManagerClass::RenderSunlightShader(ID3D11DeviceContext* deviceContext
return true;
}
-bool ShaderManagerClass::RenderSkyboxShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, ID3D11ShaderResourceView* front, ID3D11ShaderResourceView* back, ID3D11ShaderResourceView* left, ID3D11ShaderResourceView* right, ID3D11ShaderResourceView* top, ID3D11ShaderResourceView* bottom, XMFLOAT4 sunDiffuseColor)
+bool ShaderManagerClass::RenderSkyboxShader(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix,
+ ID3D11ShaderResourceView* texture, XMFLOAT4 diffuseColor, XMFLOAT4 ambientColor, XMFLOAT3 sunDirection, float sunIntensity)
{
bool result;
- result = m_SkyboxShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, front, back, left, right, top, bottom, sunDiffuseColor);
+ result = m_SkyboxShader->Render(deviceContext, indexCount, worldMatrix, viewMatrix, projectionMatrix, texture, diffuseColor, ambientColor, sunDirection, sunIntensity);
if (!result)
{
return false;
diff --git a/enginecustom/src/src/system/applicationclass.cpp b/enginecustom/src/src/system/applicationclass.cpp
index 40717d4..c8d870a 100644
--- a/enginecustom/src/src/system/applicationclass.cpp
+++ b/enginecustom/src/src/system/applicationclass.cpp
@@ -1962,14 +1962,26 @@ bool ApplicationClass::RenderPass(const std::vectorGetTexture(0), // Front
- object->GetTexture(1), // Back
- object->GetTexture(2), // Left
- object->GetTexture(3), // Right
- object->GetTexture(4), // Top
- object->GetTexture(5), // Bottom
- m_SunLight->GetDiffuseColor() // Sunlight color to tint the skybox
+ object->GetTexture(0),
+ m_SunLight->GetDiffuseColor(),
+ m_SunLight->GetAmbientColor(),
+ m_SunLight->GetDirection(),
+ m_SunLight->GetIntensity()
);
+
+ // m_Direct3D->GetDeviceContext(),
+ // object->GetIndexCount(),
+ // worldMatrix,
+ // view,
+ // projection,
+ // object->GetTexture(0), // Front
+ // object->GetTexture(1), // Back
+ // object->GetTexture(2), // Left
+ // object->GetTexture(3), // Right
+ // object->GetTexture(4), // Top
+ // object->GetTexture(5), // Bottom
+ // m_SunLight->GetDiffuseColor() // Sunlight color to tint the skybox
+ // );
if (!result)
{
Logger::Get().Log("Could not render the object model using the skybox shader", __FILE__, __LINE__, Logger::LogLevel::Error);
diff --git a/enginecustom/src/src/system/textureclass.cpp b/enginecustom/src/src/system/textureclass.cpp
index 1a9f50d..81e5c8d 100644
--- a/enginecustom/src/src/system/textureclass.cpp
+++ b/enginecustom/src/src/system/textureclass.cpp
@@ -134,7 +134,7 @@ bool TextureClass::LoadTarga(std::string filename)
error = fopen_s(&filePtr, filename.c_str(), "rb");
if (error != 0)
{
- Logger::Get().Log("Failed to open targa file", __FILE__, __LINE__, Logger::LogLevel::Error);
+ Logger::Get().Log("Failed to open targa file. Working directory: " + std::filesystem::current_path().string(), __FILE__, __LINE__, Logger::LogLevel::Error);
return false;
}