1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include "lattice_cell_buffer.h"
#include <vector>
std::vector<GLfloat> makeLattice(GLuint nX, GLuint nY) {
std::vector<GLfloat> data(9*nX*nY, GLfloat{});
const GLfloat equilibrium[9] {
1./36., 1./9., 1./36.,
1./9. , 4./9., 1./9. ,
1./36 , 1./9., 1./36.
};
for (int i = 0; i < nX*nY; ++i) {
for (int q = 0; q < 9; ++q) {
data[9*i+q] = equilibrium[q];
}
}
return data;
}
LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY):
_nX(nX), _nY(nY) {
glGenBuffers(1, &_buffer);
init();
}
void LatticeCellBuffer::init() {
const std::vector<GLfloat> data = makeLattice(_nX, _nY);
glBindBuffer(GL_ARRAY_BUFFER, _buffer);
glBufferData(
GL_ARRAY_BUFFER,
data.size() * sizeof(GLfloat),
data.data(),
GL_DYNAMIC_DRAW
);
}
LatticeCellBuffer::~LatticeCellBuffer() {
glDeleteBuffers(1, &_buffer);
}
GLuint LatticeCellBuffer::getBuffer() const {
return _buffer;
}
|