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); | |||