Changeset 25269 for ps/trunk/source/maths/Brush.cpp
- Timestamp:
- Apr 15, 2021, 8:07:01 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ps/trunk/source/maths/Brush.cpp
r25159 r25269 16 16 */ 17 17 18 /*19 * Implementation of CBrush, a class representing a convex object20 */21 22 18 #include "precompiled.h" 23 19 24 20 #include "Brush.h" 25 21 26 #include "graphics/ShaderProgram.h"27 22 #include "maths/BoundingBoxAligned.h" 28 23 #include "maths/Frustum.h" 29 #include "lib/ogl.h" 30 31 #include <float.h> 32 24 25 CBrush::CBrush() = default; 33 26 34 27 /////////////////////////////////////////////////////////////////////////////// … … 381 374 ENSURE(prev == &result); 382 375 } 383 std::vector<CVector3D> CBrush::GetVertices() const 376 377 const std::vector<CVector3D>& CBrush::GetVertices() const 384 378 { 385 379 return m_Vertices; 386 380 } 387 381 388 void CBrush::GetFaces(std::vector<std::vector<size_t> 382 void CBrush::GetFaces(std::vector<std::vector<size_t>>& out) const 389 383 { 390 384 // split the back-to-back faces into separate face vectors, so that they're in a … … 416 410 } 417 411 } 418 419 void CBrush::Render(CShaderProgramPtr& shader) const420 {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_VERT449 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) const458 {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_VERT485 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.