a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
26 m_framebuffer_width= 512;
27 m_framebuffer_height= 512;
30 glGenTextures(1, &m_color_buffer);
31 glBindTexture(GL_TEXTURE_2D, m_color_buffer);
33 glTexImage2D(GL_TEXTURE_2D, 0,
34 GL_RGBA, m_framebuffer_width, m_framebuffer_height, 0,
35 GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
38 glGenerateMipmap(GL_TEXTURE_2D);
41 glGenSamplers(1, &color_sampler);
43 glSamplerParameteri(color_sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
44 glSamplerParameteri(color_sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
45 glSamplerParameteri(color_sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
46 glSamplerParameteri(color_sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
49 glGenTextures(1, &m_depth_buffer);
50 glBindTexture(GL_TEXTURE_2D, m_depth_buffer);
52 glTexImage2D(GL_TEXTURE_2D, 0,
53 GL_DEPTH_COMPONENT, m_framebuffer_width, m_framebuffer_height, 0,
54 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
nullptr);
57 glGenFramebuffers(1, &m_framebuffer);
58 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer);
59 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_color_buffer, 0);
60 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_depth_buffer, 0);
63 GLenum
buffers[]= { GL_COLOR_ATTACHMENT0 };
67 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
75 m_camera.
lookat(pmin, pmax);
76 m_framebuffer_camera.
lookat(pmin, pmax);
80 m_color_texture=
read_texture(0,
"data/debug2x2red.png");
83 glGenVertexArrays(1, &m_vao);
84 glBindVertexArray(m_vao);
87 glGenBuffers(1, &m_buffer);
88 glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
91 glBufferData(GL_ARRAY_BUFFER, size,
nullptr, GL_STATIC_DRAW);
96 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
vertex_buffer());
98 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
99 glEnableVertexAttribArray(0);
102 offset= offset + size;
104 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
texcoord_buffer());
106 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
107 glEnableVertexAttribArray(1);
110 offset= offset + size;
112 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
normal_buffer());
114 glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
115 glEnableVertexAttribArray(2);
119 glBindVertexArray(0);
120 glBindBuffer(GL_ARRAY_BUFFER, 0);
123 m_texture_program=
read_program(
"tutos/texcoords.glsl");
127 glClearColor(0.2f, 0.2f, 0.2f, 1.f);
130 glDepthFunc(GL_LESS);
131 glEnable(GL_DEPTH_TEST);
representation d'un objet / maillage.
std::size_t texcoord_buffer_size() const
renvoie la taille (en octets) du texcoord buffer.
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL....
void bounds(Point &pmin, Point &pmax) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
const float * texcoord_buffer() const
renvoie l'adresse des coordonnees de textures du premier sommet. par convention, c'est un vec2,...
int vertex_count() const
renvoie le nombre de sommets.
void release()
detruit les objets openGL.
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3,...
void lookat(const Point ¢er, const float size)
observe le point center a une distance size.
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.
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
MeshBuffer buffers(const MeshData &data)
construction a partir des donnees d'un maillage.
representation d'un point 3d.