qtk/src/meshrenderer.h

78 lines
2.7 KiB
C
Raw Normal View History

2021-09-03 12:56:57 -04:00
/*##############################################################################
## Author: Shaun Reed ##
2022-03-06 11:54:05 -05:00
## Legal: All Content (c) 2022 Shaun Reed, all rights reserved ##
2021-09-03 12:56:57 -04:00
## About: MeshRenderer class for quick object creation and drawing ##
## ##
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
##############################################################################*/
#ifndef QTK_MESHRENDERER_H
#define QTK_MESHRENDERER_H
#include <mesh.h>
#include <object.h>
#include <qtkapi.h>
2021-09-03 12:56:57 -04:00
2022-07-17 12:53:45 -04:00
#include <utility>
2021-09-03 12:56:57 -04:00
namespace Qtk {
class QTKAPI MeshRenderer : public Object {
public:
// Delegate constructors
MeshRenderer(const char * name, Vertices vertices, Indices indices,
DrawMode mode=QTK_DRAW_ARRAYS)
2022-07-17 12:53:45 -04:00
: MeshRenderer(name, ShapeBase(mode, std::move(vertices), std::move(indices)))
{}
2022-07-17 12:53:45 -04:00
explicit MeshRenderer(const char * name)
: MeshRenderer(name, Cube(QTK_DRAW_ELEMENTS))
{}
// Constructor
MeshRenderer(const char * name, const ShapeBase &shape);
~MeshRenderer();
2021-09-03 12:56:57 -04:00
// Retrieve a mesh by name stored within a static QHash
static MeshRenderer * getInstance(const QString & name);
2021-09-03 12:56:57 -04:00
void init();
void draw();
2021-09-03 12:56:57 -04:00
// Draw types like GL_TRIANGLES, GL_POINTS, GL_LINES, etc
void setDrawType(int drawType) { mDrawType = drawType;}
2021-09-03 12:56:57 -04:00
// Shader settings
inline void setShaderVertex(const std::string & vert) { mVertexShader = vert;}
inline void setShaderFragment(const std::string & frag)
{ mFragmentShader = frag;}
void setShaders(const std::string & vert, const std::string & frag);
2021-09-03 12:56:57 -04:00
template <typename T>
inline void setUniform(int location, T value)
{ mProgram.setUniformValue(location, value);}
2021-09-03 12:56:57 -04:00
template <typename T>
inline void setUniform(const char * location, T value)
{ mProgram.setUniformValue(location, value);}
2021-09-03 12:56:57 -04:00
// Set MVP matrix using this Object's transform
// + View and projection provided by MainWidget static members
void setUniformMVP(const char * model="uModel", const char * view="uView",
const char * projection="uProjection");
2021-09-03 12:56:57 -04:00
// These functions modify data stored in a VBO
2022-07-17 17:20:39 -04:00
// + After calling them, the VBO will need to be reallocated
void setShape(const Shape & value) override;
void setColor(const QVector3D & color);
2021-09-03 12:56:57 -04:00
// Static QHash of all mesh objects within the scene
typedef QHash<QString, MeshRenderer *> MeshManager;
private:
static MeshManager sInstances;
2021-09-03 12:56:57 -04:00
int mDrawType;
bool mHasTexture;
std::string mVertexShader, mFragmentShader;
};
}
2021-09-03 12:56:57 -04:00
#endif // QTK_MESHRENDERER_H