Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:dreveman:openSUSE:11.1:cr
cr
cr-pack-expand-array-element-fix.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cr-pack-expand-array-element-fix.diff of Package cr
commit f9ec7dde89d08c3298a5e067873fcf5387b48716 Author: David Reveman <davidr@novell.com> Date: Fri Apr 3 02:52:23 2009 -0400 Add proper CR_NV_vertex_program and CR_ARB_vertex_buffer_object support to crPackExpandArrayElement. diff --git a/packer/pack_client.c b/packer/pack_client.c index f816a8d..29c64a3 100644 --- a/packer/pack_client.c +++ b/packer/pack_client.c @@ -7,6 +7,8 @@ #include "packer.h" #include "cr_opcodes.h" #include "cr_version.h" +typedef struct CRContext CRContext; +#include "state/cr_current.h" /* * Expand glArrayElement into crPackVertex/Color/Normal/etc. @@ -17,71 +19,41 @@ crPackExpandArrayElement(GLint index, CRClientState *c) unsigned char *p; int unit; - if (c->array.e.enabled) - { - crPackEdgeFlagv(c->array.e.p + index * c->array.e.stride); - } - for (unit = 0; unit < CR_MAX_TEXTURE_UNITS; unit++) +#ifdef CR_NV_vertex_program + int attr; +#endif + + if (c->array.n.enabled) { - if (c->array.t[unit].enabled) + p = c->array.n.p + index * c->array.n.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.n.buffer && c->array.n.buffer->data) { - p = c->array.t[unit].p + index * c->array.t[unit].stride; - switch (c->array.t[unit].type) - { - case GL_SHORT: - switch (c->array.t[c->curClientTextureUnit].size) - { - case 1: crPackMultiTexCoord1svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; - case 2: crPackMultiTexCoord2svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; - case 3: crPackMultiTexCoord3svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; - case 4: crPackMultiTexCoord4svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; - } - break; - case GL_INT: - switch (c->array.t[c->curClientTextureUnit].size) - { - case 1: crPackMultiTexCoord1ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; - case 2: crPackMultiTexCoord2ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; - case 3: crPackMultiTexCoord3ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; - case 4: crPackMultiTexCoord4ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; - } - break; - case GL_FLOAT: - switch (c->array.t[c->curClientTextureUnit].size) - { - case 1: crPackMultiTexCoord1fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; - case 2: crPackMultiTexCoord2fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; - case 3: crPackMultiTexCoord3fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; - case 4: crPackMultiTexCoord4fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; - } - break; - case GL_DOUBLE: - switch (c->array.t[c->curClientTextureUnit].size) - { - case 1: crPackMultiTexCoord1dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; - case 2: crPackMultiTexCoord2dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; - case 3: crPackMultiTexCoord3dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; - case 4: crPackMultiTexCoord4dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; - } - break; - } + p = (unsigned char *)(c->array.n.buffer->data) + (unsigned long)p; } - } /* loop over texture units */ +#endif - if (c->array.i.enabled) - { - p = c->array.i.p + index * c->array.i.stride; - switch (c->array.i.type) + switch (c->array.n.type) { - case GL_SHORT: crPackIndexsv((GLshort *)p); break; - case GL_INT: crPackIndexiv((GLint *)p); break; - case GL_FLOAT: crPackIndexfv((GLfloat *)p); break; - case GL_DOUBLE: crPackIndexdv((GLdouble *)p); break; + case GL_BYTE: crPackNormal3bv((GLbyte *)p); break; + case GL_SHORT: crPackNormal3sv((GLshort *)p); break; + case GL_INT: crPackNormal3iv((GLint *)p); break; + case GL_FLOAT: crPackNormal3fv((GLfloat *)p); break; + case GL_DOUBLE: crPackNormal3dv((GLdouble *)p); break; } } if (c->array.c.enabled) { p = c->array.c.p + index * c->array.c.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.c.buffer && c->array.c.buffer->data) + { + p = (unsigned char *)(c->array.c.buffer->data) + (unsigned long)p; + } +#endif + switch (c->array.c.type) { case GL_BYTE: @@ -142,22 +114,18 @@ crPackExpandArrayElement(GLint index, CRClientState *c) break; } } - if (c->array.n.enabled) - { - p = c->array.n.p + index * c->array.n.stride; - switch (c->array.n.type) - { - case GL_BYTE: crPackNormal3bv((GLbyte *)p); break; - case GL_SHORT: crPackNormal3sv((GLshort *)p); break; - case GL_INT: crPackNormal3iv((GLint *)p); break; - case GL_FLOAT: crPackNormal3fv((GLfloat *)p); break; - case GL_DOUBLE: crPackNormal3dv((GLdouble *)p); break; - } - } #ifdef CR_EXT_secondary_color if (c->array.s.enabled) { p = c->array.s.p + index * c->array.s.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.s.buffer && c->array.s.buffer->data) + { + p = (unsigned char *)(c->array.s.buffer->data) + (unsigned long)p; + } +#endif + switch (c->array.s.type) { case GL_BYTE: @@ -179,9 +147,246 @@ crPackExpandArrayElement(GLint index, CRClientState *c) } } #endif +#ifdef CR_EXT_fog_coord + if (c->array.f.enabled) + { + p = c->array.f.p + index * c->array.f.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.f.buffer && c->array.f.buffer->data) + { + p = (unsigned char *)(c->array.f.buffer->data) + (unsigned long)p; + } +#endif + + crPackFogCoordfEXT( *((GLfloat *) p) ); + } +#endif + for (unit = 0; unit < CR_MAX_TEXTURE_UNITS; unit++) + { + if (c->array.t[unit].enabled) + { + p = c->array.t[unit].p + index * c->array.t[unit].stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.t[unit].buffer && c->array.t[unit].buffer->data) + { + p = (unsigned char *)(c->array.t[unit].buffer->data) + (unsigned long)p; + } +#endif + + switch (c->array.t[unit].type) + { + case GL_SHORT: + switch (c->array.t[unit].size) + { + case 1: crPackMultiTexCoord1svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; + case 2: crPackMultiTexCoord2svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; + case 3: crPackMultiTexCoord3svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; + case 4: crPackMultiTexCoord4svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break; + } + break; + case GL_INT: + switch (c->array.t[unit].size) + { + case 1: crPackMultiTexCoord1ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; + case 2: crPackMultiTexCoord2ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; + case 3: crPackMultiTexCoord3ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; + case 4: crPackMultiTexCoord4ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break; + } + break; + case GL_FLOAT: + switch (c->array.t[unit].size) + { + case 1: crPackMultiTexCoord1fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; + case 2: crPackMultiTexCoord2fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; + case 3: crPackMultiTexCoord3fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; + case 4: crPackMultiTexCoord4fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break; + } + break; + case GL_DOUBLE: + switch (c->array.t[unit].size) + { + case 1: crPackMultiTexCoord1dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; + case 2: crPackMultiTexCoord2dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; + case 3: crPackMultiTexCoord3dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; + case 4: crPackMultiTexCoord4dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break; + } + break; + } + } + } + if (c->array.i.enabled) + { + p = c->array.i.p + index * c->array.i.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.i.buffer && c->array.i.buffer->data) + { + p = (unsigned char *)(c->array.i.buffer->data) + (unsigned long)p; + } +#endif + + switch (c->array.i.type) + { + case GL_SHORT: crPackIndexsv((GLshort *)p); break; + case GL_INT: crPackIndexiv((GLint *)p); break; + case GL_FLOAT: crPackIndexfv((GLfloat *)p); break; + case GL_DOUBLE: crPackIndexdv((GLdouble *)p); break; + } + } + if (c->array.e.enabled) + { + p = c->array.e.p + index * c->array.e.stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.e.buffer && c->array.e.buffer->data) + { + p = (unsigned char *)(c->array.e.buffer->data) + (unsigned long)p; + } +#endif + + crPackEdgeFlagv(p); + } + +#ifdef CR_NV_vertex_program + for (attr = 1; attr < VERT_ATTRIB_MAX; attr++) + { + if (c->array.a[attr].enabled) + { + p = c->array.a[attr].p + index * c->array.a[attr].stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.a[attr].buffer && c->array.a[attr].buffer->data) + { + p = (unsigned char *)(c->array.a[attr].buffer->data) + (unsigned long)p; + } +#endif + + switch (c->array.a[attr].type) + { + case GL_SHORT: + switch (c->array.a[attr].size) + { + case 1: crPackVertexAttrib1svARB(attr, (GLshort *)p); break; + case 2: crPackVertexAttrib2svARB(attr, (GLshort *)p); break; + case 3: crPackVertexAttrib3svARB(attr, (GLshort *)p); break; + case 4: + if (c->array.a[attr].normalized) + crPackVertexAttrib4NsvARB(attr, (GLshort *)p); + else + crPackVertexAttrib4svARB(attr, (GLshort *)p); + break; + } + break; + case GL_INT: + switch (c->array.a[attr].size) + { + case 1: crPackVertexAttrib1fARB(attr, ((GLint *) p)[0]); break; + case 2: crPackVertexAttrib2fARB(attr, ((GLint *) p)[0], ((GLint *) p)[1]); break; + case 3: crPackVertexAttrib3fARB(attr, ((GLint *) p)[0], ((GLint *) p)[1], ((GLint *) p)[2]); break; + case 4: + if (c->array.a[attr].normalized) + crPackVertexAttrib4NivARB(attr, (GLint *) p); + else + crPackVertexAttrib4ivARB(attr, (GLint *) p); + break; + } + break; + case GL_FLOAT: + switch (c->array.a[attr].size) + { + case 1: crPackVertexAttrib1fvARB(attr, (GLfloat *)p); break; + case 2: crPackVertexAttrib2fvARB(attr, (GLfloat *)p); break; + case 3: crPackVertexAttrib3fvARB(attr, (GLfloat *)p); break; + case 4: crPackVertexAttrib4fvARB(attr, (GLfloat *)p); break; + } + break; + case GL_DOUBLE: + switch (c->array.a[attr].size) + { + case 1: crPackVertexAttrib1dvARB(attr, (GLdouble *)p); break; + case 2: crPackVertexAttrib2dvARB(attr, (GLdouble *)p); break; + case 3: crPackVertexAttrib3dvARB(attr, (GLdouble *)p); break; + case 4: crPackVertexAttrib4dvARB(attr, (GLdouble *)p); break; + } + break; + } + } + } + if (c->array.a[0].enabled) + { + p = c->array.a[0].p + index * c->array.a[0].stride; + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.a[0].buffer && c->array.a[0].buffer->data) + { + p = (unsigned char *)(c->array.a[0].buffer->data) + (unsigned long)p; + } +#endif + + switch (c->array.a[0].type) + { + case GL_SHORT: + switch (c->array.a[0].size) + { + case 1: crPackVertexAttrib1svARBBBOX_COUNT(0, (GLshort *)p); break; + case 2: crPackVertexAttrib2svARBBBOX_COUNT(0, (GLshort *)p); break; + case 3: crPackVertexAttrib3svARBBBOX_COUNT(0, (GLshort *)p); break; + case 4: + if (c->array.a[0].normalized) + crPackVertexAttrib4NsvARBBBOX_COUNT(0, (GLshort *)p); + else + crPackVertexAttrib4svARBBBOX_COUNT(0, (GLshort *)p); + break; + } + break; + case GL_INT: + switch (c->array.a[0].size) + { + case 1: crPackVertexAttrib1fARBBBOX_COUNT(0, ((GLint *) p)[0]); break; + case 2: crPackVertexAttrib2fARBBBOX_COUNT(0, ((GLint *) p)[0], ((GLint *) p)[1]); break; + case 3: crPackVertexAttrib3fARBBBOX_COUNT(0, ((GLint *) p)[0], ((GLint *) p)[1], ((GLint *) p)[2]); break; + case 4: + if (c->array.a[0].normalized) + crPackVertexAttrib4NivARBBBOX_COUNT(0, (GLint *) p); + else + crPackVertexAttrib4ivARBBBOX_COUNT(0, (GLint *) p); + break; + } + break; + case GL_FLOAT: + switch (c->array.a[0].size) + { + case 1: crPackVertexAttrib1fvARBBBOX_COUNT(0, (GLfloat *)p); break; + case 2: crPackVertexAttrib2fvARBBBOX_COUNT(0, (GLfloat *)p); break; + case 3: crPackVertexAttrib3fvARBBBOX_COUNT(0, (GLfloat *)p); break; + case 4: crPackVertexAttrib4fvARBBBOX_COUNT(0, (GLfloat *)p); break; + } + break; + case GL_DOUBLE: + switch (c->array.a[0].size) + { + case 1: crPackVertexAttrib1dvARBBBOX_COUNT(0, (GLdouble *)p); break; + case 2: crPackVertexAttrib2dvARBBBOX_COUNT(0, (GLdouble *)p); break; + case 3: crPackVertexAttrib3dvARBBBOX_COUNT(0, (GLdouble *)p); break; + case 4: crPackVertexAttrib4dvARBBBOX_COUNT(0, (GLdouble *)p); break; + } + break; + } + } + else +#endif if (c->array.v.enabled) { p = c->array.v.p + (index * c->array.v.stride); + +#ifdef CR_ARB_vertex_buffer_object + if (c->array.v.buffer && c->array.v.buffer->data) + { + p = (unsigned char *)(c->array.v.buffer->data) + (unsigned long)p; + } +#endif switch (c->array.v.type) { case GL_SHORT:
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor