diff --git a/src/Engine.h b/src/Engine.h index a0f09ac..22f8451 100755 --- a/src/Engine.h +++ b/src/Engine.h @@ -25,7 +25,7 @@ public: m_ResourceManager->RegisterType("Model", [rm](std::string resourceName) { return new Model(rm, *rm->Load("OBJ", resourceName)); }); m_ResourceManager->RegisterType("Texture", [](std::string resourceName) { return new Texture(resourceName); }); - m_Renderer = std::make_shared(); + m_Renderer = std::make_shared(m_ResourceManager); m_Renderer->Initialize(); m_InputManager = std::make_shared(m_Renderer->GetWindow(), m_EventBroker); diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 2aff840..0409dbc 100755 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -1,7 +1,8 @@ #include "PrecompiledHeader.h" #include "Renderer.h" -Renderer::Renderer() +Renderer::Renderer(std::shared_ptr<::ResourceManager> resourceManager) + : ResourceManager(resourceManager) { m_VSync = false; #ifdef DEBUG @@ -112,6 +113,11 @@ void Renderer::LoadContent() m_ShaderProgramSkybox.Compile(); m_ShaderProgramSkybox.Link();*/ + m_SunPassProgram.AddShader(std::shared_ptr(new VertexShader("Shaders/SunPass.vert.glsl"))); + m_SunPassProgram.AddShader(std::shared_ptr(new FragmentShader("Shaders/SunPass.frag.glsl"))); + m_SunPassProgram.Compile(); + m_SunPassProgram.Link(); + m_ForwardRendering.AddShader(std::shared_ptr(new VertexShader("Shaders/ForwardRendering.vert.glsl"))); m_ForwardRendering.AddShader(std::shared_ptr(new FragmentShader("Shaders/ForwardRendering.frag.glsl"))); m_ForwardRendering.Compile(); @@ -148,6 +154,8 @@ void Renderer::LoadContent() m_ScreenQuad = CreateQuad(); CreateShadowMap(m_ShadowMapRes); FrameBufferTextures(); + + m_sphereModel = ResourceManager->Load("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"); } void Renderer::Draw(double dt) @@ -920,6 +928,7 @@ void Renderer::DrawFBO() // glCullFace(GL_FRONT); // DrawLightScene(viewport); + DrawSunLightScene(); // /* // Final pass @@ -977,6 +986,9 @@ void Renderer::DrawFBOScene(RenderQueue &rq) glm::vec3 sunDirection = m_SunTarget - m_SunPosition; glm::vec3 sunDirection_cameraview = glm::vec3(cameraProjection * m_Camera->ViewMatrix() * glm::vec4(sunDirection, 1.0)); + m_FirstPassProgram.Bind(); + GLuint ShaderProgramHandle = m_FirstPassProgram.GetHandle(); + glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, m_ShadowDepthTexture); @@ -989,12 +1001,12 @@ void Renderer::DrawFBOScene(RenderQueue &rq) MVP = cameraMatrix * modelMatrix; depthMVP = depthCameraMatrix * modelMatrix; - glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); - glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP)); - glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); - glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); - //glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "SunDirection_cameraspace"), 1, glm::value_ptr(sunDirection_cameraview)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "SunDirection_cameraspace"), 1, glm::value_ptr(sunDirection_cameraview)); glBindVertexArray(modelJob->VAO); glActiveTexture(GL_TEXTURE0); @@ -1042,8 +1054,6 @@ void Renderer::DrawFBOScene(RenderQueue &rq) } } - - void Renderer::DrawLightScene(RenderQueue &rq) { glEnable(GL_BLEND); @@ -1057,31 +1067,69 @@ void Renderer::DrawLightScene(RenderQueue &rq) glm::mat4 cameraProjection = m_Camera->ProjectionMatrix((float)m_Viewport.Width / m_Viewport.Height); glm::mat4 cameraMatrix = cameraProjection * m_Camera->ViewMatrix(); glm::mat4 MVP; + glm::vec3 sunDirection = m_SunTarget - m_SunPosition; + + m_SecondPassProgram.Bind(); + GLuint ShaderProgramHandle = m_SecondPassProgram.GetHandle(); for (auto &light : Lights) { MVP = cameraMatrix * light.SphereModelMatrix; - - glUniform2fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ViewportSize"), 1,glm::value_ptr(glm::vec2(m_Width, m_Height))); - glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); - glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); - glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(light.SphereModelMatrix)); - glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ls"), 1, glm::value_ptr(light.Specular)); - glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ld"), 1, glm::value_ptr(light.Diffuse)); - glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "lp"), 1, glm::value_ptr(light.Position)); - glUniform3f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "CameraPosition"), m_Camera->Position().x, m_Camera->Position().y, m_Camera->Position().z); - glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "specularExponent"), light.SpecularExponent); -// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ConstantAttenuation"), light.ConstantAttenuation); -// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "LinearAttenuation"), light.LinearAttenuation); -// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "QuadraticAttenuation"), light.QuadraticAttenuation); - glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ConstantAttenuation"), CAtt); - glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "LinearAttenuation"), LAtt); - glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "QuadraticAttenuation"), QAtt); - glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "LightRadius"), light.Radius); + + glUniform2fv(glGetUniformLocation(ShaderProgramHandle, "ViewportSize"), 1,glm::value_ptr(glm::vec2(m_Width, m_Height))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(light.SphereModelMatrix)); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "ls"), 1, glm::value_ptr(light.Specular)); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "ld"), 1, glm::value_ptr(light.Diffuse)); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "lp"), 1, glm::value_ptr(light.Position)); + glUniform3f(glGetUniformLocation(ShaderProgramHandle, "CameraPosition"), m_Camera->Position().x, m_Camera->Position().y, m_Camera->Position().z); + glUniform1f(glGetUniformLocation(ShaderProgramHandle, "specularExponent"), light.SpecularExponent); + //glUniform1f(glGetUniformLocation(ShaderProgramHandle, "ConstantAttenuation"), CAtt); + //glUniform1f(glGetUniformLocation(ShaderProgramHandle, "LinearAttenuation"), LAtt); + //glUniform1f(glGetUniformLocation(ShaderProgramHandle, "QuadraticAttenuation"), QAtt); + glUniform1f(glGetUniformLocation(ShaderProgramHandle, "LightRadius"), light.Radius); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "directionToSun"), 1, glm::value_ptr(-sunDirection)); glDrawArrays(GL_TRIANGLES, 0, m_sphereModel->Vertices.size()); }; + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + glDisable(GL_BLEND); +} + +void Renderer::DrawSunLightScene() +{ + glCullFace(GL_BACK); + + glEnable(GL_BLEND); + glBlendEquation (GL_FUNC_ADD); + glBlendFunc(GL_ONE,GL_ONE); + + glDisable (GL_DEPTH_TEST); + glDepthMask (GL_FALSE); + //glBindVertexArray(m_sphereModel->VAO); + + glm::mat4 cameraProjection = m_Camera->ProjectionMatrix((float)m_Viewport.Width / m_Viewport.Height); + glm::mat4 cameraMatrix = cameraProjection * m_Camera->ViewMatrix(); + glm::mat4 MVP; + + m_SunPassProgram.Bind(); + GLuint ShaderProgramHandle = m_SunPassProgram.GetHandle(); + + + glUniform2fv(glGetUniformLocation(ShaderProgramHandle, "ViewportSize"), 1, glm::value_ptr(glm::vec2(m_Width, m_Height))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(cameraProjection)); + glUniform3f(glGetUniformLocation(ShaderProgramHandle, "CameraPosition"), m_Camera->Position().x, m_Camera->Position().y, m_Camera->Position().z); + glUniform3fv(glGetUniformLocation(ShaderProgramHandle, "directionToSun"), 1, glm::value_ptr(glm::normalize(m_SunPosition))); + + glBindVertexArray(m_ScreenQuad); + glEnableVertexAttribArray(0); + glDrawArrays(GL_TRIANGLES, 0, 6); + glEnable (GL_DEPTH_TEST); glDepthMask (GL_TRUE); glDisable (GL_BLEND); @@ -1151,6 +1199,7 @@ void Renderer::ForwardRendering() glm::mat4 MVP; m_ForwardRendering.Bind(); + GLuint ShaderProgramHandle = m_ForwardRendering.GetHandle(); for (auto tuple : ModelsToRender) //// Todo: Add so it's TransparentModelsToRender { @@ -1162,10 +1211,10 @@ void Renderer::ForwardRendering() continue; MVP = cameraMatrix * modelMatrix; - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); - glUniformMatrix4fv(glGetUniformLocation(m_ForwardRendering.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(m_Camera->ProjectionMatrix((float)m_Width / m_Height))); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix())); + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "P"), 1, GL_FALSE, glm::value_ptr(m_Camera->ProjectionMatrix((float)m_Width / m_Height))); glBindVertexArray(model->VAO); for (auto texGroup : model->TextureGroups) diff --git a/src/Renderer.h b/src/Renderer.h index 8a10359..0a9c1df 100755 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -31,7 +31,7 @@ public: std::list> TexturesToRender; std::list> AABBsToRender; - Renderer(); + Renderer(std::shared_ptr<::ResourceManager> resourceManager); void Initialize(); void Draw(double dt); @@ -92,6 +92,8 @@ public: void SetSphereModel(Model* _model); private: + std::shared_ptr<::ResourceManager> ResourceManager; + int m_Width, m_Height; struct Viewport @@ -169,6 +171,7 @@ private: ShaderProgram m_SecondPassProgram; ShaderProgram m_SecondPassProgram_Debug; ShaderProgram m_FinalPassProgram; + ShaderProgram m_SunPassProgram; ShaderProgram m_ForwardRendering; ShaderProgram m_ShaderProgramNormals; @@ -189,6 +192,7 @@ private: void DrawFBO2(); void DrawFBOScene(RenderQueue &rq); void DrawLightScene(RenderQueue &rq); + void DrawSunLightScene(); void BindFragDataLocation(); glm::mat4 CreateLightMatrix(Light &_light); void UpdateSunProjection(); diff --git a/src/Shaders/FinalPass.frag.glsl b/src/Shaders/FinalPass.frag.glsl index b4dcc13..26073a2 100644 --- a/src/Shaders/FinalPass.frag.glsl +++ b/src/Shaders/FinalPass.frag.glsl @@ -21,11 +21,10 @@ void main() vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord); vec4 ShadowTexel = texture(ShadowTexture, Input.TextureCoord); + //FragmentColor = LightingTexel + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0); //FragmentColor = DiffuseTexel; FragmentColor = DiffuseTexel * (vec4(La, 0.0) + vec4(LightingTexel.rgb, 0.0)) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0); //FragmentColor = vec4(pow(_FragmentColor.rgb, vec3(1.0 / Gamma)), _FragmentColor.a); - - } \ No newline at end of file diff --git a/src/Shaders/Fragment.glsl b/src/Shaders/Fragment.glsl index 725bb17..e2b972d 100755 --- a/src/Shaders/Fragment.glsl +++ b/src/Shaders/Fragment.glsl @@ -5,6 +5,13 @@ layout (binding=1) uniform sampler2D ShadowTexture; layout (binding=2) uniform sampler2D NormalMapTexture; layout (binding=3) uniform sampler2D SpecularMapTexture; +//TerrainTextures +layout (binding=4) uniform sampler2D AsphaltTexture; +layout (binding=5) uniform sampler2D GrassTexture; +layout (binding=6) uniform sampler2D SandTexture; +layout (binding=7) uniform sampler2D BlendMap; + +uniform float texScale; //Determines how many times the textures will loop over the terrain uniform vec3 SunDirection_cameraspace; uniform mat4 V; @@ -23,20 +30,20 @@ out vec4 frag_Position; out vec4 frag_Normal; out vec4 frag_Specular; -float Shadow(vec4 ShadowCoord) +float Shadow(vec4 ShadowCoord, vec3 normal) { if (Input.ShadowCoord.x < 0.0 || Input.ShadowCoord.x > 1.0 || Input.ShadowCoord.y < 0.0 || Input.ShadowCoord.y > 1.0) return 0.9; - - //Fixed bias - //float bias = 0.00005; //Variable bias - vec3 n = normalize(Input.Normal); + vec3 n = normalize(normal); vec3 l = normalize(SunDirection_cameraspace); float cosTheta = clamp(dot(n, l), 0.0, 1.0); float bias = tan(acos(cosTheta)); - bias = clamp(bias, 0.0, 0.00005); + bias = clamp(bias, 0.0, 0.00003); + + //Fixed bias + //float bias = 0.0005; if( texture(ShadowTexture, Input.ShadowCoord.xy).z < ShadowCoord.z + bias) { @@ -50,9 +57,24 @@ float Shadow(vec4 ShadowCoord) void main() { + //Fixa så den bara gör detta om modellen har en blend map + //vvvvvv + + vec4 Blend = texture2D(BlendMap, Input.TextureCoord.st ); + vec4 AsphaltTexel = texture2D(AsphaltTexture, Input.TextureCoord.st * texScale); + vec4 GrassTexel = texture2D(GrassTexture, Input.TextureCoord.st * texScale); + vec4 SandTexel = texture2D(SandTexture, Input.TextureCoord.st * texScale); + + //Mix the Terrain-textures together + AsphaltTexel *= Blend.r; + GrassTexel = mix(AsphaltTexel, GrassTexel, Blend.g); + vec4 tex = mix(GrassTexel, SandTexel, Blend.b); + + //^^^^^^ + //Fixa så den bara gör detta om modellen har en blend map + + - // Diffuse Texture - frag_Diffuse = texture(DiffuseTexture, Input.TextureCoord) * Shadow(Input.ShadowCoord); // G-buffer Position frag_Position = vec4(Input.Position.xyz, 1.0); @@ -63,6 +85,10 @@ void main() //frag_Diffuse = normalize(vec4(TBN * vec3(texture(NormalMapTexture, Input.TextureCoord)), 0.0)); //frag_Normal = vec4(Input.Normal, 0.0); + // Diffuse Texture + //frag_Diffuse = tex; + frag_Diffuse = texture(DiffuseTexture, Input.TextureCoord) * Shadow(Input.ShadowCoord, vec3(frag_Normal)); + //G-buffer Specular frag_Specular = texture(SpecularMapTexture, Input.TextureCoord); } \ No newline at end of file diff --git a/src/Shaders/Fragment2.glsl b/src/Shaders/Fragment2.glsl index 265cf2a..27dcb76 100644 --- a/src/Shaders/Fragment2.glsl +++ b/src/Shaders/Fragment2.glsl @@ -49,7 +49,7 @@ vec4 phong(vec3 position, vec3 normal, vec3 specular) vec3 surfaceToViewer = normalize(-position); vec3 halfWay = normalize(surfaceToViewer + directionToLight); float dotSpecular = max(dot(halfWay, normal), 0.0); - float specularFactor = pow(dotSpecular, specularExponent * 2.0); + float specularFactor = pow(dotSpecular, specularExponent); vec3 Is = specular.r * ls * specularFactor; //Attenuation diff --git a/src/Shaders/SunPass.frag.glsl b/src/Shaders/SunPass.frag.glsl new file mode 100644 index 0000000..6f80c40 --- /dev/null +++ b/src/Shaders/SunPass.frag.glsl @@ -0,0 +1,61 @@ +#version 430 + +layout (binding=0) uniform sampler2D PositionTexture; +layout (binding=1) uniform sampler2D NormalsTexture; +layout (binding=2) uniform sampler2D SpecularTexture; + +uniform vec2 ViewportSize; +uniform mat4 MVP; +uniform mat4 M; +uniform mat4 V; +uniform mat4 P; +uniform vec3 CameraPosition; +uniform vec3 directionToSun; + +const vec3 ks = vec3(1.0, 1.0, 1.0); +const vec3 kd = vec3(1.0, 1.0, 1.0); +const vec3 ka = vec3(1.0, 1.0, 1.0); +const float kshine = 1.0; +const vec3 SunDiffuseLight = vec3(0.3, 0.3, 0.3); +const vec3 SunSpecularLight = vec3(1.0, 1.0, 1.0); +const vec3 SunPos = directionToSun*vec3(100); +const float specularExponent = 5; + + +in VertexData +{ + vec3 Position; + vec2 TextureCoord; +} Input; + +out vec4 FragColor; + +vec4 phong(vec3 position, vec3 normal, vec3 specular) +{ + + //Diffuse Sunlight + vec3 directionToLight = normalize(vec3(V * vec4(directionToSun, 0.0))); + float dotProdLight = dot(directionToLight, normal); + dotProdLight = max(dotProdLight, 0.0); + vec3 sId = kd * SunDiffuseLight * dotProdLight; + + //Specular Sunlight + vec3 surfaceToViewer = normalize(-position); + vec3 halfWay = normalize(surfaceToViewer + directionToLight); + float dotSpecular = max(dot(halfWay, normal), 0.0); + float specularFactorSun = pow(dotSpecular, specularExponent); + vec3 sIs = specular.r * SunSpecularLight * specularFactorSun; + + return vec4((sId), sIs.r); +} + +void main() +{ + vec2 TextureCoord = gl_FragCoord.xy / ViewportSize; + vec4 PositionTexel = texture(PositionTexture, TextureCoord); + vec4 NormalTexel = texture(NormalsTexture, TextureCoord); + vec4 SpecularTexel = texture(SpecularTexture, TextureCoord); + + FragColor = phong(vec3(PositionTexel), vec3(normalize(NormalTexel)), vec3(SpecularTexel)); + //FragColor = NormalTexel; +} \ No newline at end of file diff --git a/src/Shaders/SunPass.vert.glsl b/src/Shaders/SunPass.vert.glsl new file mode 100644 index 0000000..d743489 --- /dev/null +++ b/src/Shaders/SunPass.vert.glsl @@ -0,0 +1,21 @@ +#version 430 + +uniform mat4 MVP; + +layout (location = 0) in vec3 Position; +layout (location = 2) in vec2 TextureCoord; + +uniform mat4 depthBiasMVP; + +out VertexData +{ + vec3 Position; + vec2 TextureCoord; +} Output; + +void main() +{ + gl_Position = MVP * vec4(Position, 1.0); + Output.Position = Position; + Output.TextureCoord = (vec2(Position) + 1.0) / 2.0; +} \ No newline at end of file diff --git a/vs11/Returngeance.sln b/vs11/Returngeance.sln index 8bcc255..734b64e 100644 --- a/vs11/Returngeance.sln +++ b/vs11/Returngeance.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.30110.0 +VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Returngeance", "Returngeance\Returngeance.vcxproj", "{E8B4A2A2-882B-402A-98A7-8B4F7233C8B3}" EndProject diff --git a/vs11/Returngeance/Returngeance.vcxproj b/vs11/Returngeance/Returngeance.vcxproj index fb99cf9..be93bf9 100755 --- a/vs11/Returngeance/Returngeance.vcxproj +++ b/vs11/Returngeance/Returngeance.vcxproj @@ -229,6 +229,8 @@ + + diff --git a/vs11/Returngeance/Returngeance.vcxproj.filters b/vs11/Returngeance/Returngeance.vcxproj.filters index 75bcb9d..766ef1c 100755 --- a/vs11/Returngeance/Returngeance.vcxproj.filters +++ b/vs11/Returngeance/Returngeance.vcxproj.filters @@ -468,5 +468,11 @@ Shaders + + Shaders + + + Shaders + \ No newline at end of file