Browse Source

gpu: add SetDepthMask/GetDepthMask to render contexts.

undefined
Sam Hocevar 11 years ago
parent
commit
1b157def49
4 changed files with 71 additions and 0 deletions
  1. +18
    -0
      src/gpu/rendercontext.cpp
  2. +33
    -0
      src/gpu/renderer.cpp
  3. +2
    -0
      src/lol/gpu/rendercontext.h
  4. +18
    -0
      src/lol/gpu/renderer.h

+ 18
- 0
src/gpu/rendercontext.cpp View File

@@ -59,6 +59,7 @@ private:
TrackedState<float> m_alpha_value; TrackedState<float> m_alpha_value;
TrackedState<BlendFunc> m_blend_src, m_blend_dst; TrackedState<BlendFunc> m_blend_src, m_blend_dst;
TrackedState<DepthFunc> m_depth_func; TrackedState<DepthFunc> m_depth_func;
TrackedState<DepthMask> m_depth_mask;
TrackedState<CullMode> m_cull_mode; TrackedState<CullMode> m_cull_mode;
TrackedState<PolygonMode> m_polygon_mode; TrackedState<PolygonMode> m_polygon_mode;
}; };
@@ -94,6 +95,9 @@ RenderContext::~RenderContext()
if (m_data->m_depth_func.HasChanged()) if (m_data->m_depth_func.HasChanged())
g_renderer->SetDepthFunc(m_data->m_depth_func.GetValue()); g_renderer->SetDepthFunc(m_data->m_depth_func.GetValue());


if (m_data->m_depth_mask.HasChanged())
g_renderer->SetDepthMask(m_data->m_depth_mask.GetValue());

if (m_data->m_cull_mode.HasChanged()) if (m_data->m_cull_mode.HasChanged())
g_renderer->SetCullMode(m_data->m_cull_mode.GetValue()); g_renderer->SetCullMode(m_data->m_cull_mode.GetValue());


@@ -110,6 +114,7 @@ void RenderContext::SetViewport(ibox2 viewport)


g_renderer->SetViewport(viewport); g_renderer->SetViewport(viewport);
} }

ibox2 RenderContext::GetViewport() ibox2 RenderContext::GetViewport()
{ {
return g_renderer->GetViewport(); return g_renderer->GetViewport();
@@ -194,6 +199,19 @@ DepthFunc RenderContext::GetDepthFunc()
return g_renderer->GetDepthFunc(); return g_renderer->GetDepthFunc();
} }


void RenderContext::SetDepthMask(DepthMask mask)
{
if (!m_data->m_depth_mask.HasChanged())
m_data->m_depth_mask.TrackValue(g_renderer->GetDepthMask());

g_renderer->SetDepthMask(mask);
}

DepthMask RenderContext::GetDepthMask()
{
return g_renderer->GetDepthMask();
}

void RenderContext::SetCullMode(CullMode mode) void RenderContext::SetCullMode(CullMode mode)
{ {
if (!m_data->m_cull_mode.HasChanged()) if (!m_data->m_cull_mode.HasChanged())


+ 33
- 0
src/gpu/renderer.cpp View File

@@ -63,6 +63,7 @@ private:
float m_alpha_value; float m_alpha_value;
BlendFunc m_blend_src, m_blend_dst; BlendFunc m_blend_src, m_blend_dst;
DepthFunc m_depth_func; DepthFunc m_depth_func;
DepthMask m_depth_mask;
CullMode m_cull_mode; CullMode m_cull_mode;
PolygonMode m_polygon_mode; PolygonMode m_polygon_mode;


@@ -156,6 +157,9 @@ Renderer::Renderer(ivec2 size)
m_data->m_depth_func = DepthFunc::Disabled; m_data->m_depth_func = DepthFunc::Disabled;
SetDepthFunc(DepthFunc::LessOrEqual); SetDepthFunc(DepthFunc::LessOrEqual);


m_data->m_depth_mask = DepthMask::Disabled;
SetDepthMask(DepthMask::Enabled);

m_data->m_cull_mode = CullMode::Disabled; m_data->m_cull_mode = CullMode::Disabled;
SetCullMode(CullMode::Clockwise); SetCullMode(CullMode::Clockwise);


@@ -600,6 +604,35 @@ DepthFunc Renderer::GetDepthFunc() const
return m_data->m_depth_func; return m_data->m_depth_func;
} }


/*
* Depth mask
*/

void Renderer::SetDepthMask(DepthMask mask)
{
if (m_data->m_depth_mask == mask)
return;

#if defined USE_D3D9 || defined _XBOX
if (mask == DepthMask::Disabled)
m_data->m_d3d_dev->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_FALSE);
else
m_data->m_d3d_dev->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE);
#else
if (mask == DepthMask::Disabled)
glDepthMask(GL_FALSE);
else
glDepthMask(GL_TRUE);
#endif

m_data->m_depth_mask = mask;
}

DepthMask Renderer::GetDepthMask() const
{
return m_data->m_depth_mask;
}

/* /*
* Face culling * Face culling
*/ */


+ 2
- 0
src/lol/gpu/rendercontext.h View File

@@ -33,6 +33,7 @@ public:
void SetAlphaFunc(AlphaFunc func, float alpha); void SetAlphaFunc(AlphaFunc func, float alpha);
void SetBlendFunc(BlendFunc src, BlendFunc dst); void SetBlendFunc(BlendFunc src, BlendFunc dst);
void SetDepthFunc(DepthFunc func); void SetDepthFunc(DepthFunc func);
void SetDepthMask(DepthMask mask);
void SetCullMode(CullMode mode); void SetCullMode(CullMode mode);
void SetPolygonMode(PolygonMode mode); void SetPolygonMode(PolygonMode mode);


@@ -44,6 +45,7 @@ public:
BlendFunc GetBlendFuncSrc(); BlendFunc GetBlendFuncSrc();
BlendFunc GetBlendFuncDst(); BlendFunc GetBlendFuncDst();
DepthFunc GetDepthFunc(); DepthFunc GetDepthFunc();
DepthMask GetDepthMask();
CullMode GetCullMode(); CullMode GetCullMode();
PolygonMode GetPolygonMode(); PolygonMode GetPolygonMode();




+ 18
- 0
src/lol/gpu/renderer.h View File

@@ -123,6 +123,21 @@ struct DepthFunc
inline operator Value() { return m_value; } inline operator Value() { return m_value; }
}; };


/* A safe enum to indicate the depth mask. */
struct DepthMask
{
enum Value
{
Disabled,
Enabled,
}
m_value;

inline DepthMask() : m_value(Disabled) {}
inline DepthMask(Value v) : m_value(v) {}
inline operator Value() { return m_value; }
};

/* A safe enum to indicate the alpha test mode. */ /* A safe enum to indicate the alpha test mode. */
struct AlphaFunc struct AlphaFunc
{ {
@@ -180,6 +195,9 @@ public:
void SetDepthFunc(DepthFunc func); void SetDepthFunc(DepthFunc func);
DepthFunc GetDepthFunc() const; DepthFunc GetDepthFunc() const;


void SetDepthMask(DepthMask mask);
DepthMask GetDepthMask() const;

void SetCullMode(CullMode mode); void SetCullMode(CullMode mode);
CullMode GetCullMode() const; CullMode GetCullMode() const;




Loading…
Cancel
Save