static void create_ao_raytree(MultiresBakeRender *bkr, MAOBakeData *ao_data) { DerivedMesh *hidm = bkr->hires_dm; RayObject *raytree; RayFace *face; CCGElem **grid_data; CCGKey key; int num_grids, grid_size /*, face_side */, num_faces; int i; num_grids = hidm->getNumGrids(hidm); grid_size = hidm->getGridSize(hidm); grid_data = hidm->getGridData(hidm); hidm->getGridKey(hidm, &key); /* face_side = (grid_size << 1) - 1; */ /* UNUSED */ num_faces = num_grids * (grid_size - 1) * (grid_size - 1); raytree = ao_data->raytree = RE_rayobject_create(bkr->raytrace_structure, num_faces, bkr->octree_resolution); face = ao_data->rayfaces = (RayFace *) MEM_callocN(num_faces * sizeof(RayFace), "ObjectRen faces"); for (i = 0; i < num_grids; i++) { int x, y; for (x = 0; x < grid_size - 1; x++) { for (y = 0; y < grid_size - 1; y++) { float co[4][3]; copy_v3_v3(co[0], CCG_grid_elem_co(&key, grid_data[i], x, y)); copy_v3_v3(co[1], CCG_grid_elem_co(&key, grid_data[i], x, y + 1)); copy_v3_v3(co[2], CCG_grid_elem_co(&key, grid_data[i], x + 1, y + 1)); copy_v3_v3(co[3], CCG_grid_elem_co(&key, grid_data[i], x + 1, y)); RE_rayface_from_coords(face, ao_data, face, co[0], co[1], co[2], co[3]); RE_rayobject_add(raytree, RE_rayobject_unalignRayFace(face)); face++; } } } RE_rayobject_done(raytree); }