Changeset 2753


Ignore:
Timestamp:
Jun 20, 2013, 6:55:23 PM (6 years ago)
Author:
sam
Message:

gpu: move SetClearColor and SetClearDepth to the Renderer and RenderContext
classes instead of Video.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gpu/rendercontext.cpp

    r2751 r2753  
    2020{
    2121
    22 class TrackedState
     22template<typename T> class TrackedState
    2323{
    2424public:
    2525    inline TrackedState()
    26       : m_state(Unchanged)
     26      : m_changed(false)
    2727    {}
    2828
    29     inline void TrackValue(bool set)
     29    inline void TrackValue(T const &value)
    3030    {
    31         m_state = set ? MustSet : MustUnset;
     31        m_value = value;
     32        m_changed = true;
    3233    }
    3334
    3435    inline bool HasChanged()
    3536    {
    36         return m_state != Unchanged;
     37        return m_changed;
    3738    }
    3839
    39     inline bool GetValue()
     40    inline T GetValue()
    4041    {
    41         return m_state == MustSet;
     42        return m_value;
    4243    }
    4344
    4445private:
    45     enum
    46     {
    47         Unchanged,
    48         MustSet,
    49         MustUnset,
    50     }
    51     m_state;
     46    T m_value;
     47    bool m_changed;
    5248};
    5349
     
    5955    Scene *m_scene;
    6056
    61     TrackedState m_alpha_blend, m_depth_test, m_face_culling;
     57    TrackedState<vec4> m_clear_color;
     58    TrackedState<float> m_clear_depth;
     59    TrackedState<bool> m_alpha_blend;
     60    TrackedState<bool> m_depth_test;
     61    TrackedState<bool> m_face_culling;
    6262};
    6363
     
    8484
    8585    delete m_data;
     86}
     87
     88void RenderContext::SetClearColor(vec4 color)
     89{
     90    if (!m_data->m_clear_color.HasChanged())
     91        m_data->m_clear_color.TrackValue(g_renderer->GetClearColor());
     92
     93    g_renderer->SetClearColor(color);
     94}
     95
     96void RenderContext::SetClearDepth(float depth)
     97{
     98    if (!m_data->m_clear_depth.HasChanged())
     99        m_data->m_clear_depth.TrackValue(g_renderer->GetClearDepth());
     100
     101    g_renderer->SetClearDepth(depth);
    86102}
    87103
  • trunk/src/gpu/renderer.cpp

    r2751 r2753  
    4848
    4949private:
     50    vec4 m_clear_color;
     51    float m_clear_depth;
    5052    bool m_blend, m_depth_test, m_face_culling;
    5153};
     
    5860  : m_data(new RendererData())
    5961{
     62    m_data->m_clear_color = vec4(-1.f);
     63    SetClearColor(vec4(0.1f, 0.2f, 0.3f, 1.0f));
     64
     65    m_data->m_clear_depth = -1.f;
     66    SetClearDepth(1.f);
     67
    6068    m_data->m_blend = false;
    6169    SetAlphaBlend(true);
     
    7482
    7583/*
     84 * Clear color
     85 */
     86
     87void Renderer::SetClearColor(vec4 color)
     88{
     89#if defined USE_D3D9 || defined _XBOX
     90    /* Nothing to do */
     91#else
     92    glClearColor(color.r, color.g, color.b, color.a);
     93#endif
     94
     95    m_data->m_clear_color = color;
     96}
     97
     98vec4 Renderer::GetClearColor() const
     99{
     100    return m_data->m_clear_color;
     101}
     102
     103/*
     104 * Clear depth
     105 */
     106
     107void Renderer::SetClearDepth(float depth)
     108{
     109#if defined USE_D3D9 || defined _XBOX
     110    /* Nothing to do */
     111#elif defined HAVE_GLES_2X
     112    glClearDepthf(depth);
     113#else
     114    glClearDepth(depth);
     115#endif
     116
     117    m_data->m_clear_depth = depth;
     118}
     119
     120float Renderer::GetClearDepth() const
     121{
     122    return m_data->m_clear_depth;
     123}
     124
     125/*
    76126 * Alpha blending
    77127 */
     
    81131    if (m_data->m_blend == set)
    82132        return;
    83 
    84     m_data->m_blend = set;
    85133
    86134#if defined USE_D3D9 || defined _XBOX
     
    94142        glDisable(GL_BLEND);
    95143#endif
     144
     145    m_data->m_blend = set;
    96146}
    97147
     
    109159    if (m_data->m_depth_test == set)
    110160        return;
    111 
    112     m_data->m_depth_test = set;
    113161
    114162#if defined USE_D3D9 || defined _XBOX
     
    122170        glDisable(GL_DEPTH_TEST);
    123171#endif
     172
     173    m_data->m_depth_test = set;
    124174}
    125175
     
    137187    if (m_data->m_face_culling == set)
    138188        return;
    139 
    140     m_data->m_face_culling = set;
    141189
    142190#if defined USE_D3D9 || defined _XBOX
     
    150198        glDisable(GL_CULL_FACE);
    151199#endif
     200
     201    m_data->m_face_culling = set;
    152202}
    153203
  • trunk/src/lol/gpu/rendercontext.h

    r2751 r2753  
    2828    ~RenderContext();
    2929
     30    void SetClearColor(vec4 color);
     31    void SetClearDepth(float depth);
    3032    void SetAlphaBlend(bool set);
    3133    void SetDepthTest(bool set);
  • trunk/src/lol/gpu/renderer.h

    r2751 r2753  
    2828    ~Renderer();
    2929
     30    void SetClearColor(vec4 color);
     31    vec4 GetClearColor() const;
     32
     33    void SetClearDepth(float depth);
     34    float GetClearDepth() const;
     35
    3036    void SetAlphaBlend(bool set);
    3137    bool GetAlphaBlend() const;
  • trunk/src/video.cpp

    r2751 r2753  
    6161    static D3DDevice *d3d_dev;
    6262#   endif
    63     static D3DCOLOR clear_color;
    64     static float clear_depth;
    6563#endif
    6664};
     
    7876D3DDevice *VideoData::d3d_dev;
    7977#   endif
    80 D3DCOLOR VideoData::clear_color;
    81 float VideoData::clear_depth;
    8278#endif
    8379
     
    156152
    157153    /* Initialise reasonable scene default properties */
    158     SetClearColor(vec4(0.1f, 0.2f, 0.3f, 1.0f));
    159     SetClearDepth(1.f);
    160154    SetDebugRenderMode(DebugRenderMode::Default);
    161155}
     
    232226        VideoData::proj_matrix = proj * trans;
    233227    }
    234 }
    235 
    236 void Video::SetClearColor(vec4 color)
    237 {
    238 #if defined USE_D3D9 || defined _XBOX
    239     VideoData::clear_color = D3DCOLOR_XRGB((int)(color.r * 255.999f),
    240                                            (int)(color.g * 255.999f),
    241                                            (int)(color.b * 255.999f));
    242 #else
    243     glClearColor(color.r, color.g, color.b, color.a);
    244 #endif
    245 }
    246 
    247 void Video::SetClearDepth(float f)
    248 {
    249 #if defined USE_D3D9 || defined _XBOX
    250     VideoData::clear_depth = f;
    251 #elif defined HAVE_GLES_2X
    252     glClearDepthf(f);
    253 #else
    254     glClearDepth(f);
    255 #endif
    256228}
    257229
     
    322294    if (m & ClearMask::Stencil)
    323295        mask |= D3DCLEAR_STENCIL;
     296
     297    vec4 tmp = 255.999f * g_renderer->GetClearColor();
     298    D3DCOLOR clear_color = D3DCOLOR_XRGB((int)tmp.r, (int)tmp.g, (int)tmp.b);
     299
    324300    if (FAILED(VideoData::d3d_dev->Clear(0, nullptr, mask,
    325                                          VideoData::clear_color,
    326                                          VideoData::clear_depth, 0)))
     301                                         clear_color,
     302                                         g_renderer->GetClearDepth(), 0)))
    327303        Abort();
    328304#else
  • trunk/src/video.h

    r2751 r2753  
    7272    static void RestoreSize();
    7373    static void SetFov(float theta);
    74     static void SetClearColor(vec4 color);
    75     static void SetClearDepth(float f);
    7674    static void SetDebugRenderMode(DebugRenderMode d);
    7775    static DebugRenderMode GetDebugRenderMode();
  • trunk/test/meshviewer.cpp

    r2749 r2753  
    441441        }
    442442
    443         Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
     443        g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    444444
    445445        mat4 default_proj = Scene::GetDefault()->GetCamera()->GetProjection();
  • trunk/tools/neercs/video/render.cpp

    r2752 r2753  
    14581458    glBlendFunc(GL_SRC_COLOR, GL_DST_ALPHA);
    14591459
    1460     Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    1461     Video::SetClearDepth(1.0f); // set depth buffer
     1460    rc.SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
     1461    rc.SetClearDepth(1.0f); // set depth buffer
    14621462    Video::Clear(ClearMask::Color | ClearMask::Depth);
    14631463
  • trunk/tutorial/02_cube.cpp

    r2497 r2753  
    104104        }
    105105
    106         Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
     106        g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    107107
    108108        m_shader->Bind();
  • trunk/tutorial/05_easymesh.cpp

    r2476 r2753  
    112112        if (!m_ready)
    113113        {
     114            g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
     115
    114116            for (int i = 0; i < m_gears.Count(); i++)
    115117                m_gears[i].m1.MeshConvert();
    116118            m_ready = true;
    117119        }
    118 
    119         Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    120120
    121121        for (int i = 0; i < m_gears.Count(); i++)
  • trunk/tutorial/06_sprite.cpp

    r2660 r2753  
    7070        if (!m_ready)
    7171        {
    72             Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
     72            g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    7373            m_ready = true;
    7474        }
  • trunk/tutorial/08_fbo.cpp

    r2752 r2753  
    7474            m_fbo = new Framebuffer(Video::GetSize());
    7575            m_fbo->Bind();
    76             Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    77             Video::SetClearDepth(1.f);
    78             Video::Clear(ClearMask::Color | ClearMask::Depth);
     76
     77            {
     78                RenderContext rc;
     79                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     80                rc.SetClearDepth(1.f);
     81                Video::Clear(ClearMask::Color | ClearMask::Depth);
     82            }
     83
    7984            m_fbo->Unbind();
    8085
  • trunk/tutorial/12_voronoi.cpp

    r2601 r2753  
    123123
    124124                m_fbos.Last().m1->Bind();
    125                 Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    126                 Video::SetClearDepth(1.f);
    127                 Video::Clear(ClearMask::Color | ClearMask::Depth);
     125                {
     126                    RenderContext rc;
     127                    rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     128                    rc.SetClearDepth(1.f);
     129                    Video::Clear(ClearMask::Color | ClearMask::Depth);
     130                }
    128131                m_fbos.Last().m1->Unbind();
    129132            }
     
    131134            temp_buffer = new Framebuffer(Video::GetSize());
    132135            temp_buffer->Bind();
    133             Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    134             Video::SetClearDepth(1.f);
    135             Video::Clear(ClearMask::Color | ClearMask::Depth);
     136            {
     137                RenderContext rc;
     138                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     139                rc.SetClearDepth(1.f);
     140                Video::Clear(ClearMask::Color | ClearMask::Depth);
     141            }
    136142            temp_buffer->Unbind();
    137143
     
    189195
    190196        temp_buffer->Bind();
    191         Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    192         Video::SetClearDepth(1.f);
    193         Video::Clear(ClearMask::Color | ClearMask::Depth);
     197        {
     198            RenderContext rc;
     199            rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     200            rc.SetClearDepth(1.f);
     201            Video::Clear(ClearMask::Color | ClearMask::Depth);
     202        }
    194203        temp_buffer->Unbind();
    195204
     
    216225
    217226            m_fbos[f].m1->Bind();
    218             Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    219             Video::SetClearDepth(1.f);
    220             Video::Clear(ClearMask::Color | ClearMask::Depth);
     227            {
     228                RenderContext rc;
     229                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     230                rc.SetClearDepth(1.f);
     231                Video::Clear(ClearMask::Color | ClearMask::Depth);
     232            }
    221233            m_fbos[f].m1->Unbind();
    222234
     
    267279            //m_timer = 1.0f;
    268280            m_fbos[m_cur_fbo].m1->Bind();
    269             Video::SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    270             Video::SetClearDepth(1.f);
    271             Video::Clear(ClearMask::Color | ClearMask::Depth);
     281            {
     282                RenderContext rc;
     283                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
     284                rc.SetClearDepth(1.f);
     285                Video::Clear(ClearMask::Color | ClearMask::Depth);
     286            }
    272287            m_fbos[m_cur_fbo].m1->Unbind();
    273288
Note: See TracChangeset for help on using the changeset viewer.