such as alpha blending, depth test, etc.legacy
| @@ -50,6 +50,7 @@ liblolcore_headers = \ | |||||
| lol/gpu/all.h \ | lol/gpu/all.h \ | ||||
| lol/gpu/shader.h lol/gpu/indexbuffer.h lol/gpu/vertexbuffer.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/framebuffer.h lol/gpu/texture.h lol/gpu/lolfx.h \ | ||||
| lol/gpu/renderer.h lol/gpu/rendercontext.h \ | |||||
| \ | \ | ||||
| lol/debug/all.h \ | lol/debug/all.h \ | ||||
| lol/debug/lines.h \ | lol/debug/lines.h \ | ||||
| @@ -77,7 +78,8 @@ liblolcore_sources = \ | |||||
| math/geometry.cpp \ | math/geometry.cpp \ | ||||
| \ | \ | ||||
| gpu/shader.cpp gpu/indexbuffer.cpp gpu/vertexbuffer.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/input.cpp input/input.h \ | ||||
| input/keyboard.cpp input/keyboard.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/texture.h> | ||||
| #include <lol/gpu/framebuffer.h> | #include <lol/gpu/framebuffer.h> | ||||
| #include <lol/gpu/lolfx.h> | #include <lol/gpu/lolfx.h> | ||||
| #include <lol/gpu/renderer.h> | |||||
| #include <lol/gpu/rendercontext.h> | |||||
| #endif // __LOL_GPU_ALL_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\indexbuffer.cpp" /> | ||||
| <ClCompile Include="gpu\lolfx-compiler.cpp" /> | <ClCompile Include="gpu\lolfx-compiler.cpp" /> | ||||
| <ClCompile Include="gpu\lolfx.cpp" /> | <ClCompile Include="gpu\lolfx.cpp" /> | ||||
| <ClCompile Include="gpu\rendercontext.cpp" /> | |||||
| <ClCompile Include="gpu\renderer.cpp" /> | |||||
| <ClCompile Include="gpu\shader.cpp" /> | <ClCompile Include="gpu\shader.cpp" /> | ||||
| <ClCompile Include="gpu\texture.cpp" /> | <ClCompile Include="gpu\texture.cpp" /> | ||||
| <ClCompile Include="gpu\vertexbuffer.cpp" /> | <ClCompile Include="gpu\vertexbuffer.cpp" /> | ||||
| @@ -209,6 +211,8 @@ | |||||
| <ClInclude Include="lol\gpu\framebuffer.h" /> | <ClInclude Include="lol\gpu\framebuffer.h" /> | ||||
| <ClInclude Include="lol\gpu\indexbuffer.h" /> | <ClInclude Include="lol\gpu\indexbuffer.h" /> | ||||
| <ClInclude Include="lol\gpu\lolfx.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\shader.h" /> | ||||
| <ClInclude Include="lol\gpu\texture.h" /> | <ClInclude Include="lol\gpu\texture.h" /> | ||||
| <ClInclude Include="lol\gpu\vertexbuffer.h" /> | <ClInclude Include="lol\gpu\vertexbuffer.h" /> | ||||
| @@ -111,6 +111,12 @@ | |||||
| <ClCompile Include="mesh\mesh.cpp"> | <ClCompile Include="mesh\mesh.cpp"> | ||||
| <Filter>mesh</Filter> | <Filter>mesh</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="gpu\rendercontext.cpp"> | |||||
| <Filter>gpu</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="gpu\renderer.cpp"> | |||||
| <Filter>gpu</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="gpu\shader.cpp"> | <ClCompile Include="gpu\shader.cpp"> | ||||
| <Filter>gpu</Filter> | <Filter>gpu</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -560,6 +566,12 @@ | |||||
| <ClInclude Include="lol\base\log.h"> | <ClInclude Include="lol\base\log.h"> | ||||
| <Filter>lol\base</Filter> | <Filter>lol\base</Filter> | ||||
| </ClInclude> | </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"> | <ClInclude Include="lol\gpu\shader.h"> | ||||
| <Filter>lol\gpu</Filter> | <Filter>lol\gpu</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -91,6 +91,8 @@ float VideoData::clear_depth; | |||||
| void Video::Setup(ivec2 size) | void Video::Setup(ivec2 size) | ||||
| { | { | ||||
| g_renderer = new Renderer(); | |||||
| #if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
| VideoData::d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); | VideoData::d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); | ||||
| if (!VideoData::d3d_ctx) | if (!VideoData::d3d_ctx) | ||||
| @@ -402,7 +404,8 @@ void Video::Clear(ClearMask m) | |||||
| void Video::Destroy() | void Video::Destroy() | ||||
| { | { | ||||
| ; | |||||
| delete g_renderer; | |||||
| g_renderer = nullptr; | |||||
| } | } | ||||
| void Video::Capture(uint32_t *buffer) | void Video::Capture(uint32_t *buffer) | ||||
| @@ -66,9 +66,10 @@ class Video | |||||
| { | { | ||||
| public: | public: | ||||
| static void Setup(ivec2 size); | static void Setup(ivec2 size); | ||||
| static void Destroy(); | |||||
| static void SetCustomSize(ivec2 size); | static void SetCustomSize(ivec2 size); | ||||
| static void RestoreSize(); | static void RestoreSize(); | ||||
| static void Destroy(); | |||||
| static void SetFov(float theta); | static void SetFov(float theta); | ||||
| static void SetDepth(bool set); | static void SetDepth(bool set); | ||||
| static void SetFaceCulling(bool set); | static void SetFaceCulling(bool set); | ||||