PeriDyno 1.0.0
Loading...
Searching...
No Matches
GLInstanceVisualModule.cpp
Go to the documentation of this file.
2
3#include <glad/glad.h>
4
5namespace dyno {
6
8
10 {
11 this->setName("instance_renderer");
12 this->inInstanceColor()->tagOptional(true);
13 this->inInstanceTransform()->tagOptional(false);
14 }
15
19
21 {
22 return "Instance Visual Module";
23 }
24
26 {
28
29 // update instance data
30 mInstanceTransforms.load(this->inInstanceTransform()->getData());
31
32 // instance colors if available
33 if (this->inInstanceColor()->getDataPtr())
34 mInstanceColors.load(this->inInstanceColor()->getData());
35 }
36
38 {
40 {
41 // create buffer for instances, we should bind it to VAO later if necessary
42 mInstanceTransforms.create(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW);
43 mInstanceColors.create(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW);
44 return true;
45 }
46
47 return false;
48 }
49
51 {
53 // instance data
54 mInstanceTransforms.release();
55 mInstanceColors.release();
56 }
57
59 {
61
62 if (mInstanceCount < 1) return;
63
65
66 mInstanceTransforms.updateGL();
67
68 // bind the translation vector
69 mVAO.bindVertexBuffer(&mInstanceTransforms, 3, 3, GL_FLOAT, sizeof(Transform3f), 0, 1);
70 // bind the scale vector
71 mVAO.bindVertexBuffer(&mInstanceTransforms, 4, 3, GL_FLOAT, sizeof(Transform3f), sizeof(Vec3f), 1);
72 // bind the rotation matrix
73 mVAO.bindVertexBuffer(&mInstanceTransforms, 5, 3, GL_FLOAT, sizeof(Transform3f), 2 * sizeof(Vec3f), 1);
74 mVAO.bindVertexBuffer(&mInstanceTransforms, 6, 3, GL_FLOAT, sizeof(Transform3f), 3 * sizeof(Vec3f), 1);
75 mVAO.bindVertexBuffer(&mInstanceTransforms, 7, 3, GL_FLOAT, sizeof(Transform3f), 4 * sizeof(Vec3f), 1);
76
77 // bind instance colors
78 if (mInstanceColors.count() >= mInstanceCount) {
79 mInstanceColors.updateGL();
80 mVAO.bindVertexBuffer(&mInstanceColors, 8, 3, GL_FLOAT, sizeof(Vec3f), 0, 1);
81 }
82 else
83 {
84 mVAO.bind();
85 glDisableVertexAttribArray(8);
86 auto color = this->varBaseColor()->getData();
87 glVertexAttrib3f(8, color.r, color.g, color.b);
88 mVAO.unbind();
89 }
90
91 }
92}
#define IMPLEMENT_CLASS(name)
Definition Object.h:79
XBuffer< Transform3f > mInstanceTransforms
virtual std::string caption() override
Return the caption.
virtual void releaseGL() override
virtual bool initializeGL() override
void setName(std::string name)
Definition Module.cpp:187
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Transform< float, 3 > Transform3f
Vector< float, 3 > Vec3f
Definition Vector3D.h:93