a deriver pour creer les objets openGL.
79 {
80 if(m_mesh.triangle_count() == 0)
81 return -1;
82
83 Point pmin, pmax;
84 m_mesh.bounds(pmin, pmax);
85 m_camera.lookat(pmin, pmax);
86
87
88
89
90
91
92
93
94
95
96 struct triangle
97 {
98 glsl::vec3 a;
99 glsl::vec3 ab;
100 glsl::vec3 ac;
101 };
102
103 std::vector<triangle> data;
104 data.reserve(m_mesh.triangle_count());
105 for(int i= 0; i < m_mesh.triangle_count(); i++)
106 {
107 TriangleData t= m_mesh.triangle(i);
108 data.push_back( { Point(t.a), Point(t.b) - Point(t.a), Point(t.
c) - Point(t.a) } );
109 }
110
111
112 glGenBuffers(1, &m_buffer);
113 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer);
114 glBufferData(GL_SHADER_STORAGE_BUFFER, data.size() * sizeof(triangle), data.data(), GL_STATIC_READ);
115
116
117
118 glGenTextures(1, &m_texture);
119 glBindTexture(GL_TEXTURE_2D, m_texture);
120 glTexImage2D(GL_TEXTURE_2D, 0,
122 GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
123
124
125 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
126
127
128
129
130
131
132
133
134 glGenFramebuffers(1, &m_blit_framebuffer);
135 glBindFramebuffer(GL_READ_FRAMEBUFFER, m_blit_framebuffer);
136 glFramebufferTexture(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_texture, 0);
137
138 glReadBuffer(GL_COLOR_ATTACHMENT0);
139
140
141 m_program=
read_program(
"gkit2_tutos/M2/raytrace_compute.glsl");
143
144
145 glBindFramebuffer(GL_FRAMEBUFFER, 0);
146 glBindTexture(GL_TEXTURE_2D, 0);
147 return 0;
148 }
int window_height()
renvoie la hauteur de la fenetre de l'application.
int window_width()
renvoie la largeur de la fenetre de l'application.
GLuint read_program(const char *filename, const char *definitions)
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.