Example #1
0
void PACK_APIENTRY crPackMap2fSWAP(GLenum target, GLfloat u1, 
        GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, 
        GLint vstride, GLint vorder, const GLfloat *points)
{
    unsigned char *data_ptr;
    int u,v;
    int comp;
    GLfloat *dest_data, *src_data;
    int packet_length = 
        sizeof(target) + 
        sizeof(u1) +
        sizeof(u2) +
        sizeof(uorder) +
        sizeof(ustride) +
        sizeof(v1) +
        sizeof(v2) + 
        sizeof(vorder) +
        sizeof(vstride);

    int num_components = __gl_Map2NumComponents(target);
    if (num_components < 0)
    {
        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
                                 "crPackMap2f(bad target)");
        return;
    }

    packet_length += num_components*uorder*vorder*sizeof(*points);

    data_ptr = (unsigned char *) crPackAlloc(packet_length);

    WRITE_DATA(0, GLenum, SWAP32(target));
    WRITE_DATA(4, GLuint, SWAPFLOAT(u1));
    WRITE_DATA(8, GLuint, SWAPFLOAT(u2));
    WRITE_DATA(12, GLint, SWAP32(num_components));
    WRITE_DATA(16, GLint, SWAP32(uorder));
    WRITE_DATA(20, GLuint, SWAPFLOAT(v1));
    WRITE_DATA(24, GLuint, SWAPFLOAT(v2));
    WRITE_DATA(28, GLint, SWAP32(num_components*uorder));
    WRITE_DATA(32, GLint, SWAP32(vorder));

    dest_data = (GLfloat *) (data_ptr + 36);
    src_data = (GLfloat *) points;
    for (v = 0 ; v < vorder ; v++)
    {
        for (u = 0 ; u < uorder ; u++)
        {
            for (comp = 0 ; comp < num_components ; comp++)
            {
                WRITE_DATA((unsigned char *) dest_data + comp*sizeof(*points) - data_ptr, GLuint, SWAPFLOAT(*(src_data + comp)));
            }
            dest_data += num_components;
            src_data += ustride;
        }
        src_data += vstride - ustride*uorder;
    }

    crHugePacket(CR_MAP2F_OPCODE, data_ptr);
    crPackFree(data_ptr);
}
Example #2
0
static GLboolean __handleLightModelData( GLenum pname, const GLfloat *params )
{
    CR_GET_PACKER_CONTEXT(pc);
    unsigned int packet_length = sizeof( int ) + sizeof( pname );
    unsigned int params_length = 0;
    unsigned char *data_ptr;
    switch( pname )
    {
        case GL_LIGHT_MODEL_AMBIENT:
            params_length = 4*sizeof( *params );
            break;
        case GL_LIGHT_MODEL_TWO_SIDE:
        case GL_LIGHT_MODEL_LOCAL_VIEWER:
            params_length = sizeof( *params );
            break;
        default:
            __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
                                     "crPackLightModelSWAP(bad pname)" );
            return GL_FALSE;
    }
    packet_length += params_length;
    CR_GET_BUFFERED_POINTER(pc, packet_length );
    WRITE_DATA( 0, int, SWAP32(packet_length) );
    WRITE_DATA( sizeof( int ) + 0, GLenum, SWAP32(pname) );
    WRITE_DATA( sizeof( int ) + 4, GLuint, SWAPFLOAT(params[0]) );
    if (params_length > sizeof( *params ))
    {
        WRITE_DATA( sizeof( int ) + 8, GLuint, SWAPFLOAT(params[1]) );
        WRITE_DATA( sizeof( int ) + 12, GLuint, SWAPFLOAT(params[2]) );
        WRITE_DATA( sizeof( int ) + 16, GLuint, SWAPFLOAT(params[3]) );
    }
    return GL_TRUE;
}
Example #3
0
void PACK_APIENTRY crPackMap1fSWAP(GLenum target, GLfloat u1,
        GLfloat u2, GLint stride, GLint order, const GLfloat *points)
{
    unsigned char *data_ptr;
    int packet_length = 
        sizeof(target) + 
        sizeof(u1) +
        sizeof(u2) + 
        sizeof(stride) + 
        sizeof(order);

    int num_components = __gl_Map1NumComponents(target);
    GLfloat *src_data, *dest_data;
    int u;
    int comp;

    if (num_components < 0)
    {
        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
                                 "crPackMap1f(bad target)");
        return;
    }

    packet_length += num_components * order * sizeof(*points);

    data_ptr = (unsigned char *) crPackAlloc(packet_length);

    WRITE_DATA(0, GLenum, SWAP32(target));
    WRITE_DATA(4, GLuint, SWAPFLOAT(u1));
    WRITE_DATA(8, GLuint, SWAPFLOAT(u2));
    WRITE_DATA(12, GLint, SWAP32(num_components));
    WRITE_DATA(16, GLint, SWAP32(order));

    dest_data = (GLfloat *) (data_ptr + 20);
    src_data = (GLfloat *) points;
    for (u = 0 ; u < order ; u++)
    {
        for (comp = 0 ; comp < num_components ; comp++)
        {
            WRITE_DATA((unsigned char *) dest_data + comp*sizeof(*points) - data_ptr, GLuint, SWAPFLOAT(*(src_data + comp)));
        }
        dest_data += num_components;
        src_data += stride;
    }

    crHugePacket(CR_MAP1F_OPCODE, data_ptr);
    crPackFree(data_ptr);
}
Example #4
0
void PACK_APIENTRY crPackPrioritizeTexturesSWAP( GLsizei n,
		const GLuint *textures, const GLclampf *priorities )
{
	unsigned char *data_ptr;
	int packet_length = 
		sizeof( n ) + 
		n*sizeof( *textures ) + 
		n*sizeof( *priorities );
	int i;

	data_ptr = (unsigned char *) crPackAlloc( packet_length );
	WRITE_DATA( 0, GLsizei, SWAP32(n) );
	for ( i = 0 ; i < n ; i++)
	{
		WRITE_DATA( i*sizeof(int) + 4, GLint, SWAP32(textures[i]));
	}
	for ( i = 0 ; i < n ; i++)
	{
		WRITE_DATA( i*sizeof(int) + 4 + n*sizeof( *textures ),
				GLuint, SWAPFLOAT(priorities[i]));
	}

	crHugePacket( CR_PRIORITIZETEXTURES_OPCODE, data_ptr );
	crPackFree( data_ptr );
}
Example #5
0
static void __handleTexEnvData( GLenum target, GLenum pname, const GLfloat *params )
{
	GET_PACKER_CONTEXT(pc);
	unsigned char *data_ptr;
	int num_params;
	int i;

	int packet_length = 
		sizeof( int ) + 
		sizeof( target ) + 
		sizeof( pname );

	num_params = 1;
	if ( pname == GL_TEXTURE_ENV_COLOR )
	{
		num_params = 4;
	}

	packet_length += num_params*sizeof(*params);

	GET_BUFFERED_POINTER(pc, packet_length );
	WRITE_DATA( 0, int, SWAP32(packet_length) );
	WRITE_DATA( sizeof( int ) + 0, GLenum, SWAP32(target) );
	WRITE_DATA( sizeof( int ) + 4, GLenum, SWAP32(pname) );
	for ( i = 0 ; i < num_params ; i++)
	{
		WRITE_DATA( (i+1)*sizeof( int ) + 8, GLuint, SWAPFLOAT( params[i] ) );
	}
}
Example #6
0
static GLboolean __handleLightData( GLenum light, GLenum pname, const GLfloat *params )
{
    CR_GET_PACKER_CONTEXT(pc);
    unsigned int packet_length = sizeof( int ) + sizeof( light ) + sizeof( pname );
    unsigned int params_length = 0;
    unsigned char *data_ptr;
    switch( pname )
    {
        case GL_AMBIENT:
        case GL_DIFFUSE:
        case GL_SPECULAR:
        case GL_POSITION:
            params_length = 4*sizeof( *params );
            break;
        case GL_SPOT_DIRECTION:
            params_length = 3*sizeof( *params );
            break;
        case GL_SPOT_EXPONENT:
        case GL_SPOT_CUTOFF:
        case GL_CONSTANT_ATTENUATION:
        case GL_LINEAR_ATTENUATION:
        case GL_QUADRATIC_ATTENUATION:
            params_length = sizeof( *params );
            break;
        default:
            __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
                                     "crPackLightSWAP(bad pname)" );
            return GL_FALSE;
    }
    packet_length += params_length;
    CR_GET_BUFFERED_POINTER(pc, packet_length );
    WRITE_DATA( 0, int, SWAP32(packet_length) );
    WRITE_DATA( sizeof( int ) + 0, GLenum, SWAP32(light) );
    WRITE_DATA( sizeof( int ) + 4, GLenum, SWAP32(pname) );
    WRITE_DATA( sizeof( int ) + 8, GLuint, SWAPFLOAT(params[0]) );
    if (params_length > sizeof( *params ))
    {
        WRITE_DATA( sizeof( int ) + 12, GLuint, SWAPFLOAT(params[1]) );
        WRITE_DATA( sizeof( int ) + 16, GLuint, SWAPFLOAT(params[2]) );
    }
    if (params_length > 3*sizeof( *params ))
    {
        WRITE_DATA( sizeof( int ) + 20, GLuint, SWAPFLOAT(params[3]) );
    }
    return GL_TRUE;
}
Example #7
0
static GLboolean __handleFogData( GLenum pname, const GLfloat *params )
{
	GET_PACKER_CONTEXT(pc);
	int params_length = 0;
	int packet_length = sizeof( int ) + sizeof( pname );
	unsigned char *data_ptr;
	switch( pname )
	{
		case GL_FOG_MODE:
		case GL_FOG_DENSITY:
		case GL_FOG_START:
		case GL_FOG_END:
		case GL_FOG_INDEX:
			params_length = sizeof( *params );
			break;
		case GL_FOG_COLOR:
			params_length = 4*sizeof( *params );
			break;
		default:
			params_length = __packFogParamsLength( pname );
			if (!params_length)
			{
				char msg[100];
				sprintf(msg, "Invalid pname in Fog: %d", (int) pname );
				__PackError( __LINE__, __FILE__, GL_INVALID_ENUM, msg);
				return GL_FALSE;
			}
			break;
	}
	packet_length += params_length;

	GET_BUFFERED_POINTER(pc, packet_length );
	WRITE_DATA( 0, int, SWAP32(packet_length) );
	WRITE_DATA( 4, GLenum, SWAP32(pname) );
	WRITE_DATA( 8, GLuint, SWAPFLOAT(params[0]) );
	if (packet_length > 12)
	{
		WRITE_DATA( 12, GLuint, SWAPFLOAT(params[1]) );
		WRITE_DATA( 16, GLuint, SWAPFLOAT(params[2]) );
		WRITE_DATA( 20, GLuint, SWAPFLOAT(params[3]) );
	}
	return GL_TRUE;
}
Example #8
0
static void hoare_select_f (float *f, int i0, int i1, int q)
{
  float pivot = PERM(i0);
  int j0, j1, lim;
  assert (i1 - i0 > 1 && q > i0 && q < i1);

  for (j0 = i0, j1 = i1 ; 1 ; ) {
    while (j0 < j1 - 1) {
      j0++;
      if (PERM(j0) > pivot)
        goto endseginf;
    }
    lim = j1;
    break;
  endseginf:
    while (j1 - 1 > j0) {
      j1--;
      if (PERM(j1) <= pivot)
        goto endsegsup;
    }
    lim = j0;
    break;
  endsegsup:
    SWAPFLOAT (j0, j1);
  }
  assert (lim > i0);
  if (lim == i1) {
    SWAPFLOAT (i0, i1 - 1);
    lim = i1 - 1;
  }
  if (lim == q)
    return;                     /* mission accomplished */
  if (q < lim)
    hoare_select_f (f, i0, lim, q);
  else
    hoare_select_f (f, lim, i1, q);
}
Example #9
0
static GLboolean __handleTexParameterData( GLenum target, GLenum pname, const GLfloat *params )
{
	GET_PACKER_CONTEXT(pc);
	unsigned char *data_ptr;
	int packet_length = sizeof( int ) + sizeof( target ) + sizeof( pname );
	int num_params = 0;
	int i;

	switch( pname )
	{

	case GL_TEXTURE_MIN_FILTER:
	case GL_TEXTURE_MAG_FILTER:
	case GL_TEXTURE_WRAP_R:
	case GL_TEXTURE_WRAP_S:
	case GL_TEXTURE_WRAP_T:
#ifdef GL_TEXTURE_PRIORITY
	case GL_TEXTURE_PRIORITY:
#endif
	  num_params = 1;
		break;
	case GL_TEXTURE_MAX_ANISOTROPY_EXT:
		num_params = 1;
		break;
	case GL_TEXTURE_MIN_LOD:
	case GL_TEXTURE_MAX_LOD:
	case GL_TEXTURE_BASE_LEVEL:
	case GL_TEXTURE_MAX_LEVEL:
		num_params = 1;
		break;
	case GL_TEXTURE_BORDER_COLOR:
		num_params = 4;
		break;
#ifdef CR_ARB_shadow
	case GL_TEXTURE_COMPARE_MODE_ARB:
	case GL_TEXTURE_COMPARE_FUNC_ARB:
		num_params = 1;
		break;
#endif
#ifdef CR_ARB_shadow_ambient
	case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
		num_params = 1;
		break;
#endif
#ifdef CR_ARB_depth_texture
	case GL_DEPTH_TEXTURE_MODE_ARB:
		num_params = 1;
		break;
#endif
#ifdef CR_SGIS_generate_mipmap
	case GL_GENERATE_MIPMAP_SGIS:
		num_params = 1;
		break;
#endif
		default:
			num_params = __packTexParameterNumParams( pname );
			if (!num_params)
			{
				__PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
										 "crPackTexParameter(bad pname)" );
				return GL_FALSE;
			}
	}
	packet_length += num_params * sizeof(*params);

	GET_BUFFERED_POINTER(pc, packet_length );
	WRITE_DATA( 0, int, SWAP32(packet_length) );
	WRITE_DATA( sizeof( int ) + 0, GLenum, SWAP32(target) );
	WRITE_DATA( sizeof( int ) + 4, GLenum, SWAP32(pname) );
	for ( i = 0 ; i < num_params ; i++)
	{
		WRITE_DATA( (i+1)*sizeof( int ) + 8, GLuint, SWAPFLOAT(params[i]) );
	}
	return GL_TRUE;
}