1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/* Copyright (c) 2001, Stanford University
* All rights reserved
*
* See the file LICENSE.txt for information on redistributing this software.
*/
#include "cr_spu.h"
#include "chromium.h"
#include "cr_error.h"
#include "cr_mem.h"
#include "cr_net.h"
#include "server_dispatch.h"
#include "server.h"
static GLint __sizeQuery( GLenum map )
{
GLint get_values;
/* Windows compiler gets mad if variables might be uninitialized */
GLenum newmap = GL_PIXEL_MAP_I_TO_I_SIZE;
switch( map )
{
case GL_PIXEL_MAP_I_TO_I:
newmap = GL_PIXEL_MAP_I_TO_I_SIZE;
break;
case GL_PIXEL_MAP_S_TO_S:
newmap = GL_PIXEL_MAP_S_TO_S_SIZE;
break;
case GL_PIXEL_MAP_I_TO_R:
newmap = GL_PIXEL_MAP_I_TO_R_SIZE;
break;
case GL_PIXEL_MAP_I_TO_G:
newmap = GL_PIXEL_MAP_I_TO_G_SIZE;
break;
case GL_PIXEL_MAP_I_TO_B:
newmap = GL_PIXEL_MAP_I_TO_B_SIZE;
break;
case GL_PIXEL_MAP_I_TO_A:
newmap = GL_PIXEL_MAP_I_TO_A_SIZE;
break;
case GL_PIXEL_MAP_R_TO_R:
newmap = GL_PIXEL_MAP_R_TO_R_SIZE;
break;
case GL_PIXEL_MAP_G_TO_G:
newmap = GL_PIXEL_MAP_G_TO_G_SIZE;
break;
case GL_PIXEL_MAP_B_TO_B:
newmap = GL_PIXEL_MAP_B_TO_B_SIZE;
break;
case GL_PIXEL_MAP_A_TO_A:
newmap = GL_PIXEL_MAP_A_TO_A_SIZE;
break;
default:
crError( "Bad map in crServerDispatchGetPixelMap: %d", map );
break;
}
cr_server.head_spu->dispatch_table.GetIntegerv( newmap, &get_values );
return get_values;
}
void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapfv( GLenum map, GLfloat *values )
{
#ifdef CR_ARB_pixel_buffer_object
if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
{
GLvoid *pbo_offset;
pbo_offset = (GLfloat*) ((uintptr_t) *((GLint*)values));
cr_server.head_spu->dispatch_table.GetPixelMapfv( map, pbo_offset );
}
else
#endif
{
int size = sizeof( GLfloat );
int tabsize = __sizeQuery( map );
GLfloat *local_values;
size *= tabsize;
local_values = (GLfloat*)crAlloc( size );
cr_server.head_spu->dispatch_table.GetPixelMapfv( map, local_values );
crServerReturnValue( local_values, size );
crFree( local_values );
}
}
void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapuiv( GLenum map, GLuint *values )
{
#ifdef CR_ARB_pixel_buffer_object
if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
{
GLvoid *pbo_offset;
pbo_offset = (GLuint*) ((uintptr_t) *((GLint*)values));
cr_server.head_spu->dispatch_table.GetPixelMapuiv( map, pbo_offset );
}
else
#endif
{
int size = sizeof( GLuint );
int tabsize = __sizeQuery( map );
GLuint *local_values;
size *= tabsize;
local_values = (GLuint*)crAlloc( size );
cr_server.head_spu->dispatch_table.GetPixelMapuiv( map, local_values );
crServerReturnValue( local_values, size );
crFree( local_values );
}
}
void SERVER_DISPATCH_APIENTRY crServerDispatchGetPixelMapusv( GLenum map, GLushort *values )
{
#ifdef CR_ARB_pixel_buffer_object
if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
{
GLvoid *pbo_offset;
pbo_offset = (GLushort*) ((uintptr_t) *((GLint*)values));
cr_server.head_spu->dispatch_table.GetPixelMapusv( map, pbo_offset );
}
else
#endif
{
int size = sizeof( GLushort );
int tabsize = __sizeQuery( map );
GLushort *local_values;
size *= tabsize;
local_values = (GLushort*)crAlloc( size );
cr_server.head_spu->dispatch_table.GetPixelMapusv( map, local_values );
crServerReturnValue( local_values, size );
crFree( local_values );
}
}
|