示例#1
0
void SERVER_DISPATCH_APIENTRY
crServerDispatchNewList( GLuint list, GLenum mode )
{
    if (mode == GL_COMPILE_AND_EXECUTE)
        crWarning("using glNewList(GL_COMPILE_AND_EXECUTE) can confuse the crserver");

    list = TranslateListID( list );
    crStateNewList( list, mode );
    cr_server.head_spu->dispatch_table.NewList( list, mode );
}
示例#2
0
void REPLICATESPU_APIENTRY replicatespu_NewList(GLuint listIdentifier, GLenum mode)
{
	GET_THREAD(thread);

	if (listIdentifier == 0) {
	    crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, 
		"replicate: NewList with zero list identifier");
	    return;
	}
	if (mode != GL_COMPILE && mode != GL_COMPILE_AND_EXECUTE) {
	    crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, 
		"replicate: NewList with bad mode (0x%x)", mode);
	    return;
	}
	if (thread->currentContext->displayListMode != GL_FALSE) {
	    crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, 
		"replicate: NewList called while list %d was open",
		thread->currentContext->displayListIdentifier);
	    return;
	}

	/* All okay.  Tell the state tracker and the DLM that we've
	 * started a new display list.
	 */
	crStateNewList(listIdentifier, mode);
	crDLMNewList(listIdentifier, mode);

	/* Remember ourselves, too, so we don't have to waste a function
	 * call to figure out whether we're in a list or not.
	 */
	thread->currentContext->displayListMode = mode;
	thread->currentContext->displayListIdentifier = listIdentifier;

	/* Pack it up so we can send it to all the connected
	 * VNC clients.
	 */
	if (replicate_spu.swap)
	{
		crPackNewListSWAP(listIdentifier, mode);
	}
	else
	{
		crPackNewList(listIdentifier, mode);
	}
}