Esempio n. 1
0
void PACKSPU_APIENTRY packspu_ChromiumParametervCR(GLenum target, GLenum type, GLsizei count, const GLvoid *values)
{

    CRMessage msg;
    int len;
    
    GET_THREAD(thread);

    
    switch(target)
    {
        case GL_GATHER_PACK_CR:
            /* flush the current pack buffer */
            packspuFlush( (void *) thread );

            /* the connection is thread->server.conn */
            msg.header.type = CR_MESSAGE_GATHER;
            msg.gather.offset = 69;
            len = sizeof(CRMessageGather);
            crNetSend(thread->netServer.conn, NULL, &msg, len);
            break;
            
        default:
            if (pack_spu.swap)
                crPackChromiumParametervCRSWAP(target, type, count, values);
            else
                crPackChromiumParametervCR(target, type, count, values);
    }


}
Esempio n. 2
0
/**
 * Send the current tilesort tile info to all the servers.
 */
void
tilesortspuSendTileInfoToServers( WindowInfo *winInfo )
{
	GET_THREAD(thread);
	int i;

	/* release geometry buffer */
	crPackReleaseBuffer( thread->packer );

	/* loop over servers */
	for (i = 0; i < tilesort_spu.num_servers; i++)
	{
		ServerWindowInfo *servWinInfo = winInfo->server + i;
		int tileInfo[4 + 4 * CR_MAX_EXTENTS], arraySize;
		int j;

		/* build tileInfo array */
		tileInfo[0] = i;
		tileInfo[1] = winInfo->muralWidth;
		tileInfo[2] = winInfo->muralHeight;
		tileInfo[3] = servWinInfo->num_extents;
		for (j = 0; j < servWinInfo->num_extents; j++)
		{
			int w = servWinInfo->extents[j].x2 - servWinInfo->extents[j].x1;
			int h = servWinInfo->extents[j].y2 - servWinInfo->extents[j].y1;
			tileInfo[4 + j * 4 + 0] = servWinInfo->extents[j].x1;
			tileInfo[4 + j * 4 + 1] = servWinInfo->extents[j].y1;
			tileInfo[4 + j * 4 + 2] = w;
			tileInfo[4 + j * 4 + 3] = h;
		}
		arraySize = 4 + 4 * servWinInfo->num_extents;

		/* pack/send to server[i] */
		crPackSetBuffer( thread->packer, &(thread->buffer[i]) );

		if (tilesort_spu.swap)
			crPackChromiumParametervCRSWAP(GL_TILE_INFO_CR, GL_INT,
										   arraySize, tileInfo);
		else
			crPackChromiumParametervCR(GL_TILE_INFO_CR, GL_INT,
									   arraySize, tileInfo);

		/* release server buffer */
		crPackReleaseBuffer( thread->packer );
	}

	/* Restore default buffer */
	crPackSetBuffer( thread->packer, &(thread->geometry_buffer) );
}
Esempio n. 3
0
/**
 * Examine the server tile boundaries to compute the overall max
 * viewport dims.  Then send those dims to the servers.
 *
 * XXX \todo This isn't used!?!
 */
void
tilesortspuComputeMaxViewport(WindowInfo *winInfo)
{
	ThreadInfo *thread0 = &(tilesort_spu.thread[0]);
	GLint totalDims[2];
	int i;


	/* release geometry buffer, if it's bound */
	crPackReleaseBuffer( thread0->packer );

	/*
	 * It's hard to say what the max viewport size should be.
	 * We've changed this computation a few times now.
	 * For now, we set it to twice the mural size, or at least 4K.
	 * One problem is that the mural size can change dynamically...
	 */
	totalDims[0] = 2 * winInfo->muralWidth;
	totalDims[1] = 2 * winInfo->muralHeight;
	if (totalDims[0] < 4096)
		totalDims[0] = 4096;
	if (totalDims[1] < 4096)
		totalDims[1] = 4096;

	tilesort_spu.limits.maxViewportDims[0] = totalDims[0];
	tilesort_spu.limits.maxViewportDims[1] = totalDims[1];

	/* 
	 * Once we've computed the maximum viewport size, we send
	 * a message to each server with its new viewport parameters.
	 */
	for (i = 0; i < tilesort_spu.num_servers; i++)
	{
		crPackSetBuffer( thread0->packer, &(thread0->buffer[i]) );

		if (tilesort_spu.swap)
			crPackChromiumParametervCRSWAP(GL_SET_MAX_VIEWPORT_CR, GL_INT, 2, totalDims);
		else
			crPackChromiumParametervCR(GL_SET_MAX_VIEWPORT_CR, GL_INT, 2, totalDims);

		/* release server buffer */
		crPackReleaseBuffer( thread0->packer );

		/* Flush buffer (send to server) */
		tilesortspuSendServerBuffer( i );
	}
}