<!doctype html public "-//W3C//DTD W3 HTML//EN">
<html><head><style type="text/css"><!--
blockquote, dl, ul, ol, li { padding-top: 0 ; padding-bottom: 0 }
--></style><title>basic pointer question</title></head><body>
<div>ok,</div>
<div><br></div>
<div>...it's time I need to admit I'm a self-taught hobby programmer,
cuz I've run into (perhaps) a basic problem that I can't seem to
figure out, having to do with pointers and such...</div>
<div><br></div>
<div>...here is the original version of the function:</div>
<div><font size="-1" color="#760F50">void</font><font size="-1"
color="#000000"> moff_defpoints(ubyte * p)</font></div>
<div><font size="-1" color="#000000">{<br>
<x-tab> </x-tab></font><font
size="-1" color="#760F50">int</font><font size="-1" color="#000000">
n;</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab></font><font size="-1" color="#760F50">int</font><font
size="-1" color="#000000"> nverts = w(p</font><font size="-1"
color="#0000FF">+8</font><font size="-1"
color="#000000">);</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab></font><font size="-1" color="#760F50">int</font><font
size="-1" color="#000000"> offset = w(p</font><font size="-1"
color="#0000FF">+16</font><font size="-1"
color="#000000">);</font></div>
<div><font size="-1" color="#000000"><br>
<x-tab> </x-tab>ubyte *
normcount = p</font><font size="-1" color="#0000FF">+20</font><font
size="-1" color="#000000">;<br>
vector *src =
vp(p+offset);<br>
<br>
<x-tab> </x-tab>Assert( nverts < MAX_POLYGON_VECS
);<br>
<x-tab> </x-tab></font><font size="-1"
color="#236E25">// Assert( nnorms < MAX_POLYGON_NORMS );</font><br>
<font size="-1" color="#000000"></font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab></font><font size="-1" color="#760F50">for</font><font
size="-1" color="#000000"> (n=</font><font size="-1"
color="#0000FF">0</font><font size="-1" color="#000000">; n<nverts;
n++ )<x-tab>
</x-tab>{</font></div>
<div><font size="-1" color="#000000"><br></font></div>
<div><font size="-1"
color="#000000"
> </font
><font size="-1" color="#236E25"> Interp_verts[n] = src;</font></div>
<div><font size="-1"
color="#000000"
>
src += normcount[n]</font><font size="-1"
color="#0000FF">+1</font><font size="-1"
color="#000000">;</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab>}</font></div>
<div><font size="-1" color="#000000">}</font></div>
<div>...this seems to step through a set of vertex vectors
(xyz.x,y,z)and assign them to an externally declared global vector
"Interp_verts[n]"...ByteSwapping needs to be done on all
data coming from the passed in pointer "p", so I initially
tried swapping the x,y, and z floats passed into the "src"
vector by doing src->xyz.x = LoadLEFloat( &src->xyz.x
);</div>
<div><br></div>
<div>...then I noticed that by doing this, I'm actually changing the
value in the passed in pointer, and so future references get swapped
multiple times, which isn't good!</div>
<div><br></div>
<div>So, I tried to create a local "buffer" vector that
would hold the swapped floats, put them into a buffer vector, then
pass that to the global vector Interp_verts[n]...but this isn't
happening, and I'm not sure where I've gone wrong? Can someone
get me straight on this?</div>
<div><br></div>
<div><font size="-1" color="#760F50">void</font><font size="-1"
color="#000000"> moff_defpoints(ubyte * p)</font></div>
<div><font size="-1" color="#000000">{<br>
<x-tab> </x-tab></font><font
size="-1" color="#760F50">int</font><font size="-1" color="#000000">
n;</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab></font><font size="-1" color="#760F50">int</font><font
size="-1" color="#000000"> nverts = SDL_SwapLE32( w(p</font><font
size="-1" color="#0000FF">+8</font><font size="-1"
color="#000000">));</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab></font><font size="-1" color="#760F50">int</font><font
size="-1" color="#000000"> offset = SDL_SwapLE32( w(p</font><font
size="-1" color="#0000FF">+16</font><font size="-1"
color="#000000">));<br>
</font><font size="-1"
color="#236E25"> //int nverts = w(p+8);</font><font size="-1"
color="#000000"><br>
</font><font size="-1"
color="#236E25"> //int offset = w(p+16);</font><font size="-1"
color="#000000"><br>
</font><font size="-1"
color="#760F50"> float</font><font size="-1" color="#000000"><x-tab>
</x-tab>srcx, srcy, srcz;<br>
vector *tmp;<br>
<br>
<x-tab> </x-tab>ubyte * normcount = p</font><font
size="-1" color="#0000FF">+20</font><font size="-1"
color="#000000">;<br>
vector *src =
vp(p+offset);<br>
<br>
<x-tab> </x-tab>Assert( nverts < MAX_POLYGON_VECS
);<br>
<x-tab> </x-tab></font><font size="-1"
color="#236E25">// Assert( nnorms < MAX_POLYGON_NORMS
);</font><font size="-1" color="#000000"><br>
<br>
<x-tab>
</x-tab></font><font size="-1" color="#760F50">for</font><font
size="-1" color="#000000"> (n=</font><font size="-1"
color="#0000FF">0</font><font size="-1" color="#000000">; n<nverts;
n++ )<x-tab>
</x-tab>{</font></div>
<div><font size="-1"
color="#000000"
>
srcx = LoadLEFloat( &src->xyz.x );<x-tab>
</x-tab></font></div>
<div><font size="-1"
color="#000000"
>
srcy = LoadLEFloat( &src->xyz.y );<br>
srcz = LoadLEFloat( &src->xyz.z );<br>
tmp->xyz.x = srcx;<br>
tmp->xyz.y = srcy;<br>
tmp->xyz.z = srcz;<br>
<br>
</font
><font size="-1" color="#236E25"> //Interp_verts[n] =
src;</font><font size="-1" color="#000000"><br>
Interp_verts[n] = tmp;</font></div>
<div><font size="-1"
color="#000000"
>
normcount[n] = SDL_SwapLE16( normcount[n] );</font></div>
<div><font size="-1" color="#000000"><br>
src
+= normcount[n]</font><font size="-1" color="#0000FF">+1</font><font
size="-1" color="#000000">;</font></div>
<div><font size="-1"
color="#000000"><x-tab>
</x-tab>}<br>
}</font></div>
<div><br></div>
<div>Tanx,</div>
<div>jamie</div>
</body>
</html>