Changeset 2769


Ignore:
Timestamp:
Jun 22, 2013, 11:23:59 PM (8 years ago)
Author:
sam
Message:

gpu: move Video::Clear to Renderer::Clear.

Location:
trunk
Files:
9 edited

Legend:

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

    r2768 r2769  
    129129{
    130130    delete m_data;
     131}
     132
     133/*
     134 * Buffer clearing
     135 */
     136
     137void Renderer::Clear(ClearMask mask)
     138{
     139#if defined USE_D3D9 || defined _XBOX
     140    int m = 0;
     141    if (mask & ClearMask::Color)
     142        m |= D3DCLEAR_TARGET;
     143    if (mask & ClearMask::Depth)
     144        m |= D3DCLEAR_ZBUFFER;
     145    if (mask & ClearMask::Stencil)
     146        m |= D3DCLEAR_STENCIL;
     147
     148    vec3 tmp = 255.999f * GetClearColor().rgb;
     149    D3DCOLOR clear_color = D3DCOLOR_XRGB((int)tmp.r, (int)tmp.g, (int)tmp.b);
     150
     151    if (FAILED(VideoData::d3d_dev->Clear(0, nullptr, m, clear_color,
     152                                         g_renderer->GetClearDepth(), 0)))
     153        Abort();
     154#else
     155    GLbitfield m = 0;
     156    if (mask & ClearMask::Color)
     157        m |= GL_COLOR_BUFFER_BIT;
     158    if (mask & ClearMask::Depth)
     159        m |= GL_DEPTH_BUFFER_BIT;
     160    if (mask & ClearMask::Stencil)
     161        m |= GL_STENCIL_BUFFER_BIT;
     162    glClear(m);
     163#endif
    131164}
    132165
  • trunk/src/lol/gpu/renderer.h

    r2768 r2769  
    2121
    2222class RendererData;
     23
     24/* A list of bitmasks to clear a render buffer. */
     25struct ClearMask
     26{
     27    enum Value
     28    {
     29        /* Note: D3D9 doesn't appear to support the accumulation buffer,
     30         * and it is a deprecated OpenGL feature. No reason to support it. */
     31        Color   = 1 << 0,
     32        Depth   = 1 << 1,
     33        Stencil = 1 << 2,
     34
     35        All     = 0xffffffff
     36    }
     37    m_value;
     38
     39    inline ClearMask(Value v) : m_value(v) {}
     40    inline ClearMask(uint64_t i) : m_value((Value)i) {}
     41    inline operator Value() { return m_value; }
     42};
    2343
    2444/* A safe enum to indicate the blending factors. */
     
    120140
    121141public:
     142    void Clear(ClearMask mask);
     143
     144public:
    122145    void SetViewport(ibox2 viewport);
    123146    ibox2 GetViewport() const;
  • trunk/src/ticker.cpp

    r2751 r2769  
    388388        case Entity::DRAWGROUP_BEGIN:
    389389            Scene::GetDefault()->Reset();
    390             Video::Clear(ClearMask::All);
     390            g_renderer->Clear(ClearMask::All);
    391391            break;
    392392        default:
  • trunk/src/video.cpp

    r2768 r2769  
    186186}
    187187
    188 void Video::Clear(ClearMask m)
    189 {
    190 #if defined USE_D3D9 || defined _XBOX
    191     int mask = 0;
    192     if (m & ClearMask::Color)
    193         mask |= D3DCLEAR_TARGET;
    194     if (m & ClearMask::Depth)
    195         mask |= D3DCLEAR_ZBUFFER;
    196     if (m & ClearMask::Stencil)
    197         mask |= D3DCLEAR_STENCIL;
    198 
    199     vec4 tmp = 255.999f * g_renderer->GetClearColor();
    200     D3DCOLOR clear_color = D3DCOLOR_XRGB((int)tmp.r, (int)tmp.g, (int)tmp.b);
    201 
    202     if (FAILED(VideoData::d3d_dev->Clear(0, nullptr, mask,
    203                                          clear_color,
    204                                          g_renderer->GetClearDepth(), 0)))
    205         Abort();
    206 #else
    207     GLbitfield mask = 0;
    208     if (m & ClearMask::Color)
    209         mask |= GL_COLOR_BUFFER_BIT;
    210     if (m & ClearMask::Depth)
    211         mask |= GL_DEPTH_BUFFER_BIT;
    212     if (m & ClearMask::Stencil)
    213         mask |= GL_STENCIL_BUFFER_BIT;
    214     glClear(mask);
    215 #endif
    216 }
    217 
    218188void Video::Destroy()
    219189{
  • trunk/src/video.h

    r2768 r2769  
    2222namespace lol
    2323{
    24 
    25 struct ClearMask
    26 {
    27     enum Value
    28     {
    29         /* Note: D3D9 doesn't appear to support the accumulation buffer,
    30          * and it is a deprecated OpenGL feature. No reason to support it. */
    31         Color   = 1 << 0,
    32         Depth   = 1 << 1,
    33         Stencil = 1 << 2,
    34 
    35         All     = 0xffffffff
    36     }
    37     m_value;
    38 
    39     inline ClearMask(Value v) : m_value(v) {}
    40     inline ClearMask(uint64_t i) : m_value((Value)i) {}
    41     inline operator Value() { return m_value; }
    42 };
    4324
    4425struct DebugRenderMode
     
    6950    static void Destroy();
    7051
     52    static ivec2 GetSize();
     53
    7154    static void SetDebugRenderMode(DebugRenderMode d);
    7255    static DebugRenderMode GetDebugRenderMode();
    73     static void Clear(ClearMask m);
    7456    static void Capture(uint32_t *buffer);
    75     static ivec2 GetSize();
    7657};
    7758
  • trunk/test/meshviewer.cpp

    r2753 r2769  
    473473                m_meshes[i].m1.Render(m_mat);
    474474#endif
    475                 Video::Clear(ClearMask::Depth);
     475                g_renderer->Clear(ClearMask::Depth);
    476476            }
    477477        }
  • trunk/tools/neercs/video/render.cpp

    r2764 r2769  
    14531453    RenderContext rc;
    14541454    rc.SetBlendFunc(BlendFunc::SrcColor, BlendFunc::DstAlpha);
    1455 
    1456     glEnable(GL_TEXTURE_2D);
    1457 
    14581455    rc.SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
    14591456    rc.SetClearDepth(1.0f); // set depth buffer
    1460     Video::Clear(ClearMask::Color | ClearMask::Depth);
     1457
     1458    glEnable(GL_TEXTURE_2D);
     1459
     1460    g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    14611461
    14621462    m_txt_screen->Blit(border, canvas_size);
  • trunk/tutorial/08_fbo.cpp

    r2762 r2769  
    7979                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    8080                rc.SetClearDepth(1.f);
    81                 Video::Clear(ClearMask::Color | ClearMask::Depth);
     81                g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    8282            }
    8383
  • trunk/tutorial/12_voronoi.cpp

    r2753 r2769  
    127127                    rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    128128                    rc.SetClearDepth(1.f);
    129                     Video::Clear(ClearMask::Color | ClearMask::Depth);
     129                    g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    130130                }
    131131                m_fbos.Last().m1->Unbind();
     
    138138                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    139139                rc.SetClearDepth(1.f);
    140                 Video::Clear(ClearMask::Color | ClearMask::Depth);
     140                g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    141141            }
    142142            temp_buffer->Unbind();
     
    199199            rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    200200            rc.SetClearDepth(1.f);
    201             Video::Clear(ClearMask::Color | ClearMask::Depth);
     201            g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    202202        }
    203203        temp_buffer->Unbind();
     
    229229                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    230230                rc.SetClearDepth(1.f);
    231                 Video::Clear(ClearMask::Color | ClearMask::Depth);
     231                g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    232232            }
    233233            m_fbos[f].m1->Unbind();
     
    252252                dst_buf->Bind();
    253253                /* FIXME: we should just disable depth test in the shader */
    254                 Video::Clear(ClearMask::Depth);
     254                g_renderer->Clear(ClearMask::Depth);
    255255                m_fbos[f].m2->Bind();
    256256
     
    271271        }
    272272
    273         Video::Clear(ClearMask::Color | ClearMask::Depth);
     273        g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    274274
    275275        //FRAME BUFFER DRAW
     
    283283                rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f));
    284284                rc.SetClearDepth(1.f);
    285                 Video::Clear(ClearMask::Color | ClearMask::Depth);
     285                g_renderer->Clear(ClearMask::Color | ClearMask::Depth);
    286286            }
    287287            m_fbos[m_cur_fbo].m1->Unbind();
     
    314314                dst_buf->Bind();
    315315                /* FIXME: we should just disable depth test in the shader */
    316                 Video::Clear(ClearMask::Depth);
     316                g_renderer->Clear(ClearMask::Depth);
    317317                shader->Bind();
    318318
Note: See TracChangeset for help on using the changeset viewer.