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