summaryrefslogtreecommitdiffstats
path: root/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py')
-rwxr-xr-xsrc/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py
new file mode 100755
index 00000000..2195cab5
--- /dev/null
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py
@@ -0,0 +1,177 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+from __future__ import print_function
+import sys
+
+import apiutil
+
+
+apiutil.CopyrightC()
+
+print("""/* DO NOT EDIT - AUTOMATICALLY GENERATED BY packspu_beginend.py */
+#include "packspu.h"
+#include "assert.h"
+#include "cr_packfunctions.h"
+#include "packspu_proto.h"
+
+void PACKSPU_APIENTRY packspu_Begin( GLenum mode )
+{
+ CRPackBuffer *buf;
+#if CR_ARB_vertex_buffer_object
+ GET_CONTEXT(ctx);
+#else
+ GET_THREAD(thread);
+#endif
+
+ buf = &thread->BeginEndBuffer;
+
+ /* XXX comparing mode >= 0 here is not needed since mode is unsigned */
+ CRASSERT( /*mode >= GL_POINTS && */mode <= GL_POLYGON );
+
+#if CR_ARB_vertex_buffer_object
+ {
+ GLboolean serverArrays = GL_FALSE;
+ if (ctx->clientState->extensions.ARB_vertex_buffer_object)
+ serverArrays = crStateUseServerArrays();
+ if (serverArrays) {
+ CRClientState *clientState = &(ctx->clientState->client);
+ if (clientState->array.locked && !clientState->array.synced)
+ {
+ crPackLockArraysEXT(clientState->array.lockFirst, clientState->array.lockCount);
+ clientState->array.synced = GL_TRUE;
+ }
+ }
+ }
+#endif
+
+ if (pack_spu.swap)
+ {
+ crPackBeginSWAP( mode );
+ }
+ else
+ {
+ crPackBegin( mode );
+ }
+
+ if ( thread->netServer.conn->Barf ) {
+ thread->BeginEndMode = mode;
+ thread->BeginEndState = -1;
+ if ( mode == GL_LINES || mode == GL_TRIANGLES || mode == GL_QUADS || mode == GL_POLYGON )
+ {
+ CRASSERT(!buf->pack);
+
+ crPackReleaseBuffer( thread->packer );
+ buf->pack = crNetAlloc( thread->netServer.conn );
+ crPackInitBuffer( buf, buf->pack, thread->netServer.conn->buffer_size, thread->netServer.conn->mtu );
+ buf->holds_BeginEnd = 1;
+ buf->in_BeginEnd = 1;
+ crPackSetBuffer( thread->packer, buf );
+
+ thread->BeginEndState = 0;
+ }
+ }
+}
+
+void PACKSPU_APIENTRY packspu_End( void )
+{
+ GET_THREAD(thread);
+ CRPackBuffer *buf = &thread->BeginEndBuffer;
+
+ if ( thread->netServer.conn->Barf &&
+ (thread->BeginEndMode == GL_LINES
+ || thread->BeginEndMode == GL_TRIANGLES
+ || thread->BeginEndMode == GL_QUADS
+ || thread->BeginEndMode == GL_POLYGON ) )
+ {
+ CRASSERT(buf->pack);
+
+ crPackReleaseBuffer( thread->packer );
+ crPackSetBuffer( thread->packer, &thread->normBuffer );
+ if ( !crPackCanHoldBuffer( buf ) )
+ packspuFlush( (void *) thread );
+
+ crPackAppendBuffer( buf );
+ crNetFree( thread->netServer.conn, buf->pack );
+ buf->pack = NULL;
+ }
+
+ if (pack_spu.swap)
+ {
+ crPackEndSWAP();
+ }
+ else
+ {
+ crPackEnd();
+ }
+}
+
+static void DoVertex( void )
+{
+ GET_THREAD(thread);
+ CRPackBuffer *buf = &thread->BeginEndBuffer;
+ CRPackBuffer *gbuf = &thread->normBuffer;
+ int num_data;
+ int num_opcode;
+
+ /*crDebug( "really doing Vertex" );*/
+ crPackReleaseBuffer( thread->packer );
+ num_data = buf->data_current - buf->data_start;
+ num_opcode = buf->opcode_start - buf->opcode_current;
+ crPackSetBuffer( thread->packer, gbuf );
+ if ( !crPackCanHoldBuffer( buf ) )
+ /* doesn't hold, first flush gbuf*/
+ packspuFlush( (void *) thread );
+
+ crPackAppendBuffer( buf );
+ crPackReleaseBuffer( thread->packer );
+ crPackSetBuffer( thread->packer, buf );
+ crPackResetPointers(thread->packer);
+}
+
+static void RunState( void )
+{
+ GET_THREAD(thread);
+ if (! thread->netServer.conn->Barf ) return;
+ if (thread->BeginEndState == -1) return;
+ switch(thread->BeginEndMode) {
+ case GL_POLYGON:
+ return;
+ case GL_LINES:
+ thread->BeginEndState = (thread->BeginEndState + 1) % 2;
+ if (thread->BeginEndState)
+ return;
+ break;
+ case GL_TRIANGLES:
+ thread->BeginEndState = (thread->BeginEndState + 1) % 3;
+ if (thread->BeginEndState)
+ return;
+ break;
+ case GL_QUADS:
+ thread->BeginEndState = (thread->BeginEndState + 1) % 4;
+ if (thread->BeginEndState)
+ return;
+ break;
+ }
+ DoVertex();
+}
+""")
+
+keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
+
+for func_name in apiutil.AllSpecials( "packspu_vertex" ):
+ params = apiutil.Parameters(func_name)
+ print('void PACKSPU_APIENTRY packspu_%s(%s)' % ( func_name, apiutil.MakeDeclarationString(params) ))
+ print('{')
+ print('\tif (pack_spu.swap)')
+ print('\t{')
+ print('\t\tcrPack%sSWAP(%s);' % ( func_name, apiutil.MakeCallString( params ) ))
+ print('\t}')
+ print('\telse')
+ print('\t{')
+ print('\t\tcrPack%s(%s);' % ( func_name, apiutil.MakeCallString( params ) ))
+ print('\t}')
+ print('\tRunState();')
+ print('}')