bool terrain_del (terrain_t *t) { if (t->state != TERRAIN_STATE_WAITING) return false; t->state = TERRAIN_STATE_DELETED; t->next->prev = t->prev; t->prev->next = t->next; vbo_free (&t->vbo_id); free (t); return true; }
inst_t::~inst_t() { svec_iter_t iter; vbo_model_t *vbo_model; model_d_t *model_d; svec_iter_init(&iter, &vbo_modelv); while ( (vbo_model = (vbo_model_t *) svec_iter_next(&iter)) ) vbo_free(vbo_model); svec_iter_init(&iter, &model_dv); while ( (model_d = (model_d_t *) svec_iter_next(&iter)) ) model_d_free(model_d); svec_free(&vbo_modelv); svec_free(&model_dv); delete controller; }
void gl_render_terrain (terrain_t *t, camera_t *c) { //#define FRUSTUM 1 #ifdef FRUSTUM if (frustum_check (t, c) == false) return; #endif if (t->state & TERRAIN_STATE_UPDATE) vbo_free (&t->vbo_id); if (!t->vbo_id) t->vbo_id = vbo_alloc (t->gl_buf, t->gl_buf_len * sizeof (float) * 9); glBindBuffer (GL_ARRAY_BUFFER, t->vbo_id); /* Vykreslovani terenu */ glm::mat4 mdl_matrix; mdl_matrix = glm::translate (glm::vec3 (t->origin_x-TERRAIN_DIM, t->origin_z, t->origin_y-TERRAIN_DIM)); /* enable program and set uniform variables */ glUseProgram (shader[0]); glm::mat4 tmp = c->view * mdl_matrix; int uniform = glGetUniformLocation (shader[0], "PMatrix"); glUniformMatrix4fv (uniform, 1, GL_FALSE, (float*)&c->projection[0]); uniform = glGetUniformLocation (shader[0], "VMatrix"); glUniformMatrix4fv (uniform, 1, GL_FALSE, (float*)&c->view[0]); uniform = glGetUniformLocation (shader[0], "MVMatrix"); glUniformMatrix4fv (uniform, 1, GL_FALSE, (float*)&tmp[0]); uniform = glGetUniformLocation (shader[0], "NormalMatrix"); glUniformMatrix3fv (uniform, 1, GL_FALSE, (float*)&(glm::inverseTranspose(glm::mat3(tmp)))[0]); shader_getuniform_light (shader[0], &light[0]); shader_getuniform_material (shader[0], &mat[0]); GLuint tex_id = glGetUniformLocation (shader[0], "tex_sampler0"); glUniform1i (tex_id, 0); tex_id = glGetUniformLocation (shader[0], "tex_sampler1"); glUniform1i (tex_id, 1); tex_id = glGetUniformLocation (shader[0], "tex_sampler2"); glUniform1i (tex_id, 2); /* texura */ glActiveTexture (GL_TEXTURE2); glBindTexture (GL_TEXTURE_2D, tex_get (4)); glActiveTexture (GL_TEXTURE1); glBindTexture (GL_TEXTURE_2D, tex_get (3)); glActiveTexture (GL_TEXTURE0); glBindTexture (GL_TEXTURE_2D, tex_get (2)); glEnableVertexAttribArray (0); glEnableVertexAttribArray (1); glEnableVertexAttribArray (2); glEnableVertexAttribArray (3); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, (9 * sizeof(GLfloat)), 0); glVertexAttribPointer (1, 3, GL_FLOAT, GL_FALSE, (9 * sizeof(GLfloat)), (GLvoid *) (3 * sizeof(GLfloat))); glVertexAttribPointer (2, 2, GL_FLOAT, GL_FALSE, (9 * sizeof(GLfloat)), (GLvoid *) (6 * sizeof(GLfloat))); glVertexAttribPointer (3, 1, GL_FLOAT, GL_FALSE, (9 * sizeof(GLfloat)), (GLvoid *) (8 * sizeof(GLfloat))); /* k vykresleni pouzivame Vertex Buffer Object */ glDrawArrays (GL_TRIANGLES, 0, t->gl_buf_len); glDisableVertexAttribArray (0); glDisableVertexAttribArray (1); glDisableVertexAttribArray (2); glDisableVertexAttribArray (3); glBindBuffer (GL_ARRAY_BUFFER, 0); /* vypneme shader */ glUseProgram (0); }
void free_geometry() { vbo_free(); }