a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
75 {
77 printf(
" positions %d\n", m_mesh.vertex_count());
78 printf(
" triangles %d\n", m_mesh.triangle_count());
79
80
81 struct vertex
82 {
83 glsl::vec3 position;
84 };
85
86
87 std::vector<vertex> data(m_mesh.vertex_count());
88 for(int i= 0; i < m_mesh.vertex_count(); i++)
89 data[i].position= m_mesh.positions().at(i);
90
91
92 glGenVertexArrays(1, &m_vao);
93 glBindVertexArray(m_vao);
94
95
96 glGenBuffers(1, &m_buffer);
97 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer);
98 glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(vertex) * data.size(), data.data(), GL_STREAM_READ);
99
100 glGenBuffers(1, &m_transformed_buffer);
101 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_transformed_buffer);
102 glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(vec4) * data.size(), std::vector<vec4>(data.size(), vec4()).data(), GL_STREAM_COPY);
103
104
105 m_program=
read_program(
"gkit2_tutos/pipeline_compute.glsl");
107
108
109 m_compute_program=
read_program(
"gkit2_tutos/vertex_compute.glsl");
111
112
113 GLint threads[3]= { };
114 glGetProgramiv(m_compute_program, GL_COMPUTE_WORK_GROUP_SIZE, threads);
115 printf(
"threads / group x %d, y %d, z %d\n", threads[0], threads[1], threads[2]);
116 m_compute_threads= threads[0];
117
118
119 m_compute_groups= m_mesh.vertex_count() / m_compute_threads;
120 if(m_mesh.vertex_count() % m_compute_threads)
121 m_compute_groups= m_compute_groups +1;
122
123 printf(
"groups %d= %d threads\n", m_compute_groups, m_compute_groups*m_compute_threads);
124
125
126 Point pmin, pmax;
127 m_mesh.bounds(pmin, pmax);
128 m_camera.lookat(pmin, pmax);
129
130
131 glClearColor(0.2f, 0.2f, 0.2f, 1.f);
132
133 glClearDepth(1.f);
134 glDepthFunc(GL_LESS);
135 glEnable(GL_DEPTH_TEST);
136
137 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
138 glLineWidth(2);
139
140 return 0;
141 }
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().
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
GLuint read_program(const char *filename, const char *definitions)
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.