void Screen::initD3D() { //do all D3D initialization if (!createSCandDevice()) { _badInit = true; return; } createRT(); createVP(); createDS(); createSM(); createSSAO(); createEffect(); parseEffect(); createVL(); //create the light light = new AMLight(D3DXVECTOR3(0.0f, 0.0f, -1.0f)); //set up the physics engine physics.setup(30, settings.getGravityMul()); _pDebug = new AMPhysicsDebug(d3ddev, effectTech); //only wireframe supported for physics debug _pDebug->setDebugMode(AMPhysicsDebug::DBG_DrawWireframe); physics.getWorld()->setDebugDrawer(_pDebug); }
int main_imanager_req(){ int i, j; int index; void *buf; unsigned int offset; unsigned int users_count; unsigned int src_node; unsigned int seq_number; unsigned int node_id; struct sm_header *find; char *sm_name; if(g_group.coordinator.main_id == g_group.node_id) return 1; //max 33 mutex buf = mem_malloc(MAIN_IMAIN_SIZE); ((struct request_header*)buf)->msg_type = MSG_IMAIN_MANAGER; sendRecv(g_group.coordinator.main_id, buf, sizeof(struct request_header), buf, MSG_IMAIN_MANAGER); if(g_group.sm_table == NULL){ g_group.sm_table = hashTableCreate(SM_HASH_SIZE); } src_node = ((struct imain_reply*)buf)->req.src_node; seq_number = ((struct imain_reply*)buf)->req.src_seq_number; offset = sizeof(struct imain_reply); //copy share memory data for(i=0; i<((struct imain_reply*)buf)->sm_num; i++){ //mutex name sm_name = malloc(((struct main_sm_info*)(buf+offset))->name_len); memcpy(sm_name, buf+offset+sizeof(struct main_sm_info), ((struct main_sm_info*)(buf+offset))->name_len); sm_name[((struct main_sm_info*)(buf+offset))->name_len] = 0; printf("%s", sm_name); //search mutex find = hashTableSearch(g_group.sm_table, ((struct main_sm_info*)(buf+offset))->hash_id, sm_name); if(find == NULL){ //create new find = createSM(((struct main_sm_info*)(buf+offset))->hash_id, sm_name, ((struct main_sm_info*)(buf+offset))->home_node, ((struct main_sm_info*)(buf+offset))->size); hashTableInsert(g_group.sm_table, (struct hashheader*)find); } //copy find->count = ((struct main_sm_info*)(buf+offset))->count; //copy queue info users_count = ((struct main_sm_info*)(buf+offset))->users_count; offset += sizeof(struct main_sm_info)+strlen(sm_name); if(find->users == NULL) find->users = tableCreate(MAX_NODE_NUM, sizeof(unsigned int)); for(j=0; j< users_count; j++){ node_id = *((unsigned int*)(buf+offset)); if(searchNode(find->users, src_node)==-1){ index = tableGetEmpty(find->users); if(index == -1) return -1; tableAdd(find->users, (void*)&src_node, index); } offset += sizeof(unsigned int); } } g_group.coordinator.main_id = g_group.node_id; ((struct request_header*)buf)->msg_type = MSG_IMAIN_READY; ((struct request_header*)buf)->seq_number = seq_number; sendTo(src_node ,buf, sizeof(struct request_header)); mem_free(buf); return 1; }