such as alpha blending, depth test, etc.legacy
| @@ -50,6 +50,7 @@ liblolcore_headers = \ | |||
| lol/gpu/all.h \ | |||
| lol/gpu/shader.h lol/gpu/indexbuffer.h lol/gpu/vertexbuffer.h \ | |||
| lol/gpu/framebuffer.h lol/gpu/texture.h lol/gpu/lolfx.h \ | |||
| lol/gpu/renderer.h lol/gpu/rendercontext.h \ | |||
| \ | |||
| lol/debug/all.h \ | |||
| lol/debug/lines.h \ | |||
| @@ -77,7 +78,8 @@ liblolcore_sources = \ | |||
| math/geometry.cpp \ | |||
| \ | |||
| gpu/shader.cpp gpu/indexbuffer.cpp gpu/vertexbuffer.cpp \ | |||
| gpu/framebuffer.cpp gpu/texture.cpp \ | |||
| gpu/framebuffer.cpp gpu/texture.cpp gpu/renderer.cpp \ | |||
| gpu/rendercontext.cpp \ | |||
| \ | |||
| input/input.cpp input/input.h \ | |||
| input/keyboard.cpp input/keyboard.h \ | |||
| @@ -0,0 +1,91 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // | |||
| #if defined HAVE_CONFIG_H | |||
| # include "config.h" | |||
| #endif | |||
| #include <cstdlib> | |||
| #include "core.h" | |||
| namespace lol | |||
| { | |||
| class TrackedState | |||
| { | |||
| public: | |||
| inline TrackedState() | |||
| : m_state(Unchanged) | |||
| {} | |||
| inline void TrackValue(bool set) | |||
| { | |||
| m_state = set ? MustSet : MustUnset; | |||
| } | |||
| inline bool HasChanged() | |||
| { | |||
| return m_state != Unchanged; | |||
| } | |||
| inline bool GetValue() | |||
| { | |||
| return m_state == MustSet; | |||
| } | |||
| private: | |||
| enum | |||
| { | |||
| Unchanged, | |||
| MustSet, | |||
| MustUnset, | |||
| } | |||
| m_state; | |||
| }; | |||
| class RenderContextData | |||
| { | |||
| friend class RenderContext; | |||
| private: | |||
| Scene *m_scene; | |||
| TrackedState m_blend; | |||
| }; | |||
| /* | |||
| * Public RenderContext class | |||
| */ | |||
| RenderContext::RenderContext() | |||
| : m_data(new RenderContextData()) | |||
| { | |||
| m_data->m_scene = Scene::GetDefault(); | |||
| } | |||
| RenderContext::~RenderContext() | |||
| { | |||
| if (m_data->m_blend.HasChanged()) | |||
| g_renderer->SetBlendState(m_data->m_blend.GetValue()); | |||
| delete m_data; | |||
| } | |||
| void RenderContext::SetBlendState(bool set) | |||
| { | |||
| if (!m_data->m_blend.HasChanged()) | |||
| m_data->m_blend.TrackValue(g_renderer->GetBlendState()); | |||
| g_renderer->SetBlendState(set); | |||
| } | |||
| } /* namespace lol */ | |||
| @@ -0,0 +1,75 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // | |||
| #if defined HAVE_CONFIG_H | |||
| # include "config.h" | |||
| #endif | |||
| #include <cstdlib> | |||
| #include "core.h" | |||
| namespace lol | |||
| { | |||
| /* | |||
| * The global g_renderer object, initialised by Video::Init | |||
| */ | |||
| Renderer *g_renderer; | |||
| /* | |||
| * Private RendererData class | |||
| */ | |||
| class RendererData | |||
| { | |||
| friend class Renderer; | |||
| private: | |||
| bool m_blend; | |||
| }; | |||
| /* | |||
| * Public Renderer class | |||
| */ | |||
| Renderer::Renderer() | |||
| : m_data(new RendererData()) | |||
| { | |||
| m_data->m_blend = false; | |||
| } | |||
| Renderer::~Renderer() | |||
| { | |||
| delete m_data; | |||
| } | |||
| void Renderer::SetBlendState(bool set) | |||
| { | |||
| if (m_data->m_blend == set) | |||
| return; | |||
| m_data->m_blend = set; | |||
| if (set) | |||
| { | |||
| } | |||
| else | |||
| { | |||
| } | |||
| } | |||
| bool Renderer::GetBlendState() const | |||
| { | |||
| return m_data->m_blend; | |||
| } | |||
| } /* namespace lol */ | |||
| @@ -17,6 +17,8 @@ | |||
| #include <lol/gpu/texture.h> | |||
| #include <lol/gpu/framebuffer.h> | |||
| #include <lol/gpu/lolfx.h> | |||
| #include <lol/gpu/renderer.h> | |||
| #include <lol/gpu/rendercontext.h> | |||
| #endif // __LOL_GPU_ALL_H__ | |||
| @@ -0,0 +1,39 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // | |||
| // | |||
| // The RenderContext class | |||
| // ----------------------- | |||
| // | |||
| #if !defined __LOL_RENDERCONTEXT_H__ | |||
| #define __LOL_RENDERCONTEXT_H__ | |||
| namespace lol | |||
| { | |||
| class RenderContextData; | |||
| class RenderContext | |||
| { | |||
| public: | |||
| RenderContext(); | |||
| ~RenderContext(); | |||
| void SetBlendState(bool set); | |||
| private: | |||
| RenderContextData *m_data; | |||
| }; | |||
| } /* namespace lol */ | |||
| #endif // __LOL_RENDERCONTEXT_H__ | |||
| @@ -0,0 +1,42 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // | |||
| // | |||
| // The Renderer class | |||
| // ------------------ | |||
| // | |||
| #if !defined __LOL_RENDERER_H__ | |||
| #define __LOL_RENDERER_H__ | |||
| namespace lol | |||
| { | |||
| class RendererData; | |||
| class Renderer | |||
| { | |||
| public: | |||
| Renderer(); | |||
| ~Renderer(); | |||
| void SetBlendState(bool set); | |||
| bool GetBlendState() const; | |||
| private: | |||
| RendererData *m_data; | |||
| }; | |||
| extern Renderer *g_renderer; | |||
| } /* namespace lol */ | |||
| #endif // __LOL_RENDERER_H__ | |||
| @@ -115,6 +115,8 @@ | |||
| <ClCompile Include="gpu\indexbuffer.cpp" /> | |||
| <ClCompile Include="gpu\lolfx-compiler.cpp" /> | |||
| <ClCompile Include="gpu\lolfx.cpp" /> | |||
| <ClCompile Include="gpu\rendercontext.cpp" /> | |||
| <ClCompile Include="gpu\renderer.cpp" /> | |||
| <ClCompile Include="gpu\shader.cpp" /> | |||
| <ClCompile Include="gpu\texture.cpp" /> | |||
| <ClCompile Include="gpu\vertexbuffer.cpp" /> | |||
| @@ -209,6 +211,8 @@ | |||
| <ClInclude Include="lol\gpu\framebuffer.h" /> | |||
| <ClInclude Include="lol\gpu\indexbuffer.h" /> | |||
| <ClInclude Include="lol\gpu\lolfx.h" /> | |||
| <ClInclude Include="lol\gpu\rendercontext.h" /> | |||
| <ClInclude Include="lol\gpu\renderer.h" /> | |||
| <ClInclude Include="lol\gpu\shader.h" /> | |||
| <ClInclude Include="lol\gpu\texture.h" /> | |||
| <ClInclude Include="lol\gpu\vertexbuffer.h" /> | |||
| @@ -111,6 +111,12 @@ | |||
| <ClCompile Include="mesh\mesh.cpp"> | |||
| <Filter>mesh</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="gpu\rendercontext.cpp"> | |||
| <Filter>gpu</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="gpu\renderer.cpp"> | |||
| <Filter>gpu</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="gpu\shader.cpp"> | |||
| <Filter>gpu</Filter> | |||
| </ClCompile> | |||
| @@ -560,6 +566,12 @@ | |||
| <ClInclude Include="lol\base\log.h"> | |||
| <Filter>lol\base</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="lol\gpu\rendercontext.h"> | |||
| <Filter>lol\gpu</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="lol\gpu\renderer.h"> | |||
| <Filter>lol\gpu</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="lol\gpu\shader.h"> | |||
| <Filter>lol\gpu</Filter> | |||
| </ClInclude> | |||
| @@ -91,6 +91,8 @@ float VideoData::clear_depth; | |||
| void Video::Setup(ivec2 size) | |||
| { | |||
| g_renderer = new Renderer(); | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| VideoData::d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); | |||
| if (!VideoData::d3d_ctx) | |||
| @@ -402,7 +404,8 @@ void Video::Clear(ClearMask m) | |||
| void Video::Destroy() | |||
| { | |||
| ; | |||
| delete g_renderer; | |||
| g_renderer = nullptr; | |||
| } | |||
| void Video::Capture(uint32_t *buffer) | |||
| @@ -66,9 +66,10 @@ class Video | |||
| { | |||
| public: | |||
| static void Setup(ivec2 size); | |||
| static void Destroy(); | |||
| static void SetCustomSize(ivec2 size); | |||
| static void RestoreSize(); | |||
| static void Destroy(); | |||
| static void SetFov(float theta); | |||
| static void SetDepth(bool set); | |||
| static void SetFaceCulling(bool set); | |||