pack_client.c revision 236b6e0fdf652661ff4c655314fe488998c5c17d
/* Copyright (c) 2001, Stanford University
* All rights reserved
*
* See the file LICENSE.txt for information on redistributing this software.
*/
#include "packer.h"
#include "cr_opcodes.h"
#include "cr_version.h"
#include "state/cr_limits.h"
#include "cr_glstate.h"
/*Convert from GLint to GLfloat in [-1.f,1.f]*/
/*Convert from GLshort to GLfloat in [-1.f,1.f]*/
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_SHORT:
{
case 1:
else
break;
case 2:
else
break;
case 3:
else
break;
case 4:
else
break;
}
break;
case GL_INT:
{
case 1:
else
break;
case 2:
else
break;
case 3:
else
break;
case 4:
else
break;
}
break;
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
default:
crWarning("Bad datatype for vertex attribute [%d] array: 0x%x\n",
}
}
/*
* Expand glArrayElement into crPackVertex/Color/Normal/etc.
*/
void
{
unsigned char *p;
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
}
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_BYTE:
{
}
break;
case GL_UNSIGNED_BYTE:
{
}
break;
case GL_SHORT:
{
}
break;
case GL_UNSIGNED_SHORT:
{
}
break;
case GL_INT:
{
}
break;
case GL_UNSIGNED_INT:
{
}
break;
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
}
}
#ifdef CR_EXT_secondary_color
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_BYTE:
crPackSecondaryColor3bvEXT((GLbyte *)p); break;
case GL_UNSIGNED_BYTE:
crPackSecondaryColor3ubvEXT((GLubyte *)p); break;
case GL_SHORT:
crPackSecondaryColor3svEXT((GLshort *)p); break;
case GL_UNSIGNED_SHORT:
crPackSecondaryColor3usvEXT((GLushort *)p); break;
case GL_INT:
crPackSecondaryColor3ivEXT((GLint *)p); break;
case GL_UNSIGNED_INT:
crPackSecondaryColor3uivEXT((GLuint *)p); break;
case GL_FLOAT:
crPackSecondaryColor3fvEXT((GLfloat *)p); break;
case GL_DOUBLE:
crPackSecondaryColor3dvEXT((GLdouble *)p); break;
}
}
#endif // CR_EXT_secondary_color
#ifdef CR_EXT_fog_coord
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
crPackFogCoordfEXT( *((GLfloat *) p) );
}
#endif // CR_EXT_fog_coord
{
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_SHORT:
{
}
break;
case GL_INT:
{
}
break;
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
}
}
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
}
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
crPackEdgeFlagv(p);
}
{
{
}
}
{
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_SHORT:
{
}
break;
case GL_INT:
{
}
break;
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
}
}
}
void
{
int i;
if (count < 0)
{
return;
}
if (mode > GL_POLYGON)
{
return;
}
for (i=0; i<count; i++)
{
crPackExpandArrayElement(first + i, c);
}
crPackEnd();
}
{
switch (type)
{
case GL_UNSIGNED_BYTE:
return sizeof(GLubyte);
case GL_UNSIGNED_SHORT:
return sizeof(GLushort);
case GL_UNSIGNED_INT:
return sizeof(GLuint);
default:
return 0;
}
}
void PACK_APIENTRY
{
int packet_length = sizeof(int) + sizeof(mode) + sizeof(count) + sizeof(type) + sizeof(GLintptrARB);
#ifdef CR_ARB_vertex_buffer_object
packet_length += sizeof(GLboolean);
{
/*@todo not sure it's possible, and not sure what to do*/
if (!elementsBuffer->data)
{
crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
return;
}
indexsize = 0;
}
else
#endif
{
}
#ifdef CR_ARB_vertex_buffer_object
#endif
if (indexsize>0)
{
}
}
void PACK_APIENTRY
{
#ifdef CR_ARB_vertex_buffer_object
packet_length += sizeof(GLboolean);
{
/*@todo not sure it's possible, and not sure what to do*/
if (!elementsBuffer->data)
{
crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
return;
}
indexsize = 0;
}
else
#endif
{
}
#ifdef CR_ARB_vertex_buffer_object
#endif
if (indexsize>0)
{
}
}
/**
* Expand glDrawElements into crPackBegin/Vertex/End, etc commands.
*/
void
{
int i;
#ifdef CR_ARB_vertex_buffer_object
#endif
if (count < 0)
{
"crPackDrawElements(negative count)");
return;
}
{
"crPackDrawElements(bad mode)");
return;
}
if (type != GL_UNSIGNED_BYTE &&
type != GL_UNSIGNED_SHORT &&
type != GL_UNSIGNED_INT)
{
"crPackDrawElements(bad type)");
return;
}
#ifdef CR_ARB_vertex_buffer_object
{
p = (unsigned char *)(elementsBuffer->data) + (unsigned long)p;
}
#endif
if (mode != 999)
//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++)
{
p+=sizeof (GLushort);
}
break;
case GL_UNSIGNED_INT:
for (i=0; i<count; i++)
{
p+=sizeof (GLuint);
}
break;
default:
crError( "this can't happen: array_spu.self.DrawElements" );
break;
}
if (mode != 999)
crPackEnd();
}
/**
* Convert a glDrawElements command into a sequence of ArrayElement() calls.
*/
void
{
int i;
switch (type) {
case GL_UNSIGNED_BYTE:
{
for (i = 0; i < count; i++)
crPackArrayElement(p[i]);
}
break;
case GL_UNSIGNED_SHORT:
{
for (i = 0; i < count; i++)
crPackArrayElement(p[i]);
}
break;
case GL_UNSIGNED_INT:
{
for (i = 0; i < count; i++)
crPackArrayElement(p[i]);
}
break;
default:
"crPackUnrollDrawElements(bad type)");
}
}
/*
* glDrawRangeElements, expanded into crPackBegin/Vertex/End/etc.
*/
void
crPackExpandDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c)
{
{
return;
}
}
#ifdef CR_EXT_multi_draw_arrays
/*
* Pack real DrawArrays commands.
*/
void PACK_APIENTRY
{
GLint i;
for (i = 0; i < primcount; i++) {
if (count[i] > 0) {
}
}
}
/*
* Pack with crPackBegin/Vertex/End/etc.
*/
void
{
GLint i;
for (i = 0; i < primcount; i++) {
if (count[i] > 0) {
}
}
}
/*
* Pack real DrawElements commands.
*/
void PACK_APIENTRY
{
GLint i;
for (i = 0; i < primcount; i++) {
if (count[i] > 0) {
}
}
}
/*
* Pack with crPackBegin/Vertex/End/etc.
*/
void
{
GLint i;
for (i = 0; i < primcount; i++) {
if (count[i] > 0) {
}
}
}
#endif /* CR_EXT_multi_draw_arrays */