Timestamp:
Apr 15, 2021, 8:07:01 PM (3 years ago)
Author:
Vladislav Belov
Message:

Removes low-level GL calls from graphics and geometrics primitives and adds DebugRenderer.

Tested By: Freagarach

Differential Revision: https://code.wildfiregames.com/D3857

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ps/trunk/source/maths/Brush.cpp

    r25159 r25269  
    1616 */
    1717
    18 /*
    19  * Implementation of CBrush, a class representing a convex object
    20  */
    21 
    2218#include "precompiled.h"
    2319
    2420#include "Brush.h"
    2521
    26 #include "graphics/ShaderProgram.h"
    2722#include "maths/BoundingBoxAligned.h"
    2823#include "maths/Frustum.h"
    29 #include "lib/ogl.h"
    30 
    31 #include <float.h>
    32 
     24
     25CBrush::CBrush() = default;
    3326
    3427///////////////////////////////////////////////////////////////////////////////
     
    381374    ENSURE(prev == &result);
    382375}
    383 std::vector<CVector3D> CBrush::GetVertices() const
     376
     377const std::vector<CVector3D>& CBrush::GetVertices() const
    384378{
    385379    return m_Vertices;
    386380}
    387381
    388 void CBrush::GetFaces(std::vector<std::vector<size_t> >& out) const
     382void CBrush::GetFaces(std::vector<std::vector<size_t>>& out) const
    389383{
    390384    // split the back-to-back faces into separate face vectors, so that they're in a
     
    416410    }
    417411}
    418 
    419 void CBrush::Render(CShaderProgramPtr& shader) const
    420 {
    421     std::vector<float> data;
    422 
    423     std::vector<std::vector<size_t> > faces;
    424     GetFaces(faces);
    425 
    426 #define ADD_VERT(a) \
    427     STMT( \
    428         data.push_back(u); \
    429         data.push_back(v); \
    430         data.push_back(m_Vertices[faces[i][a]].X); \
    431         data.push_back(m_Vertices[faces[i][a]].Y); \
    432         data.push_back(m_Vertices[faces[i][a]].Z); \
    433     )
    434 
    435     for (size_t i = 0; i < faces.size(); ++i)
    436     {
    437         // Triangulate into (0,1,2), (0,2,3), ...
    438         for (size_t j = 1; j < faces[i].size() - 2; ++j)
    439         {
    440             float u = 0;
    441             float v = 0;
    442             ADD_VERT(0);
    443             ADD_VERT(j);
    444             ADD_VERT(j+1);
    445         }
    446     }
    447 
    448 #undef ADD_VERT
    449 
    450     shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, 5*sizeof(float), &data[0]);
    451     shader->VertexPointer(3, GL_FLOAT, 5*sizeof(float), &data[2]);
    452 
    453     shader->AssertPointersBound();
    454     glDrawArrays(GL_TRIANGLES, 0, data.size() / 5);
    455 }
    456 
    457 void CBrush::RenderOutline(CShaderProgramPtr& shader) const
    458 {
    459     std::vector<float> data;
    460 
    461     std::vector<std::vector<size_t> > faces;
    462     GetFaces(faces);
    463 
    464 #define ADD_VERT(a) \
    465     STMT( \
    466         data.push_back(u); \
    467         data.push_back(v); \
    468         data.push_back(m_Vertices[faces[i][a]].X); \
    469         data.push_back(m_Vertices[faces[i][a]].Y); \
    470         data.push_back(m_Vertices[faces[i][a]].Z); \
    471     )
    472 
    473     for (size_t i = 0; i < faces.size(); ++i)
    474     {
    475         for (size_t j = 0; j < faces[i].size() - 1; ++j)
    476         {
    477             float u = 0;
    478             float v = 0;
    479             ADD_VERT(j);
    480             ADD_VERT(j+1);
    481         }
    482     }
    483 
    484 #undef ADD_VERT
    485 
    486     shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, 5*sizeof(float), &data[0]);
    487     shader->VertexPointer(3, GL_FLOAT, 5*sizeof(float), &data[2]);
    488 
    489     shader->AssertPointersBound();
    490     glDrawArrays(GL_LINES, 0, data.size() / 5);
    491 }
Note: See TracChangeset for help on using the changeset viewer.