VirtualBox

source: vbox/trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py@ 46173

最後變更 在這個檔案從46173是 46173,由 vboxsync 提交於 12 年 前

crOpenGL: proper support for GL_NONE,AUX,etc. for offscreen rendering

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Id
檔案大小: 5.0 KB
 
1# Copyright (c) 2001, Stanford University
2# All rights reserved.
3#
4# See the file LICENSE.txt for information on redistributing this software.
5
6import sys
7
8import apiutil
9
10
11apiutil.CopyrightC()
12
13print """#include "cr_spu.h"
14#include "chromium.h"
15#include "cr_error.h"
16#include "cr_mem.h"
17#include "cr_net.h"
18#include "server_dispatch.h"
19#include "server.h"
20"""
21
22from get_sizes import *;
23
24
25funcs = [ 'GetIntegerv', 'GetFloatv', 'GetDoublev', 'GetBooleanv' ]
26types = [ 'GLint', 'GLfloat', 'GLdouble', 'GLboolean' ]
27
28for index in range(len(funcs)):
29 func_name = funcs[index]
30 params = apiutil.Parameters(func_name)
31 print 'void SERVER_DISPATCH_APIENTRY crServerDispatch%s( %s )' % ( func_name, apiutil.MakeDeclarationString(params))
32 print '{'
33 print '\t%s *get_values;' % types[index]
34 print '\tint tablesize;'
35 print """
36 #ifdef CR_ARB_texture_compression
37 if (GL_COMPRESSED_TEXTURE_FORMATS_ARB == pname)
38 {
39 GLint numtexfmts = 0;
40 cr_server.head_spu->dispatch_table.GetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, &numtexfmts);
41 tablesize = numtexfmts * sizeof(%s);
42 }
43 else
44 #endif
45 {
46 tablesize = __numValues( pname ) * sizeof(%s);
47 }
48 """ % (types[index], types[index])
49 print '\t(void) params;'
50 print '\tget_values = (%s *) crAlloc( tablesize );' % types[index]
51 print '\tif (tablesize>0)'
52 print '\tcr_server.head_spu->dispatch_table.%s( pname, get_values );' % func_name
53 print """
54 if (GL_TEXTURE_BINDING_1D==pname
55 || GL_TEXTURE_BINDING_2D==pname
56 || GL_TEXTURE_BINDING_3D==pname
57 || GL_TEXTURE_BINDING_RECTANGLE_ARB==pname
58 || GL_TEXTURE_BINDING_CUBE_MAP_ARB==pname)
59 {
60 GLuint texid;
61 CRASSERT(tablesize/sizeof(%s)==1);
62 texid = (GLuint) *get_values;
63 *get_values = (%s) crStateTextureHWIDtoID(texid);
64 }
65 else if (GL_CURRENT_PROGRAM==pname)
66 {
67 GLuint programid;
68 CRASSERT(tablesize/sizeof(%s)==1);
69 programid = (GLuint) *get_values;
70 *get_values = (%s) crStateGLSLProgramHWIDtoID(programid);
71 }
72 else if (GL_FRAMEBUFFER_BINDING_EXT==pname
73 ||GL_READ_FRAMEBUFFER_BINDING==pname)
74 {
75 GLuint fboid;
76 CRASSERT(tablesize/sizeof(%s)==1);
77 fboid = (GLuint) *get_values;
78 if (crServerIsRedirectedToFBO()
79 && (fboid==cr_server.curClient->currentMural->aidFBOs[0]
80 || fboid==cr_server.curClient->currentMural->aidFBOs[1]))
81 {
82 fboid = 0;
83 }
84 else
85 {
86 fboid = crStateFBOHWIDtoID(fboid);
87 }
88 *get_values = (%s) fboid;
89 }
90 else if (GL_READ_BUFFER==pname)
91 {
92 if (crServerIsRedirectedToFBO()
93 && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurReadBuffer)
94 && !crStateGetCurrent()->framebufferobject.readFB)
95 {
96 *get_values = (%s) crStateGetCurrent()->buffer.readBuffer;
97 Assert(crStateGetCurrent()->buffer.readBuffer == GL_BACK || crStateGetCurrent()->buffer.readBuffer == GL_FRONT);
98 }
99 }
100 else if (GL_DRAW_BUFFER==pname)
101 {
102 if (crServerIsRedirectedToFBO()
103 && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurDrawBuffer)
104 && !crStateGetCurrent()->framebufferobject.drawFB)
105 {
106 *get_values = (%s) crStateGetCurrent()->buffer.drawBuffer;
107 Assert(crStateGetCurrent()->buffer.drawBuffer == GL_BACK || crStateGetCurrent()->buffer.drawBuffer == GL_FRONT);
108 }
109 }
110 else if (GL_RENDERBUFFER_BINDING_EXT==pname)
111 {
112 GLuint rbid;
113 CRASSERT(tablesize/sizeof(%s)==1);
114 rbid = (GLuint) *get_values;
115 *get_values = (%s) crStateRBOHWIDtoID(rbid);
116 }
117 else if (GL_ARRAY_BUFFER_BINDING_ARB==pname
118 || GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB==pname
119 || GL_VERTEX_ARRAY_BUFFER_BINDING_ARB==pname
120 || GL_NORMAL_ARRAY_BUFFER_BINDING_ARB==pname
121 || GL_COLOR_ARRAY_BUFFER_BINDING_ARB==pname
122 || GL_INDEX_ARRAY_BUFFER_BINDING_ARB==pname
123 || GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB==pname
124 || GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB==pname
125 || GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB==pname
126 || GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB==pname
127 || GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB==pname)
128 {
129 GLuint bufid;
130 CRASSERT(tablesize/sizeof(%s)==1);
131 bufid = (GLuint) *get_values;
132 *get_values = (%s) crStateBufferHWIDtoID(bufid);
133 }
134 else if (GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS==pname)
135 {
136 if (CR_MAX_TEXTURE_UNITS < (GLuint)*get_values)
137 {
138 *get_values = (%s)CR_MAX_TEXTURE_UNITS;
139 }
140 }
141 """ % (types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index])
142 print '\tcrServerReturnValue( get_values, tablesize );'
143 print '\tcrFree(get_values);'
144 print '}\n'
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette