a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
27 {
28 m_framebuffer_width= 512;
29 m_framebuffer_height= 512;
30
31
32 glGenTextures(1, &m_color_buffer);
33 glBindTexture(GL_TEXTURE_2D, m_color_buffer);
34
35 glTexImage2D(GL_TEXTURE_2D, 0,
36 GL_RGBA, m_framebuffer_width, m_framebuffer_height, 0,
37 GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
38
39
40 glGenerateMipmap(GL_TEXTURE_2D);
41
42
43 glGenSamplers(1, &color_sampler);
44
45 glSamplerParameteri(color_sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
46 glSamplerParameteri(color_sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
47 glSamplerParameteri(color_sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
48 glSamplerParameteri(color_sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
49
50
51 glGenTextures(1, &m_depth_buffer);
52 glBindTexture(GL_TEXTURE_2D, m_depth_buffer);
53
54 glTexImage2D(GL_TEXTURE_2D, 0,
55 GL_DEPTH_COMPONENT, m_framebuffer_width, m_framebuffer_height, 0,
56 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
57
58
59 glGenFramebuffers(1, &m_framebuffer);
60 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer);
61 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_color_buffer, 0);
62 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_depth_buffer, 0);
63
64
65 GLenum buffers[]= { GL_COLOR_ATTACHMENT0 };
66 glDrawBuffers(1, buffers);
67
68
69 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
70
71
74 return -1;
75
76 Point pmin, pmax;
78 m_camera.lookat(pmin, pmax);
79 m_framebuffer_camera.lookat(pmin, pmax);
80
82
83 m_color_texture=
read_texture(0,
"data/debug2x2red.png");
84
85
86 glGenVertexArrays(1, &m_vao);
87 glBindVertexArray(m_vao);
88
89
90 glGenBuffers(1, &m_buffer);
91 glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
92
94 glBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_STATIC_DRAW);
95
96
97 size_t offset= 0;
99 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
vertex_buffer());
100
101 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid *) offset);
102 glEnableVertexAttribArray(0);
103
104
105 offset= offset + size;
107 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
texcoord_buffer());
108
109 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid *) offset);
110 glEnableVertexAttribArray(1);
111
112
113 offset= offset + size;
115 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
normal_buffer());
116
117 glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid *) offset);
118 glEnableVertexAttribArray(2);
119
120
122 glBindVertexArray(0);
123 glBindBuffer(GL_ARRAY_BUFFER, 0);
124
125
126 m_texture_program=
read_program(
"gkit2_tutos/texcoords.glsl");
128
129
130 glClearColor(0.2f, 0.2f, 0.2f, 1.f);
131
132 glClearDepthf(1.f);
133 glDepthFunc(GL_LESS);
134 glEnable(GL_DEPTH_TEST);
135
136 return 0;
137 }
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...
const float * texcoord_buffer() const
renvoie l'adresse des coordonnees de textures du premier sommet. par convention, c'est un vec2,...
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
int vertex_count() const
renvoie le nombre de sommets.
void release()
detruit les objets openGL.
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3,...
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
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, const char *filename)
affiche les erreurs de compilation.
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)