pack_client.c revision fcded3b75bf930c68355adc3e3757e35e9cabde4
/* 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]*/
/*Convert from GLbyte to GLfloat in [-1.f,1.f]*/
/*Convert from GLuint to GLfloat in [0.f,1.f]*/
/*Convert from GLushort to GLfloat in [0.f,1.f]*/
/*Convert from GLubyte to GLfloat in [0.f,1.f]*/
{
#ifdef DEBUG_misha
#endif
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
if (!p)
{
crWarning("crPackVertexAttrib: NULL ptr!");
return;
}
{
case GL_SHORT:
{
{
case 1:
else
break;
case 2:
else
break;
case 3:
else
break;
case 4:
else
break;
}
break;
}
case GL_UNSIGNED_SHORT:
{
{
{
case 1:
break;
case 2:
break;
case 3:
crPackVertexAttrib3fARB(attr, CRP_US2F_NORM(usPtr[0]), CRP_US2F_NORM(usPtr[1]), CRP_US2F_NORM(usPtr[2]));
break;
case 4:
break;
}
}
else
{
{
case 4:
break;
case 1:
break;
}
}
break;
}
case GL_INT:
{
{
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
else
{
{
case 4:
break;
case 1:
break;
}
}
break;
}
case GL_UNSIGNED_INT:
{
{
{
case 1:
break;
case 2:
break;
case 3:
crPackVertexAttrib3fARB(attr, CRP_UI2F_NORM(uiPtr[0]), CRP_UI2F_NORM(uiPtr[1]), CRP_UI2F_NORM(uiPtr[2]));
break;
case 4:
break;
}
}
else
{
{
case 4:
break;
case 1:
break;
}
}
break;
}
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
case GL_BYTE:
{
{
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
else
{
{
case 4:
break;
case 1:
break;
}
}
break;
}
case GL_UNSIGNED_BYTE:
{
{
{
case 1:
break;
case 2:
break;
case 3:
crPackVertexAttrib3fARB(attr, CRP_UB2F_NORM(ubPtr[0]), CRP_UB2F_NORM(ubPtr[1]), CRP_UB2F_NORM(ubPtr[2]));
break;
case 4:
break;
}
}
else
{
{
case 4:
break;
case 1:
break;
}
}
break;
}
default:
crWarning("Bad datatype for vertex attribute [%d] array: 0x%x\n",
}
}
/*
* Expand glArrayElement into crPackVertex/Color/Normal/etc.
*/
void
{
unsigned char *p;
/*crDebug("crPackExpandArrayElement(%i)", index);*/
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
default:
}
}
{
#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;
default:
}
}
#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;
default:
}
}
#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;
default:
crWarning("Unhandled: crPackExpandArrayElement, array->t[%i].type 0x%x", unit, array->t[unit].type);
}
}
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
default:
}
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
crPackEdgeFlagv(p);
}
{
{
}
}
{
}
else if (pZva)
{
}
{
#ifdef CR_ARB_vertex_buffer_object
{
}
#endif
{
case GL_SHORT:
{
}
break;
case GL_INT:
{
}
break;
case GL_FLOAT:
{
}
break;
case GL_DOUBLE:
{
}
break;
default:
}
}
}
void
crPackExpandDrawArrays(GLenum mode, GLint first, GLsizei count, CRClientState *c, const GLfloat *pZva)
{
int i;
if (count < 0)
{
return;
}
if (mode > GL_POLYGON)
{
return;
}
for (i=0; i<count; i++)
{
}
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
{
#ifdef CR_ARB_vertex_buffer_object
packet_length += sizeof(GLint);
{
/*@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(GLint);
{
/*@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++)
{
}
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, const GLfloat *pZva)
{
{
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 */
{
int i, count=0;
*size = 0;
{
count++;
}
{
count++;
}
{
count++;
}
{
count++;
}
{
count++;
}
{
count++;
}
{
count++;
}
for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
{
{
count++;
}
}
for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++)
{
{
count++;
}
}
return count;
}
static void crPackLockClientPointer(GLint first, GLint count, unsigned char **ppData, int index, CRClientState *c)
{
GLint i;
{
{
crWarning("crPackLockClientPointer called when there's VBO enabled!");
}
WRITE_DATA_AI(int, index);
{
}
else
{
for (i=0; i<count; ++i)
{
}
}
}
}
{
CRContext *g = crStateGetCurrent();
CRClientState *c = &g->client;
int packet_length = sizeof(int); /*extopcode*/
int vertex_size, i, numenabled;
WRITE_DATA_AI(int, numenabled);
for (i=0; i<CRSTATECLIENT_MAX_VERTEXARRAYS; ++i)
{
}
}