<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Patrick, and others.</div><div><br></div><div>You got it right, this is what I mean and its not news but every day practice. When I choose to use 4-byte floats because </div><div>they are the right precision I do not want to end up with gabs because an implementor of WebGL decides to implement </div><div>only 8-byte floats. What the hardware vendor does in the GPU is a little less concern. But the layout of the data on the</div><div>CPU side is important.</div><div><br></div><div>I saw a lot of reactions to my mail. Are you all working at midnight? There are occasions when you like to use straight, </div><div>separate arrays for points, normals tangents, etc. And there are occasions where you like to use them grouped together</div><div>in a struct. You would like to pass these arrays of structs directly as input to a shader. Also you like to have a clean way to </div><div>specify this for the GPU. </div><div><br></div><div>So this is what I mean (in C syntax), nothing new (see the famous red book) or is this stuff old school and are there</div><div>better ways.</div><div><div><br></div><div>A)</div><div><br></div><div>typedef struct</div><div>{</div><div>  GLfloat x;</div><div>  GLfloat y;</div><div>  GLfloat z;</div><div>} Vector3;</div><div><br></div><div>Vector3 points[];</div><div><div>Vector3 normals[];</div><div><div>Vector3 tangents[];</div><div><br></div><div>versus</div><div>B)</div><div><br></div><div>typedef struct</div><div>{</div><div>  Vector3 point;</div><div>  Vector3 normal;</div><div>  Vector3 tangent;</div><div>}  Vertex;</div><div><br></div><div>Vertex vertices[];</div><div><br></div><div>In C you would tell the compiler to pack the structs without gabs and compute the stride to pass them to OpenGL. How</div><div>would you specify a strong typed array of structs in Javascript and pass them efficiently to the GPU. Also you like to</div><div>access the members in Javascript by name without a lot of overhead.</div><div><br></div><div>e.g.</div><div><br></div><div>A)</div><div><br></div><div>mesh.points[i] = point;</div><div>mesh.normals[i].x = x;</div><div><br></div><div>B)</div><div><br></div><div>mesh.vertices[i].point = point;</div><div>mesh.vertices[i].normal.x = x;</div></div></div></div><div><br></div><div><br></div><div>Best regards,</div><div><br></div><div>Carl</div><div><br></div><div><br></div><br><div><div>Op 12 jan 2010, om 22:03 heeft Patrick Baggett het volgende geschreven:</div><br class="Apple-interchange-newline">I think what he's trying to say is that if you had 8-byte floats but your code assumed they were 4-byte floats, you'd end up with gaps in your data stream and wrong offset/stride calculations, none of which is news.<br>
<br>
<div class="gmail_quote">On Tue, Jan 12, 2010 at 2:02 PM, Kenneth Russell <span dir="ltr"><<a href="mailto:kbr@google.com">kbr@google.com</a>></span> wrote:<br>
<blockquote style="border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; padding-left: 1ex; position: static; z-index: auto; " class="gmail_quote">
<div class="im">On Tue, Jan 12, 2010 at 12:30 AM, Carl van Heezik <span dir="ltr"><<a href="mailto:carl@microcan.nl" target="_blank">carl@microcan.nl</a>></span> wrote:<br></div>
<div class="gmail_quote">
<div class="im">
<blockquote style="border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; padding-left: 1ex; position: static; z-index: auto; " class="gmail_quote">I see a lot discussion about the size of of GL_FLOAT. This is my opinion.<br><br>There is only one person that needs to know what the size of a variable is and that is the programmer that writes the program.<br>
He needs to know if the variable is big enough for his application. A fixed size on every platform, the same number of bytes and<br>preferable the same byte order is the best solution. If a hardware vendor decides to put a float into a double that is his choice<br>
but the interface for the programmer should be the same on every platform. There should be no gabs in buffers!!! WebGL is<br>based on OpenGL ES 2.0 which is targeted to portable devices where every byte counts. So please no gabs!! Waisting half the<br>
memory because the hardware vendor uses a double instead of a float is madness! Please keep things simple.<br></blockquote>
<div><br></div></div>
<div>There is no intent to leave gaps in buffers. The only question is whether to allow the possibility of OpenGL implementations which map GLfloat differently. On platforms that map it to a single-precision floating-point value there will be no waste of space; adjacent values in a WebGLFloatArray will be tightly packed in memory.</div>

<div><br></div>
<div>-Ken</div>
<div><br></div></div></blockquote></div><br>
</div><br></body></html>