void REPLICATESPU_APIENTRY replicatespu_End( void ) { GET_THREAD(thread); CRPackBuffer *buf = &thread->BeginEndBuffer; if ( thread->server.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 ) ) replicatespuFlush( (void *) thread ); crPackAppendBuffer( buf ); crNetFree( thread->server.conn, buf->pack ); buf->pack = NULL; } if (thread->currentContext->displayListMode != GL_FALSE) { crDLMCompileEnd(); } if (replicate_spu.swap) { crPackEndSWAP(); } else { crPackEnd(); } }
void crPackExpandDrawArrays(GLenum mode, GLint first, GLsizei count, CRClientState *c) { int i; if (count < 0) { __PackError(__LINE__, __FILE__, GL_INVALID_VALUE, "crPackDrawArrays(negative count)"); return; } if (mode > GL_POLYGON) { __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, "crPackDrawArrays(bad mode)"); return; } crPackBegin(mode); for (i=0; i<count; i++) { crPackExpandArrayElement(first + i, c); } crPackEnd(); }
void TILESORTSPU_APIENTRY tilesortspu_End( void ) { GET_CONTEXT(ctx); CRLimitsState *limits = &(ctx->limits); GLenum dlMode = thread->currentContext->displayListMode; if (dlMode != GL_FALSE) { /* just creating and/or compiling display lists */ if (tilesort_spu.lazySendDLists) crDLMCompileEnd(); else if (tilesort_spu.swap) crPackEndSWAP(); else crPackEnd(); return; } if (thread->pinchState.isLoop) { unsigned int i; /* XXX \todo vertex attribs */ for (i = 0 ; i < limits->maxTextureUnits; i++) { if (i == 0) { if (tilesort_spu.swap) { crPackTexCoord4fvSWAP ( (GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_TEX0 + i][0])); } else { crPackTexCoord4fv ( (GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_TEX0 + i][0])); } } else { if (tilesort_spu.swap) { crPackMultiTexCoord4fvARBSWAP ( i + GL_TEXTURE0_ARB, (GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_TEX0 + i][0])); } else { crPackMultiTexCoord4fvARB ( i + GL_TEXTURE0_ARB, (GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_TEX0 + i][0])); } } } if (tilesort_spu.swap) { crPackNormal3fvSWAP((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_NORMAL][0])); } else { crPackNormal3fv((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_NORMAL][0])); } if (tilesort_spu.swap) { crPackEdgeFlagSWAP(thread->pinchState.vtx->edgeFlag); } else { crPackEdgeFlag(thread->pinchState.vtx->edgeFlag); } if (tilesort_spu.swap) { crPackColor4fvSWAP((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_COLOR0][0])); } else { crPackColor4fv((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_COLOR0][0])); } if (tilesort_spu.swap) { crPackVertex4fvBBOX_COUNTSWAP((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_POS][0])); } else { crPackVertex4fvBBOX_COUNT((GLfloat *) &(thread->pinchState.vtx->attrib[VERT_ATTRIB_POS][0])); } thread->pinchState.isLoop = 0; } if (tilesort_spu.swap) { crPackEndSWAP(); } else { crPackEnd(); } crStateEnd(); }
/** * Expand glDrawElements into crPackBegin/Vertex/End, etc commands. * Note: if mode==999, don't call glBegin/glEnd. */ void crPackExpandDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c) { int i; GLubyte *p = (GLubyte *)indices; #ifdef CR_ARB_vertex_buffer_object CRBufferObject *elementsBuffer = crStateGetCurrent()->bufferobject.elementsBuffer; #endif if (count < 0) { __PackError(__LINE__, __FILE__, GL_INVALID_VALUE, "crPackDrawElements(negative count)"); return; } if (mode > GL_POLYGON && mode != 999) { __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, "crPackDrawElements(bad mode)"); return; } if (type != GL_UNSIGNED_BYTE && type != GL_UNSIGNED_SHORT && type != GL_UNSIGNED_INT) { __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, "crPackDrawElements(bad type)"); return; } #ifdef CR_ARB_vertex_buffer_object if (elementsBuffer && elementsBuffer->data) { p = (unsigned char *)(elementsBuffer->data) + (unsigned long)p; } #endif if (mode != 999) crPackBegin(mode); //crDebug("crPackExpandDrawElements mode:0x%x, count:%d, type:0x%x", mode, count, type); switch (type) { case GL_UNSIGNED_BYTE: for (i=0; i<count; i++) { crPackExpandArrayElement((GLint) *p++, c); } break; case GL_UNSIGNED_SHORT: for (i=0; i<count; i++) { crPackExpandArrayElement((GLint) * (GLushort *) p, c); p+=sizeof (GLushort); } break; case GL_UNSIGNED_INT: for (i=0; i<count; i++) { crPackExpandArrayElement((GLint) * (GLuint *) p, c); p+=sizeof (GLuint); } break; default: crError( "this can't happen: array_spu.self.DrawElements" ); break; } if (mode != 999) crPackEnd(); }