server_lists.c revision 8608612b77e4d9bccdd4ff30a40ce7cc68966570
/* Copyright (c) 2001-2003, Stanford University
All rights reserved.
See the file LICENSE.txt for information on redistributing this software. */
#include "server_dispatch.h"
#include "server.h"
#include "cr_mem.h"
/*
* Notes on ID translation:
*
* If a server has multiple clients (in the case of parallel applications)
* and N of the clients all create a display list with ID K, does K name
* one display list or N different display lists?
*
* By default, there is one display list named K. If the clients put
* identical commands into list K, then this is fine. But if the clients
* each put something different into list K when they created it, then this
* is a serious problem.
*
* By zeroing the 'shared_display_lists' configuration option, we can tell
* the server to make list K be unique for all N clients. We do this by
* translating K into a new, unique ID dependent on which client we're
* talking to (curClient->number).
*
* Same story for texture objects, vertex programs, etc.
*
* The application can also dynamically switch between shared and private
* display lists with:
* glChromiumParameteri(GL_SHARED_DISPLAY_LISTS_CR, GL_TRUE)
* and
* glChromiumParameteri(GL_SHARED_DISPLAY_LISTS_CR, GL_FALSE)
*
*/
{
if (!cr_server.sharedDisplayLists) {
}
return id;
}
{
}
return id;
}
{
return retval; /* WILL PROBABLY BE IGNORED */
}
{
if (mode == GL_COMPILE_AND_EXECUTE)
crWarning("using glNewList(GL_COMPILE_AND_EXECUTE) can confuse the crserver");
}
static void crServerQueryHWState()
{
{
{
}
else
{
}
}
}
void SERVER_DISPATCH_APIENTRY crServerDispatchEndList(void)
{
CRContext *g = crStateGetCurrent();
CRListsState *l = &(g->lists);
#ifndef IN_GUEST
if (l->mode==GL_COMPILE)
{
}
#endif
}
{
/* we're not compiling, so execute the list now */
/* Issue the list as-is */
}
else {
/* we're compiling glCallList into another list - just pass it through */
}
}
/**
* Translate an array of display list IDs from various datatypes to GLuint
* IDs while adding the per-client offset.
*/
static void
{
GLsizei i;
switch (type) {
case GL_UNSIGNED_BYTE:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_BYTE:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_UNSIGNED_SHORT:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_SHORT:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_UNSIGNED_INT:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_INT:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_FLOAT:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_2_BYTES:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_3_BYTES:
{
for (i = 0; i < n; i++) {
}
}
break;
case GL_4_BYTES:
{
for (i = 0; i < n; i++) {
}
}
break;
default:
}
}
{
if (!cr_server.sharedDisplayLists) {
/* need to translate IDs */
if (newLists) {
}
}
/* we're not compiling, so execute the list now */
/* Issue the list as-is */
}
else {
/* we're compiling glCallList into another list - just pass it through */
}
if (!cr_server.sharedDisplayLists) {
}
}
{
return retval;
}
{
}
{
}
{
GLint i;
if (!newTextures)
{
crError("crServerDispatchDeleteTextures: out of memory");
return;
}
for (i = 0; i < n; i++)
{
}
// for (i = 0; i < n; ++i)
// {
// crDebug("DeleteTexture: %d, pid %d, ctx %d", textures[i], (uint32_t)cr_server.curClient->pid, cr_server.currentCtxInfo->pContext->id);
// }
}
void SERVER_DISPATCH_APIENTRY crServerDispatchPrioritizeTextures( GLsizei n, const GLuint * textures, const GLclampf * priorities )
{
GLint i;
if (!newTextures)
{
crError("crServerDispatchDeleteTextures: out of memory");
return;
}
for (i = 0; i < n; i++)
{
}
}
{
GLint i;
if (!pLocalProgs) {
crError("crServerDispatchDeleteProgramsARB: out of memory");
return;
}
for (i = 0; i < n; i++) {
}
}
/*@todo will fail for textures loaded from snapshot */
{
return retval; /* WILL PROBABLY BE IGNORED */
}
/*@todo will fail for progs loaded from snapshot */
{
return retval; /* WILL PROBABLY BE IGNORED */
}
{
GLsizei i;
(void) residences;
for (i = 0; i < n; i++)
{
}
return retval; /* WILL PROBABLY BE IGNORED */
}
{
GLsizei i;
(void) residences;
if (!cr_server.sharedTextureObjects) {
for (i = 0; i < n; i++)
}
else {
}
return retval; /* WILL PROBABLY BE IGNORED */
}