@@ -78,9 +78,9 @@ public: | |||||
m_fbo->Bind(); | m_fbo->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
@@ -92,8 +92,8 @@ public: | |||||
} | } | ||||
/* FIXME: we should just disable depth test in the shader */ | /* FIXME: we should just disable depth test in the shader */ | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetDepthFunc(DepthFunc::Disabled); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.depth_func(DepthFunc::Disabled); | |||||
/* FIXME: this no longer works because we don’t restore the | /* FIXME: this no longer works because we don’t restore the | ||||
* actually bound framebuffer. */ | * actually bound framebuffer. */ | ||||
@@ -146,9 +146,9 @@ public: | |||||
m_fbos.last().m1->Bind(); | m_fbos.last().m1->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
m_fbos.last().m1->Unbind(); | m_fbos.last().m1->Unbind(); | ||||
@@ -157,9 +157,9 @@ public: | |||||
temp_buffer = std::make_shared<Framebuffer>(Video::GetSize()); | temp_buffer = std::make_shared<Framebuffer>(Video::GetSize()); | ||||
temp_buffer->Bind(); | temp_buffer->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
temp_buffer->Unbind(); | temp_buffer->Unbind(); | ||||
@@ -221,9 +221,9 @@ public: | |||||
temp_buffer->Bind(); | temp_buffer->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
temp_buffer->Unbind(); | temp_buffer->Unbind(); | ||||
@@ -251,9 +251,9 @@ public: | |||||
m_fbos[f].m1->Bind(); | m_fbos[f].m1->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
m_fbos[f].m1->Unbind(); | m_fbos[f].m1->Unbind(); | ||||
@@ -304,9 +304,9 @@ public: | |||||
//m_timer = 1.0f; | //m_timer = 1.0f; | ||||
m_fbos[m_cur_fbo].m1->Bind(); | m_fbos[m_cur_fbo].m1->Bind(); | ||||
{ | { | ||||
RenderContext rc(scene.get_renderer()); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(scene.get_renderer()); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | scene.get_renderer()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
} | } | ||||
m_fbos[m_cur_fbo].m1->Unbind(); | m_fbos[m_cur_fbo].m1->Unbind(); | ||||
@@ -47,7 +47,7 @@ private: | |||||
class RenderContextData | class RenderContextData | ||||
{ | { | ||||
friend class RenderContext; | |||||
friend class render_context; | |||||
private: | private: | ||||
tracked_var<ibox2> m_viewport; | tracked_var<ibox2> m_viewport; | ||||
@@ -66,16 +66,16 @@ private: | |||||
}; | }; | ||||
/* | /* | ||||
* Public RenderContext class | |||||
* Public render_context class | |||||
*/ | */ | ||||
RenderContext::RenderContext(std::shared_ptr<Renderer> renderer) | |||||
render_context::render_context(std::shared_ptr<Renderer> renderer) | |||||
: m_renderer(renderer), | : m_renderer(renderer), | ||||
m_data(std::make_unique<RenderContextData>()) | m_data(std::make_unique<RenderContextData>()) | ||||
{ | { | ||||
} | } | ||||
RenderContext::~RenderContext() | |||||
render_context::~render_context() | |||||
{ | { | ||||
if (m_data->m_viewport.is_dirty()) | if (m_data->m_viewport.is_dirty()) | ||||
m_renderer->SetViewport(m_data->m_viewport.get()); | m_renderer->SetViewport(m_data->m_viewport.get()); | ||||
@@ -110,7 +110,7 @@ RenderContext::~RenderContext() | |||||
m_renderer->SetScissorMode(m_data->m_scissor_mode.get()); | m_renderer->SetScissorMode(m_data->m_scissor_mode.get()); | ||||
} | } | ||||
void RenderContext::SetViewport(ibox2 viewport) | |||||
void render_context::viewport(ibox2 viewport) | |||||
{ | { | ||||
if (!m_data->m_viewport.is_dirty()) | if (!m_data->m_viewport.is_dirty()) | ||||
m_data->m_viewport.set(m_renderer->GetViewport()); | m_data->m_viewport.set(m_renderer->GetViewport()); | ||||
@@ -118,12 +118,12 @@ void RenderContext::SetViewport(ibox2 viewport) | |||||
m_renderer->SetViewport(viewport); | m_renderer->SetViewport(viewport); | ||||
} | } | ||||
ibox2 RenderContext::GetViewport() | |||||
ibox2 render_context::viewport() | |||||
{ | { | ||||
return m_renderer->GetViewport(); | return m_renderer->GetViewport(); | ||||
} | } | ||||
void RenderContext::SetClearColor(vec4 color) | |||||
void render_context::clear_color(vec4 color) | |||||
{ | { | ||||
if (!m_data->m_clear_color.is_dirty()) | if (!m_data->m_clear_color.is_dirty()) | ||||
m_data->m_clear_color.set(m_renderer->GetClearColor()); | m_data->m_clear_color.set(m_renderer->GetClearColor()); | ||||
@@ -131,12 +131,12 @@ void RenderContext::SetClearColor(vec4 color) | |||||
m_renderer->SetClearColor(color); | m_renderer->SetClearColor(color); | ||||
} | } | ||||
vec4 RenderContext::GetClearColor() | |||||
vec4 render_context::clear_color() | |||||
{ | { | ||||
return m_renderer->GetClearColor(); | return m_renderer->GetClearColor(); | ||||
} | } | ||||
void RenderContext::SetClearDepth(float depth) | |||||
void render_context::clear_depth(float depth) | |||||
{ | { | ||||
if (!m_data->m_clear_depth.is_dirty()) | if (!m_data->m_clear_depth.is_dirty()) | ||||
m_data->m_clear_depth.set(m_renderer->GetClearDepth()); | m_data->m_clear_depth.set(m_renderer->GetClearDepth()); | ||||
@@ -144,12 +144,12 @@ void RenderContext::SetClearDepth(float depth) | |||||
m_renderer->SetClearDepth(depth); | m_renderer->SetClearDepth(depth); | ||||
} | } | ||||
float RenderContext::GetClearDepth() | |||||
float render_context::clear_depth() | |||||
{ | { | ||||
return m_renderer->GetClearDepth(); | return m_renderer->GetClearDepth(); | ||||
} | } | ||||
void RenderContext::SetAlphaFunc(AlphaFunc func, float alpha) | |||||
void render_context::alpha_func(AlphaFunc func, float alpha) | |||||
{ | { | ||||
if (!m_data->m_alpha_func.is_dirty()) | if (!m_data->m_alpha_func.is_dirty()) | ||||
m_data->m_alpha_func.set(m_renderer->GetAlphaFunc()); | m_data->m_alpha_func.set(m_renderer->GetAlphaFunc()); | ||||
@@ -159,17 +159,17 @@ void RenderContext::SetAlphaFunc(AlphaFunc func, float alpha) | |||||
m_renderer->SetAlphaFunc(func, alpha); | m_renderer->SetAlphaFunc(func, alpha); | ||||
} | } | ||||
AlphaFunc RenderContext::GetAlphaFunc() | |||||
AlphaFunc render_context::alpha_func() | |||||
{ | { | ||||
return m_renderer->GetAlphaFunc(); | return m_renderer->GetAlphaFunc(); | ||||
} | } | ||||
float RenderContext::GetAlphaValue() | |||||
float render_context::alpha_value() | |||||
{ | { | ||||
return m_renderer->GetAlphaValue(); | return m_renderer->GetAlphaValue(); | ||||
} | } | ||||
void RenderContext::SetBlendEquation(BlendEquation rgb, BlendEquation alpha) | |||||
void render_context::blend_equation(BlendEquation rgb, BlendEquation alpha) | |||||
{ | { | ||||
if (!m_data->m_blend_rgb.is_dirty()) | if (!m_data->m_blend_rgb.is_dirty()) | ||||
m_data->m_blend_rgb.set(m_renderer->GetBlendEquationRgb()); | m_data->m_blend_rgb.set(m_renderer->GetBlendEquationRgb()); | ||||
@@ -179,17 +179,17 @@ void RenderContext::SetBlendEquation(BlendEquation rgb, BlendEquation alpha) | |||||
m_renderer->SetBlendEquation(rgb, alpha); | m_renderer->SetBlendEquation(rgb, alpha); | ||||
} | } | ||||
BlendEquation RenderContext::GetBlendEquationRgb() | |||||
BlendEquation render_context::blend_equation_rgb() | |||||
{ | { | ||||
return m_renderer->GetBlendEquationRgb(); | return m_renderer->GetBlendEquationRgb(); | ||||
} | } | ||||
BlendEquation RenderContext::GetBlendEquationAlpha() | |||||
BlendEquation render_context::blend_equation_alpha() | |||||
{ | { | ||||
return m_renderer->GetBlendEquationAlpha(); | return m_renderer->GetBlendEquationAlpha(); | ||||
} | } | ||||
void RenderContext::SetBlendFunc(BlendFunc src, BlendFunc dst) | |||||
void render_context::blend_func(BlendFunc src, BlendFunc dst) | |||||
{ | { | ||||
if (!m_data->m_blend_src.is_dirty()) | if (!m_data->m_blend_src.is_dirty()) | ||||
m_data->m_blend_src.set(m_renderer->GetBlendFuncSrc()); | m_data->m_blend_src.set(m_renderer->GetBlendFuncSrc()); | ||||
@@ -199,17 +199,17 @@ void RenderContext::SetBlendFunc(BlendFunc src, BlendFunc dst) | |||||
m_renderer->SetBlendFunc(src, dst); | m_renderer->SetBlendFunc(src, dst); | ||||
} | } | ||||
BlendFunc RenderContext::GetBlendFuncSrc() | |||||
BlendFunc render_context::blend_func_src() | |||||
{ | { | ||||
return m_renderer->GetBlendFuncSrc(); | return m_renderer->GetBlendFuncSrc(); | ||||
} | } | ||||
BlendFunc RenderContext::GetBlendFuncDst() | |||||
BlendFunc render_context::blend_func_dst() | |||||
{ | { | ||||
return m_renderer->GetBlendFuncDst(); | return m_renderer->GetBlendFuncDst(); | ||||
} | } | ||||
void RenderContext::SetDepthFunc(DepthFunc func) | |||||
void render_context::depth_func(DepthFunc func) | |||||
{ | { | ||||
if (!m_data->m_depth_func.is_dirty()) | if (!m_data->m_depth_func.is_dirty()) | ||||
m_data->m_depth_func.set(m_renderer->GetDepthFunc()); | m_data->m_depth_func.set(m_renderer->GetDepthFunc()); | ||||
@@ -217,12 +217,12 @@ void RenderContext::SetDepthFunc(DepthFunc func) | |||||
m_renderer->SetDepthFunc(func); | m_renderer->SetDepthFunc(func); | ||||
} | } | ||||
DepthFunc RenderContext::GetDepthFunc() | |||||
DepthFunc render_context::depth_func() | |||||
{ | { | ||||
return m_renderer->GetDepthFunc(); | return m_renderer->GetDepthFunc(); | ||||
} | } | ||||
void RenderContext::SetDepthMask(DepthMask mask) | |||||
void render_context::depth_mask(DepthMask mask) | |||||
{ | { | ||||
if (!m_data->m_depth_mask.is_dirty()) | if (!m_data->m_depth_mask.is_dirty()) | ||||
m_data->m_depth_mask.set(m_renderer->GetDepthMask()); | m_data->m_depth_mask.set(m_renderer->GetDepthMask()); | ||||
@@ -230,12 +230,12 @@ void RenderContext::SetDepthMask(DepthMask mask) | |||||
m_renderer->SetDepthMask(mask); | m_renderer->SetDepthMask(mask); | ||||
} | } | ||||
DepthMask RenderContext::GetDepthMask() | |||||
DepthMask render_context::depth_mask() | |||||
{ | { | ||||
return m_renderer->GetDepthMask(); | return m_renderer->GetDepthMask(); | ||||
} | } | ||||
void RenderContext::SetCullMode(CullMode mode) | |||||
void render_context::cull_mode(CullMode mode) | |||||
{ | { | ||||
if (!m_data->m_cull_mode.is_dirty()) | if (!m_data->m_cull_mode.is_dirty()) | ||||
m_data->m_cull_mode.set(m_renderer->GetCullMode()); | m_data->m_cull_mode.set(m_renderer->GetCullMode()); | ||||
@@ -243,12 +243,12 @@ void RenderContext::SetCullMode(CullMode mode) | |||||
m_renderer->SetCullMode(mode); | m_renderer->SetCullMode(mode); | ||||
} | } | ||||
CullMode RenderContext::GetCullMode() | |||||
CullMode render_context::cull_mode() | |||||
{ | { | ||||
return m_renderer->GetCullMode(); | return m_renderer->GetCullMode(); | ||||
} | } | ||||
void RenderContext::SetPolygonMode(PolygonMode mode) | |||||
void render_context::polygon_mode(PolygonMode mode) | |||||
{ | { | ||||
if (!m_data->m_polygon_mode.is_dirty()) | if (!m_data->m_polygon_mode.is_dirty()) | ||||
m_data->m_polygon_mode.set(m_renderer->GetPolygonMode()); | m_data->m_polygon_mode.set(m_renderer->GetPolygonMode()); | ||||
@@ -256,12 +256,12 @@ void RenderContext::SetPolygonMode(PolygonMode mode) | |||||
m_renderer->SetPolygonMode(mode); | m_renderer->SetPolygonMode(mode); | ||||
} | } | ||||
PolygonMode RenderContext::GetPolygonMode() | |||||
PolygonMode render_context::polygon_mode() | |||||
{ | { | ||||
return m_renderer->GetPolygonMode(); | return m_renderer->GetPolygonMode(); | ||||
} | } | ||||
void RenderContext::SetScissorMode(ScissorMode mode) | |||||
void render_context::scissor_mode(ScissorMode mode) | |||||
{ | { | ||||
if (!m_data->m_scissor_mode.is_dirty()) | if (!m_data->m_scissor_mode.is_dirty()) | ||||
m_data->m_scissor_mode.set(m_renderer->GetScissorMode()); | m_data->m_scissor_mode.set(m_renderer->GetScissorMode()); | ||||
@@ -269,7 +269,7 @@ void RenderContext::SetScissorMode(ScissorMode mode) | |||||
m_renderer->SetScissorMode(mode); | m_renderer->SetScissorMode(mode); | ||||
} | } | ||||
void RenderContext::SetScissorRect(vec4 rect) | |||||
void render_context::scissor_rect(vec4 rect) | |||||
{ | { | ||||
if (!m_data->m_scissor_rect.is_dirty()) | if (!m_data->m_scissor_rect.is_dirty()) | ||||
m_data->m_scissor_rect.set(m_renderer->GetScissorRect()); | m_data->m_scissor_rect.set(m_renderer->GetScissorRect()); | ||||
@@ -277,12 +277,12 @@ void RenderContext::SetScissorRect(vec4 rect) | |||||
m_renderer->SetScissorRect(rect); | m_renderer->SetScissorRect(rect); | ||||
} | } | ||||
ScissorMode RenderContext::GetScissorMode() | |||||
ScissorMode render_context::scissor_mode() | |||||
{ | { | ||||
return m_renderer->GetScissorMode(); | return m_renderer->GetScissorMode(); | ||||
} | } | ||||
vec4 RenderContext::GetScissorRect() | |||||
vec4 render_context::scissor_rect() | |||||
{ | { | ||||
return m_renderer->GetScissorRect(); | return m_renderer->GetScissorRect(); | ||||
} | } | ||||
@@ -26,40 +26,40 @@ namespace lol | |||||
class RenderContextData; | class RenderContextData; | ||||
class RenderContext | |||||
class render_context | |||||
{ | { | ||||
public: | public: | ||||
RenderContext(std::shared_ptr<Renderer> renderer); | |||||
~RenderContext(); | |||||
render_context(std::shared_ptr<Renderer> renderer); | |||||
~render_context(); | |||||
void SetViewport(ibox2 viewport); | |||||
void SetClearColor(vec4 color); | |||||
void SetClearDepth(float depth); | |||||
void SetAlphaFunc(AlphaFunc func, float alpha); | |||||
void SetBlendEquation(BlendEquation rgb, BlendEquation alpha); | |||||
void SetBlendFunc(BlendFunc src, BlendFunc dst); | |||||
void SetDepthFunc(DepthFunc func); | |||||
void SetDepthMask(DepthMask mask); | |||||
void SetCullMode(CullMode mode); | |||||
void SetPolygonMode(PolygonMode mode); | |||||
void SetScissorMode(ScissorMode mode); | |||||
void SetScissorRect(vec4 rect); | |||||
void viewport(ibox2 viewport); | |||||
void clear_color(vec4 color); | |||||
void clear_depth(float depth); | |||||
void alpha_func(AlphaFunc func, float alpha); | |||||
void blend_equation(BlendEquation rgb, BlendEquation alpha); | |||||
void blend_func(BlendFunc src, BlendFunc dst); | |||||
void depth_func(DepthFunc func); | |||||
void depth_mask(DepthMask mask); | |||||
void cull_mode(CullMode mode); | |||||
void polygon_mode(PolygonMode mode); | |||||
void scissor_mode(ScissorMode mode); | |||||
void scissor_rect(vec4 rect); | |||||
ibox2 GetViewport(); | |||||
vec4 GetClearColor(); | |||||
float GetClearDepth(); | |||||
AlphaFunc GetAlphaFunc(); | |||||
float GetAlphaValue(); | |||||
BlendEquation GetBlendEquationRgb(); | |||||
BlendEquation GetBlendEquationAlpha(); | |||||
BlendFunc GetBlendFuncSrc(); | |||||
BlendFunc GetBlendFuncDst(); | |||||
DepthFunc GetDepthFunc(); | |||||
DepthMask GetDepthMask(); | |||||
CullMode GetCullMode(); | |||||
PolygonMode GetPolygonMode(); | |||||
ScissorMode GetScissorMode(); | |||||
vec4 GetScissorRect(); | |||||
ibox2 viewport(); | |||||
vec4 clear_color(); | |||||
float clear_depth(); | |||||
AlphaFunc alpha_func(); | |||||
float alpha_value(); | |||||
BlendEquation blend_equation_rgb(); | |||||
BlendEquation blend_equation_alpha(); | |||||
BlendFunc blend_func_src(); | |||||
BlendFunc blend_func_dst(); | |||||
DepthFunc depth_func(); | |||||
DepthMask depth_mask(); | |||||
CullMode cull_mode(); | |||||
PolygonMode polygon_mode(); | |||||
ScissorMode scissor_mode(); | |||||
vec4 scissor_rect(); | |||||
private: | private: | ||||
std::shared_ptr<Renderer> m_renderer; | std::shared_ptr<Renderer> m_renderer; | ||||
@@ -361,10 +361,10 @@ void LolImGui::RenderDrawListsMethod(ImDrawData* draw_data) | |||||
if (!m_shader) | if (!m_shader) | ||||
return; | return; | ||||
RenderContext rc(Scene::GetScene(0).get_renderer()); | |||||
rc.SetCullMode(CullMode::Disabled); | |||||
rc.SetDepthFunc(DepthFunc::Disabled); | |||||
rc.SetScissorMode(ScissorMode::Enabled); | |||||
render_context rc(Scene::GetScene(0).get_renderer()); | |||||
rc.cull_mode(CullMode::Disabled); | |||||
rc.depth_func(DepthFunc::Disabled); | |||||
rc.scissor_mode(ScissorMode::Enabled); | |||||
m_shader->Bind(); | m_shader->Bind(); | ||||
@@ -407,7 +407,7 @@ void LolImGui::RenderDrawListsMethod(ImDrawData* draw_data) | |||||
m_shader->SetUniform(m_texture, texture->GetTextureUniform(), 0); | m_shader->SetUniform(m_texture, texture->GetTextureUniform(), 0); | ||||
} | } | ||||
rc.SetScissorRect(command.ClipRect); | |||||
rc.scissor_rect(command.ClipRect); | |||||
#ifdef SHOW_IMGUI_DEBUG | #ifdef SHOW_IMGUI_DEBUG | ||||
//----------------------------------------------------------------- | //----------------------------------------------------------------- | ||||
@@ -143,7 +143,7 @@ private: | |||||
SceneDisplay* m_display = nullptr; | SceneDisplay* m_display = nullptr; | ||||
/** Render buffers: where to render to. */ | /** Render buffers: where to render to. */ | ||||
Framebuffer *m_renderbuffer[4]; | |||||
std::shared_ptr<Framebuffer> m_renderbuffer[4]; | |||||
struct postprocess | struct postprocess | ||||
{ | { | ||||
@@ -210,10 +210,8 @@ Scene::Scene(ivec2 size) | |||||
data(std::make_unique<SceneData>()), | data(std::make_unique<SceneData>()), | ||||
m_renderer(std::make_shared<Renderer>(size)) | m_renderer(std::make_shared<Renderer>(size)) | ||||
{ | { | ||||
data->m_renderbuffer[0] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[1] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[2] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[3] = new Framebuffer(m_size); | |||||
for (int i = 0; i < 4; ++i) | |||||
data->m_renderbuffer[i] = std::make_shared<Framebuffer>(m_size); | |||||
data->m_pp.m_shader[0] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_blit)); | data->m_pp.m_shader[0] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_blit)); | ||||
data->m_pp.m_shader[1] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_postprocess)); | data->m_pp.m_shader[1] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_postprocess)); | ||||
data->m_pp.m_coord[0] = data->m_pp.m_shader[0]->GetAttribLocation(VertexUsage::Position, 0); | data->m_pp.m_coord[0] = data->m_pp.m_shader[0]->GetAttribLocation(VertexUsage::Position, 0); | ||||
@@ -579,14 +577,8 @@ void Scene::pre_render(float) | |||||
if (m_size != m_wanted_size) | if (m_size != m_wanted_size) | ||||
{ | { | ||||
m_size = m_wanted_size; | m_size = m_wanted_size; | ||||
delete data->m_renderbuffer[0]; | |||||
delete data->m_renderbuffer[1]; | |||||
delete data->m_renderbuffer[2]; | |||||
delete data->m_renderbuffer[3]; | |||||
data->m_renderbuffer[0] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[1] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[2] = new Framebuffer(m_size); | |||||
data->m_renderbuffer[3] = new Framebuffer(m_size); | |||||
for (int i = 0; i < 4; ++i) | |||||
data->m_renderbuffer[i] = std::make_shared<Framebuffer>(m_size); | |||||
mat4 proj = mat4::ortho(0.f, (float)m_size.x, 0.f, (float)m_size.y, -1000.f, 1000.f); | mat4 proj = mat4::ortho(0.f, (float)m_size.x, 0.f, (float)m_size.y, -1000.f, 1000.f); | ||||
data->m_default_cam->SetProjection(proj); | data->m_default_cam->SetProjection(proj); | ||||
@@ -599,11 +591,11 @@ void Scene::pre_render(float) | |||||
} | } | ||||
{ | { | ||||
RenderContext rc(m_renderer); | |||||
render_context rc(m_renderer); | |||||
if (do_pp) | if (do_pp) | ||||
{ | { | ||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
} | } | ||||
m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | ||||
@@ -633,9 +625,9 @@ void Scene::post_render(float) | |||||
data->m_renderbuffer[3]->Bind(); | data->m_renderbuffer[3]->Bind(); | ||||
RenderContext rc(m_renderer); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(m_renderer); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | ||||
/* Execute post process */ | /* Execute post process */ | ||||
@@ -657,9 +649,9 @@ void Scene::post_render(float) | |||||
data->m_pp.m_shader[0]->Bind(); | data->m_pp.m_shader[0]->Bind(); | ||||
RenderContext rc(m_renderer); | |||||
rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.SetClearDepth(1.f); | |||||
render_context rc(m_renderer); | |||||
rc.clear_color(vec4(0.f, 0.f, 0.f, 1.f)); | |||||
rc.clear_depth(1.f); | |||||
m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | m_renderer->Clear(ClearMask::Color | ClearMask::Depth); | ||||
/* Blit final image to screen */ | /* Blit final image to screen */ | ||||
@@ -687,9 +679,9 @@ void Scene::render_primitives() | |||||
ASSERT(!!data, "Trying to access a non-ready scene"); | ASSERT(!!data, "Trying to access a non-ready scene"); | ||||
/* FIXME: Temp fix for mesh having no render context*/ | /* FIXME: Temp fix for mesh having no render context*/ | ||||
RenderContext rc(m_renderer); | |||||
rc.SetCullMode(CullMode::Clockwise); | |||||
rc.SetDepthFunc(DepthFunc::LessOrEqual); | |||||
render_context rc(m_renderer); | |||||
rc.cull_mode(CullMode::Clockwise); | |||||
rc.depth_func(DepthFunc::LessOrEqual); | |||||
/* new scenegraph */ | /* new scenegraph */ | ||||
for (uintptr_t key : keys(data->m_prim_renderers)) | for (uintptr_t key : keys(data->m_prim_renderers)) | ||||
@@ -708,7 +700,7 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||||
{ | { | ||||
ASSERT(!!data, "Trying to access a non-ready scene"); | ASSERT(!!data, "Trying to access a non-ready scene"); | ||||
RenderContext rc(m_renderer); | |||||
render_context rc(m_renderer); | |||||
/* Early test if nothing needs to be rendered */ | /* Early test if nothing needs to be rendered */ | ||||
if (!data->m_tile_api.m_tiles.count() && !data->m_tile_api.m_palettes.count()) | if (!data->m_tile_api.m_tiles.count() && !data->m_tile_api.m_palettes.count()) | ||||
@@ -716,12 +708,12 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||||
/* FIXME: we disable culling for now because we don’t have a reliable | /* FIXME: we disable culling for now because we don’t have a reliable | ||||
* way to know which side is facing the camera. */ | * way to know which side is facing the camera. */ | ||||
rc.SetCullMode(CullMode::Disabled); | |||||
rc.cull_mode(CullMode::Disabled); | |||||
rc.SetDepthFunc(DepthFunc::LessOrEqual); | |||||
rc.SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::OneMinusSrcAlpha); | |||||
rc.SetBlendEquation(BlendEquation::Add, BlendEquation::Max); | |||||
rc.SetAlphaFunc(AlphaFunc::GreaterOrEqual, 0.01f); | |||||
rc.depth_func(DepthFunc::LessOrEqual); | |||||
rc.blend_func(BlendFunc::SrcAlpha, BlendFunc::OneMinusSrcAlpha); | |||||
rc.blend_equation(BlendEquation::Add, BlendEquation::Max); | |||||
rc.alpha_func(AlphaFunc::GreaterOrEqual, 0.01f); | |||||
#if (defined LOL_USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X | #if (defined LOL_USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
@@ -832,15 +824,15 @@ void Scene::render_lines(float seconds) | |||||
{ | { | ||||
ASSERT(!!data, "Trying to access a non-ready scene"); | ASSERT(!!data, "Trying to access a non-ready scene"); | ||||
RenderContext rc(m_renderer); | |||||
render_context rc(m_renderer); | |||||
if (!data->m_line_api.m_lines.count()) | if (!data->m_line_api.m_lines.count()) | ||||
return; | return; | ||||
rc.SetDepthFunc(DepthFunc::LessOrEqual); | |||||
rc.SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::OneMinusSrcAlpha); | |||||
rc.SetBlendEquation(BlendEquation::Add, BlendEquation::Max); | |||||
rc.SetAlphaFunc(AlphaFunc::GreaterOrEqual, 0.01f); | |||||
rc.depth_func(DepthFunc::LessOrEqual); | |||||
rc.blend_func(BlendFunc::SrcAlpha, BlendFunc::OneMinusSrcAlpha); | |||||
rc.blend_equation(BlendEquation::Add, BlendEquation::Max); | |||||
rc.alpha_func(AlphaFunc::GreaterOrEqual, 0.01f); | |||||
int linecount = (int)data->m_line_api.m_lines.count(); | int linecount = (int)data->m_line_api.m_lines.count(); | ||||