24 const QString& vertexShaderFileName,
const QString& fragShaderFileName) {
25 std::shared_ptr<QOpenGLShaderProgram> shaderProg(
new QOpenGLShaderProgram());
26 if (shaderProg !=
nullptr) {
27 shaderProg->addShaderFromSourceFile(QOpenGLShader::Vertex,
28 vertexShaderFileName);
29 shaderProg->addShaderFromSourceFile(QOpenGLShader::Fragment,
31 if (!shaderProg->link()) {
32 std::cerr <<
"----cannot link shader programm, log:("
33 << shaderProg->log().toStdString() <<
")\n";
42 int vertexCount,
int vertexElementCount,
43 const std::shared_ptr<QOpenGLShaderProgram>& shaderProgram)
47 vertex_count_(vertexCount),
48 vertex_element_count_(vertexElementCount),
49 shader_program_(shaderProgram),
51 vbo_(QOpenGLBuffer::VertexBuffer) {}
66 std::shared_ptr<QOpenGLShaderProgram>& shaderProgram) {
78 if (shaderProgram !=
nullptr) {
86 initializeOpenGLFunctions();
97 vbo_.setUsagePattern(QOpenGLBuffer::StaticDraw);
101 GLfloat* pBuffer =
static_cast<GLfloat*
>(
vbo_.map(QOpenGLBuffer::WriteOnly));
132 std::cerr <<
"Please initialize the object" << std::endl;
RenderableObject(int vertex_count=1, int vertex_element_count=3, const std::shared_ptr< QOpenGLShaderProgram > &shaderProgram=NullRenderableObj)
virtual void SetupAllAttrPointer(void)
int vertex_element_count(void) const
bool Init(std::shared_ptr< QOpenGLShaderProgram > &shaderProgram=NullRenderableObj)
virtual void SetupExtraUniforms(void)
int vertex_count(void) const
int VertexBufferSize(void) const
std::shared_ptr< QOpenGLShaderProgram > shader_program_
virtual ~RenderableObject(void)
void Render(const QMatrix4x4 *mvp=nullptr)
QOpenGLVertexArrayObject vao_
static std::shared_ptr< QOpenGLShaderProgram > NullRenderableObj
virtual bool FillVertexBuffer(GLfloat *pBuffer)=0
static std::shared_ptr< QOpenGLShaderProgram > CreateShaderProgram(const QString &vertexShaderFileName, const QString &fragShaderFileName)
bool is_renderable(void) const