Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
File: gl.cpp Progetto: ZeXx86/gen
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();
}