Apollo 11.0
自动驾驶开放平台
RenderableObject类 参考abstract

#include <renderable_object.h>

类 RenderableObject 继承关系图:
RenderableObject 的协作图:

Public 成员函数

 RenderableObject (int vertex_count=1, int vertex_element_count=3, const std::shared_ptr< QOpenGLShaderProgram > &shaderProgram=NullRenderableObj)
 
virtual ~RenderableObject (void)
 
virtual GLenum GetPrimitiveType (void) const =0
 
virtual void SetupExtraUniforms (void)
 
bool is_renderable (void) const
 
void set_is_renderable (bool b)
 
int vertex_count (void) const
 
void set_vertex_count (int vertexCount)
 
int vertex_element_count (void) const
 
void set_vertex_element_count (int vertexElementCount)
 
int VertexBufferSize (void) const
 
void set_shader_program (const std::shared_ptr< QOpenGLShaderProgram > &shaderProgram)
 
bool haveShaderProgram (void)
 
bool Init (std::shared_ptr< QOpenGLShaderProgram > &shaderProgram=NullRenderableObj)
 
void Destroy (void)
 
void Render (const QMatrix4x4 *mvp=nullptr)
 

静态 Public 成员函数

static std::shared_ptr< QOpenGLShaderProgram > CreateShaderProgram (const QString &vertexShaderFileName, const QString &fragShaderFileName)
 

静态 Public 属性

static std::shared_ptr< QOpenGLShaderProgram > NullRenderableObj
 

Protected 成员函数

virtual bool FillVertexBuffer (GLfloat *pBuffer)=0
 
virtual void Draw (void)
 
virtual void SetupAllAttrPointer (void)
 

Protected 属性

bool is_init_
 
bool is_renderable_
 
int vertex_count_
 
int vertex_element_count_
 
std::shared_ptr< QOpenGLShaderProgram > shader_program_
 
QOpenGLVertexArrayObject vao_
 
QOpenGLBuffer vbo_
 

详细描述

在文件 renderable_object.h 第 25 行定义.

构造及析构函数说明

◆ RenderableObject()

RenderableObject::RenderableObject ( int  vertex_count = 1,
int  vertex_element_count = 3,
const std::shared_ptr< QOpenGLShaderProgram > &  shaderProgram = NullRenderableObj 
)
explicit

在文件 renderable_object.cc 第 41 行定义.

44 : QOpenGLFunctions(),
45 is_init_(false),
46 is_renderable_(true),
47 vertex_count_(vertexCount),
48 vertex_element_count_(vertexElementCount),
49 shader_program_(shaderProgram),
50 vao_(),
51 vbo_(QOpenGLBuffer::VertexBuffer) {}
std::shared_ptr< QOpenGLShaderProgram > shader_program_
QOpenGLVertexArrayObject vao_

◆ ~RenderableObject()

RenderableObject::~RenderableObject ( void  )
virtual

在文件 renderable_object.cc 第 53 行定义.

53{ Destroy(); }

成员函数说明

◆ CreateShaderProgram()

std::shared_ptr< QOpenGLShaderProgram > RenderableObject::CreateShaderProgram ( const QString &  vertexShaderFileName,
const QString &  fragShaderFileName 
)
static

在文件 renderable_object.cc 第 23 行定义.

24 {
25 std::shared_ptr<QOpenGLShaderProgram> shaderProg(new QOpenGLShaderProgram());
26 if (shaderProg != nullptr) {
27 shaderProg->addShaderFromSourceFile(QOpenGLShader::Vertex,
28 vertexShaderFileName);
29 shaderProg->addShaderFromSourceFile(QOpenGLShader::Fragment,
30 fragShaderFileName);
31 if (!shaderProg->link()) {
32 std::cerr << "----cannot link shader programm, log:("
33 << shaderProg->log().toStdString() << ")\n";
34
35 shaderProg.reset();
36 }
37 }
38 return shaderProg;
39}

◆ Destroy()

void RenderableObject::Destroy ( void  )

在文件 renderable_object.cc 第 55 行定义.

55 {
56 if (is_init_) {
57 is_renderable_ = false;
58 is_init_ = false;
59 shader_program_.reset();
60 vbo_.destroy();
61 vao_.destroy();
62 }
63}

◆ Draw()

virtual void RenderableObject::Draw ( void  )
inlineprotectedvirtual

被 Plane 重载.

在文件 renderable_object.h 第 71 行定义.

71 {
72 glDrawArrays(GetPrimitiveType(), 0, vertex_count());
73 }
int vertex_count(void) const
virtual GLenum GetPrimitiveType(void) const =0

◆ FillVertexBuffer()

virtual bool RenderableObject::FillVertexBuffer ( GLfloat *  pBuffer)
protectedpure virtual

在 Grid, Plane , 以及 RadarPoints 内被实现.

◆ GetPrimitiveType()

virtual GLenum RenderableObject::GetPrimitiveType ( void  ) const
pure virtual

在 Grid, PointCloud, RadarPoints , 以及 Plane 内被实现.

◆ haveShaderProgram()

bool RenderableObject::haveShaderProgram ( void  )
inline

在文件 renderable_object.h 第 60 行定义.

60{ return shader_program_ != nullptr; }

◆ Init()

bool RenderableObject::Init ( std::shared_ptr< QOpenGLShaderProgram > &  shaderProgram = NullRenderableObj)

在文件 renderable_object.cc 第 65 行定义.

66 {
67 if (is_init_) {
68 return true;
69 }
70
71 if (vertex_count() < 1) {
72 return false;
73 }
74 if (vertex_element_count() < 1) {
75 return false;
76 }
77
78 if (shaderProgram != nullptr) {
79 shader_program_ = shaderProgram;
80 }
81
82 if (shader_program_ == nullptr) {
83 return false;
84 }
85
86 initializeOpenGLFunctions();
87
88 if (!vao_.create()) {
89 return false;
90 }
91 vao_.bind();
92
93 if (!vbo_.create()) {
94 vao_.destroy();
95 return false;
96 }
97 vbo_.setUsagePattern(QOpenGLBuffer::StaticDraw);
98 vbo_.bind();
99
100 vbo_.allocate(VertexBufferSize());
101 GLfloat* pBuffer = static_cast<GLfloat*>(vbo_.map(QOpenGLBuffer::WriteOnly));
102 bool ret = FillVertexBuffer(pBuffer);
103 vbo_.unmap();
104
105 if (!ret) {
106 return ret;
107 }
108
110
111 vbo_.release();
112 vao_.release();
113 is_init_ = true;
114
115 return true;
116}
virtual void SetupAllAttrPointer(void)
int vertex_element_count(void) const
int VertexBufferSize(void) const
virtual bool FillVertexBuffer(GLfloat *pBuffer)=0

◆ is_renderable()

bool RenderableObject::is_renderable ( void  ) const
inline

在文件 renderable_object.h 第 39 行定义.

39{ return is_renderable_; }

◆ Render()

void RenderableObject::Render ( const QMatrix4x4 *  mvp = nullptr)

在文件 renderable_object.cc 第 118 行定义.

118 {
119 if (is_init_) {
120 if (is_renderable()) {
121 shader_program_->bind();
122 if (mvp) {
123 shader_program_->setUniformValue("mvp", *mvp);
124 }
126 vao_.bind();
127 Draw();
128 vao_.release();
129 shader_program_->release();
130 }
131 } else {
132 std::cerr << "Please initialize the object" << std::endl;
133 }
134}
virtual void SetupExtraUniforms(void)
virtual void Draw(void)
bool is_renderable(void) const

◆ set_is_renderable()

void RenderableObject::set_is_renderable ( bool  b)
inline

在文件 renderable_object.h 第 40 行定义.

40{ is_renderable_ = b; }

◆ set_shader_program()

void RenderableObject::set_shader_program ( const std::shared_ptr< QOpenGLShaderProgram > &  shaderProgram)
inline

在文件 renderable_object.h 第 55 行定义.

56 {
57 shader_program_ = shaderProgram;
58 }

◆ set_vertex_count()

void RenderableObject::set_vertex_count ( int  vertexCount)
inline

在文件 renderable_object.h 第 43 行定义.

43{ vertex_count_ = vertexCount; }

◆ set_vertex_element_count()

void RenderableObject::set_vertex_element_count ( int  vertexElementCount)
inline

在文件 renderable_object.h 第 46 行定义.

46 {
47 vertex_element_count_ = vertexElementCount;
48 }

◆ SetupAllAttrPointer()

virtual void RenderableObject::SetupAllAttrPointer ( void  )
inlineprotectedvirtual

被 Plane 重载.

在文件 renderable_object.h 第 75 行定义.

75 {
76 glEnableVertexAttribArray(0);
77 glVertexAttribPointer(
78 0, vertex_element_count(), GL_FLOAT, GL_FALSE,
79 static_cast<int>(sizeof(GLfloat)) * vertex_element_count(), 0);
80 }

◆ SetupExtraUniforms()

virtual void RenderableObject::SetupExtraUniforms ( void  )
inlinevirtual

被 Grid , 以及 RadarPoints 重载.

在文件 renderable_object.h 第 37 行定义.

37{}

◆ vertex_count()

int RenderableObject::vertex_count ( void  ) const
inline

在文件 renderable_object.h 第 42 行定义.

42{ return vertex_count_; }

◆ vertex_element_count()

int RenderableObject::vertex_element_count ( void  ) const
inline

在文件 renderable_object.h 第 45 行定义.

45{ return vertex_element_count_; }

◆ VertexBufferSize()

int RenderableObject::VertexBufferSize ( void  ) const
inline

在文件 renderable_object.h 第 50 行定义.

50 {
52 static_cast<int>(sizeof(GLfloat));
53 }

类成员变量说明

◆ is_init_

bool RenderableObject::is_init_
protected

在文件 renderable_object.h 第 82 行定义.

◆ is_renderable_

bool RenderableObject::is_renderable_
protected

在文件 renderable_object.h 第 83 行定义.

◆ NullRenderableObj

std::shared_ptr< QOpenGLShaderProgram > RenderableObject::NullRenderableObj
static

在文件 renderable_object.h 第 27 行定义.

◆ shader_program_

std::shared_ptr<QOpenGLShaderProgram> RenderableObject::shader_program_
protected

在文件 renderable_object.h 第 88 行定义.

◆ vao_

QOpenGLVertexArrayObject RenderableObject::vao_
protected

在文件 renderable_object.h 第 89 行定义.

◆ vbo_

QOpenGLBuffer RenderableObject::vbo_
protected

在文件 renderable_object.h 第 90 行定义.

◆ vertex_count_

int RenderableObject::vertex_count_
protected

在文件 renderable_object.h 第 85 行定义.

◆ vertex_element_count_

int RenderableObject::vertex_element_count_
protected

在文件 renderable_object.h 第 86 行定义.


该类的文档由以下文件生成: