示例#1
0
t_jit_tml_gl_videoplane *jit_gl_videoplane_new(t_symbol * dest_name)
{
	t_jit_tml_gl_videoplane *x;
	t_atom rav[4];
	t_atom *av=rav;
	
	// make jit object
	if (x = (t_jit_tml_gl_videoplane *)jit_object_alloc(_jit_tml_gl_videoplane_class)) 
	{
		// create and attach ob3d
		jit_ob3d_new(x, dest_name);
		
		// set instance variable defaults
		x->dim[0] = 20;
		x->dim[1] = 20;	
		x->chunk = jit_glchunk_grid_new(_jit_sym_gl_quad_grid, 12, x->dim[0], x->dim[1]);
		x->recalc = 1;
		x->displaylist = 0;
		x->dlref = 0;
		x->gridmode = 0;
		
		x->interp = 1;
		x->tex_offset_x = 0.;
		x->tex_offset_y = 0.;
		x->tex_scale_x = 1.;
		x->tex_scale_y = 1.;
		
		x->nudge = 0.0001;	// hack for edges
	 			
		x->rect_tex = 1;
		x->client_storage = PLATFORM_DYNAMIC_TEX;
		x->colormode = gensym("argb");

		jit_atom_setfloat(av,1.);
		jit_atom_setfloat(av+1,1.);
		jit_atom_setfloat(av+2,1.);
		jit_atom_setfloat(av+3,1.);
		
		jit_object_method(x,gensym("color"),4,av);

		x->texture = jit_object_new(ps_jit_gl_texture,jit_attr_getsym(x,ps_drawto));
		if (x->texture) {
			x->texturename = jit_symbol_unique();		
			jit_attr_setsym(x->texture,_jit_sym_name,x->texturename);
			jit_attr_setsym(x->texture,gensym("defaultimage"),gensym("black"));
			jit_attr_setlong(x->texture,ps_rectangle,x->rect_tex);
			jit_attr_setsym(x->texture,ps_mode,x->client_storage?ps_dynamic:ps_static);		
			jit_attr_setsym(x,ps_texture,x->texturename);
		} else {
			error("jit.tml.gl.videoplane: could not create texture");
			x->texturename = _jit_sym_nothing;		
		}
	} 
	else 
	{
		error("jit.tml.gl.videoplane: Failed at jit_object_alloc");
		x = NULL;
	}	
	return x;
}
t_jit_gl_terrain *jit_gl_terrain_new(t_symbol * dest_name)
{
	t_jit_gl_terrain *x;
	long i, j;
	float *vertnorms, *posit, *facenorms,*texcoords;

	// make jit object
	if (x = (t_jit_gl_terrain *)jit_object_alloc(_jit_gl_terrain_class)) 
	{
		// create and attach ob3d
		jit_ob3d_new(x, dest_name);
		
		// set instance variable defaults
		x->shape = ps_terrain;
		x->dim[0] = 20;
		x->dim[1] = 20;	
		x->chunk = jit_glchunk_grid_new(_jit_sym_gl_quad_grid, 12, x->dim[0], x->dim[1]);
		x->recalc = 1;
		x->displaylist = 0;
		x->dlref = 0;
		x->gridmode = 0;

		x->ind = 0;
		x->om = 0;

		x->coords[0] = 0.1;
		x->coords[1] = 0.1;	
	
		x->calc_norms = 1;
		x->draw_norms=0;
		
		x->tail = MAXGRID;

		for (i=0; i<MAXGRID; i++) {
			x->pos[i] = 0.0f;

//			for (j=0; j<MAXGRID; j++) {
//				temp[i][j] = 0.0f;
//				temp[i+MAXGRID][j] = 0.0f;
//			}
		}
		
		
		// get mem code here
		x->maxdim[0] = MAXGRID;
		x->maxdim[1] = MAXGRID;	
		
//		post("init vars done");


		// alloc memory here
		
		x->posit= sysmem_newptr(x->maxdim[0]*x->maxdim[1]*sizeof(float));
		if(x->posit) { 
//			post("alloced posit %ld * %ld * %ld \(sizeof\(double\)\) = %ld bytes",x->maxdim[0], x->maxdim[1],sizeof(double),x->maxdim[0]*x->maxdim[1]*sizeof(double));   
		} else {
			error("couldn't build x->posit");
		}
		
		x->vertnorms= sysmem_newptr(x->maxdim[0]*x->maxdim[1]* 3 *sizeof(float));
		if(x->vertnorms) { 
//			post("alloced vertnorms %ld * %ld * %ld * 3 *\(sizeof\(double\)\) = %ld bytes",x->maxdim[0], x->maxdim[1],sizeof(double),x->maxdim[0]*x->maxdim[1]*3*sizeof(double));   
		} else {
			error("couldn't build x->vertnorms");
		}
		
		x->texcoords= sysmem_newptr(x->maxdim[0]*x->maxdim[1]* 2 *sizeof(float));
		if(x->texcoords) { 
//			post("alloced texcoords %ld * %ld * %ld * 3 *\(sizeof\(double\)\) = %ld bytes",x->maxdim[0], x->maxdim[1],sizeof(double),x->maxdim[0]*x->maxdim[1]*3*sizeof(double));   
		} else {
			error("couldn't build x->texcoords");
		}


		
		x->facenorms= sysmem_newptr(2 * x->maxdim[0]*x->maxdim[1]* 3 *sizeof(float));
		if(x->facenorms) { 
//			post("alloced vertnorms %ld * %ld * %ld * 3 *\(sizeof\(double\)\) = %ld bytes",x->maxdim[0], x->maxdim[1],sizeof(double),x->maxdim[0]*x->maxdim[1]*3*sizeof(double));   
		} else {
			error("couldn't build x->facenorms");
		}
		
		
//		post("igniting alloced memory");


		vertnorms=x->vertnorms;
		posit=x->posit;
		facenorms=x->facenorms;
		texcoords=x->texcoords;

		
		//memset(x->vertnorms, 0, x->maxdim[0]*x->maxdim[1]*sizeof(double));

		
		for (i=0; i<MAXGRID; i++) {
			for (j=0; j<MAXGRID; j++) {

				*posit=0.0f;
				posit++;
				
				//(double)((*posit+0))=0.0f; posit++;

				*vertnorms=0.0f; vertnorms++;
				*vertnorms=0.0f; vertnorms++;
				*vertnorms=0.0f; vertnorms++;

				*texcoords=0.0f; texcoords++;
				*texcoords=0.0f; texcoords++;

				*facenorms=0.0f; facenorms++;
				*facenorms=0.0f; facenorms++;
				*facenorms=0.0f; facenorms++;
				*facenorms=0.0f; facenorms++;
				*facenorms=0.0f; facenorms++;
				*facenorms=0.0f; facenorms++;


/*
				x->vertnorms[i][j][1]=0.0f;
				x->vertnorms[i][j][2]=0.0f;

				x->texcoords[i][j][0]=0.0f;
				x->texcoords[i][j][1]=0.0f;

				x->facenorms[0][i][j][0]=0.0f;
				x->facenorms[0][i][j][1]=0.0f;
				x->facenorms[0][i][j][2]=0.0f;
				x->facenorms[1][i][j][0]=0.0f;
				x->facenorms[1][i][j][1]=0.0f;
				x->facenorms[1][i][j][2]=0.0f;
*/

			}
		}
	} 
	else 
	{
		x = NULL;
	}	
	return x;
}