gKit2 light
Loading...
Searching...
No Matches
ComputeBuffer Struct Reference
Inheritance diagram for ComputeBuffer:

Public Member Functions

int init ()
 a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int quit ()
 a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int render ()
 a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Public Member Functions inherited from App
 App (const int width, const int height, const int major=3, const int minor=3)
 constructeur, dimensions de la fenetre et version d'openGL.
virtual int update (const float time, const float delta)
 a deriver et redefinir pour animer les objets en fonction du temps.
int run ()
 execution de l'application.

Public Attributes

std::vector< int > m_data
GLuint m_gpu_buffer1
GLuint m_gpu_buffer2
GLuint m_read_buffer
GLuint m_program

Additional Inherited Members

Protected Member Functions inherited from App
virtual int prerender ()
virtual int postrender ()
void vsync_off ()
Protected Attributes inherited from App
Window m_window
Context m_context
bool sync

Detailed Description

Definition at line 9 of file tuto_compute_buffer.cpp.

Constructor & Destructor Documentation

◆ ComputeBuffer()

ComputeBuffer::ComputeBuffer ( )
inline

Definition at line 11 of file tuto_compute_buffer.cpp.

11: App(1280, 768, 4,3) {}
App(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app.cpp:11

Member Function Documentation

◆ init()

int ComputeBuffer::init ( )
inlinevirtual

a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 13 of file tuto_compute_buffer.cpp.

14 {
15 m_program= read_program("gkit2_tutos/M2/compute_buffer.glsl");
16 program_print_errors(m_program);
17
18 // initialise un tableau de valeurs
19 m_data= std::vector<int>(1024);
20
21 // cree les buffers pour les parametres du shader
22 glGenBuffers(1, &m_gpu_buffer1);
23 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_gpu_buffer1);
24 glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(int) * m_data.size(), m_data.data(), GL_STATIC_COPY);
25
26 // buffer resultat, meme taille, mais pas de donnees...
27 glGenBuffers(1, &m_gpu_buffer2);
28 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_gpu_buffer2);
29 glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(int) * m_data.size(), nullptr, GL_STATIC_COPY);
30
31 return 0;
32 }
GLuint read_program(const char *filename, const char *definitions)
Definition program.cpp:217
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.
Definition program.cpp:461

◆ quit()

int ComputeBuffer::quit ( )
inlinevirtual

a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 34 of file tuto_compute_buffer.cpp.

35 {
36 release_program(m_program);
37 glDeleteBuffers(1, &m_gpu_buffer1);
38 glDeleteBuffers(1, &m_gpu_buffer2);
39
40 return 0;
41 }
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240

◆ render()

int ComputeBuffer::render ( )
inlinevirtual

a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.

Implements App.

Definition at line 43 of file tuto_compute_buffer.cpp.

44 {
45 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_gpu_buffer1);
46 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_gpu_buffer2);
47
48 // execute les shaders
49 glUseProgram(m_program);
50
51 // recupere le nombre de threads declare par le shader
52 int threads[3]= {};
53 glGetProgramiv(m_program, GL_COMPUTE_WORK_GROUP_SIZE, threads);
54
55 int n= m_data.size() / threads[0];
56 // nombre de groupes de threads, arrondi...
57 if(m_data.size() % threads[0])
58 n++;
59 // oui on peut calculer ca de maniere plus directe...
60 // ou utiliser directement 256, comme dans le shader...
61
62 // go !
63 glDispatchCompute(n, 1, 1);
64
65 // attendre que les resultats soient disponibles
66 glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
67
68 // relire le resultat
69 std::vector<int> tmp(1024);
70 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_gpu_buffer2);
71 glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(int) * tmp.size(), tmp.data());
72
73 for(unsigned i= 0; i < tmp.size(); i++)
74 printf("%d ", tmp[i]);
75 printf("\n");
76
77 return 0;
78 }
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Definition text.cpp:140

Member Data Documentation

◆ m_data

std::vector<int> ComputeBuffer::m_data

Definition at line 80 of file tuto_compute_buffer.cpp.

◆ m_gpu_buffer1

GLuint ComputeBuffer::m_gpu_buffer1

Definition at line 81 of file tuto_compute_buffer.cpp.

◆ m_gpu_buffer2

GLuint ComputeBuffer::m_gpu_buffer2

Definition at line 82 of file tuto_compute_buffer.cpp.

◆ m_read_buffer

GLuint ComputeBuffer::m_read_buffer

Definition at line 83 of file tuto_compute_buffer.cpp.

◆ m_program

GLuint ComputeBuffer::m_program

Definition at line 84 of file tuto_compute_buffer.cpp.


The documentation for this struct was generated from the following file: