示例#1
0
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);
}
示例#2
0
文件: manager.c 项目: ffbli666/D2MCE
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;
}