PeriDyno 1.0.0
Loading...
Searching...
No Matches
GLPointVisualModule.cpp
Go to the documentation of this file.
2#include "GLRenderEngine.h"
3
4#include <Utility.h>
5
6// opengl
7#include <glad/glad.h>
8
9#include "point.vert.h"
10#include "point.frag.h"
11
12#ifdef CUDA_BACKEND
13// cuda
14#include <cuda_gl_interop.h>
15#endif
16
17#ifdef VK_BACKEND
18
19#endif // VK_BACKEND
20
21
22namespace dyno
23{
25
27 {
28 mNumPoints = 0;
29 this->setName("point_renderer");
30 this->inColor()->tagOptional(true);
31 this->varPointSize()->setRange(0.001f, 1.0f);
32 this->varBaseColor()->setValue(Color::Grey81());
33 this->varForceUpdate()->setValue(true);
34 }
35
37 {
38// points.clear();
39// colors.clear();
40//
41// mPosition.release();
42// mColor.release();
43 }
44
46 {
47 this->varColorMode()->setCurrentKey(mode);
48 }
49
51 {
52 mPosition.create(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW);
53 mColor.create(GL_ARRAY_BUFFER, GL_DYNAMIC_DRAW);
54
55 mVertexArray.create();
56 mVertexArray.bindVertexBuffer(&mPosition, 0, 3, GL_FLOAT, 0, 0, 0);
57 mVertexArray.bindVertexBuffer(&mColor, 1, 3, GL_FLOAT, 0, 0, 0);
58
60 POINT_VERT, sizeof(POINT_VERT),
61 POINT_FRAG, sizeof(POINT_FRAG));
62
63 // create shader uniform buffer
64 mUniformBlock.create(GL_UNIFORM_BUFFER, GL_DYNAMIC_DRAW);
65
67
68 return true;
69 }
70
72 {
73 mShaderProgram->release();
74 delete mShaderProgram;
75
76 mPosition.release();
77 mColor.release();
78 mVertexArray.release();
79
80 mUniformBlock.release();
81 }
82
84 {
85 mNumPoints = mPosition.count();
86 if (mNumPoints == 0) return;
87
88 mPosition.updateGL();
89 mVertexArray.bindVertexBuffer(&mPosition, 0, 3, GL_FLOAT, 0, 0, 0);
90
91 if (this->varColorMode()->currentKey() == ColorMapMode::PER_VERTEX_SHADER
92 && !this->inColor()->isEmpty())
93 {
94 mColor.updateGL();
95 mVertexArray.bindVertexBuffer(&mColor, 1, 3, GL_FLOAT, 0, 0, 0);
96 }
97 else
98 {
99 mVertexArray.bind();
100 glDisableVertexAttribArray(1);
101 mVertexArray.unbind();
102 }
103 }
104
106 {
107 // update data
108 auto pPointSet = this->inPointSet()->getDataPtr();
109 auto points = pPointSet->getPoints();
110
111 mPosition.load(points);
112
113 if (this->varColorMode()->currentKey() == ColorMapMode::PER_VERTEX_SHADER
114 && !this->inColor()->isEmpty())
115 {
116 auto colors = this->inColor()->getData();
117 mColor.load(colors);
118 }
119 }
120
122 {
123 if (mNumPoints == 0)
124 return;
125
126 // setup uniform buffer
127 mUniformBlock.load((void*)&rparams, sizeof(RenderParams));
128 mUniformBlock.bindBufferBase(0);
129
130 mShaderProgram->use();
131 mShaderProgram->setFloat("uPointSize", this->varPointSize()->getValue());
132
133 if (rparams.mode == GLRenderMode::COLOR)
134 {
135 mShaderProgram->setFloat("uMetallic", this->varMetallic()->getValue());
136 mShaderProgram->setFloat("uRoughness", this->varRoughness()->getValue());
137 mShaderProgram->setFloat("uAlpha", this->varAlpha()->getValue());
138 }
139 else if (rparams.mode == GLRenderMode::SHADOW)
140 {
141
142 }
143 else if (rparams.mode == GLRenderMode::TRANSPARENCY)
144 {
145 printf("WARNING: GLPointVisualModule does not support transparency!\n");
146 return;
147 }
148 else
149 {
150 printf("Unknown render pass!\n");
151 return;
152 }
153
154 // per-object color color
155 auto color = this->varBaseColor()->getValue();
156 glVertexAttrib3f(1, color.r, color.g, color.b);
157
158 mVertexArray.bind();
159 glDrawArrays(GL_POINTS, 0, mNumPoints);
160 glCheckError();
161 }
162}
#define glCheckError()
#define IMPLEMENT_CLASS(name)
Definition Object.h:79
static Color Grey81()
Definition Color.h:518
virtual void updateGL() override
virtual bool initializeGL() override
virtual void paintGL(const RenderParams &rparams) override
virtual void updateImpl() override
void setColorMapMode(ColorMapMode mode)
virtual void releaseGL() override
void setName(std::string name)
Definition Module.cpp:187
static Program * createProgramSPIRV(const void *vs, size_t vs_len, const void *fs, size_t fs_len, const void *gs=0, size_t gs_len=0)
Definition Shader.cpp:202
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
static const int SHADOW
static const int COLOR
static const int TRANSPARENCY