Hi,
I've heard alot about how TLists are slow and such, so I devised an alternative way for me to store Vertex's for a Surface. Basically Vertex information is stored in a TBank and the individual values (such as xyz, rgb, normal info etc) are accessed using PeekFloat with the correct offset. I have managed to put together a working example of the code. One thing I need to know, Is my method of storing Vertex's in a TBank faster than using a TList?
Thanks,
Test.bmx:
Example.bmx:
Thanks in advance,
I've heard alot about how TLists are slow and such, so I devised an alternative way for me to store Vertex's for a Surface. Basically Vertex information is stored in a TBank and the individual values (such as xyz, rgb, normal info etc) are accessed using PeekFloat with the correct offset. I have managed to put together a working example of the code. One thing I need to know, Is my method of storing Vertex's in a TBank faster than using a TList?
Thanks,
Test.bmx:
Const OFS_VERTEXX = 0 Const OFS_VERTEXY = 4 Const OFS_VERTEXZ = 8 Const OFS_VERTEXU = 12 Const OFS_VERTEXV = 16 Const OFS_VERTEXW = 20 Const OFS_VERTEXR = 24 Const OFS_VERTEXG = 28 Const OFS_VERTEXB = 32 Const OFS_VERTEXA = 36 Const OFS_VERTEXNX = 40 Const OFS_VERTEXNY = 44 Const OFS_VERTEXNZ = 48 Type TSurface Field Vertices : TBank = CreateBank(0) Field VerticesOffset : Int Field Count : Int Field Triangles : Int Method AddTriangle(V1:TVertex, V2:TVertex, V3:TVertex) AddVertex(V1) AddVertex(V2) AddVertex(V3) End Method Method AddVertex(V:TVertex) ResizeBank(Vertices, VerticesOffset + 48) PokeFloat(Vertices, VerticesOffset, V.X) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.Y) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.Z) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.U) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.V) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.W) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.R) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.G) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.B) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.A) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.NX) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.NY) VerticesOffset :+ 4 PokeFloat(Vertices, VerticesOffset, V.NZ) Count :+ 1 Triangles = Count / 3 End Method Method Render() For Local I:Int = 0 To Count - 1 glTexCoord2f(PeekFloat(Vertices, 48 * I + OFS_VERTEXU), PeekFloat(Vertices, 48 * I + OFS_VERTEXV)) glColor4f(PeekFloat(Vertices, 48 * I + OFS_VERTEXR), PeekFloat(Vertices, 48 * I + OFS_VERTEXG), PeekFloat(Vertices, 48 * I + OFS_VERTEXB), PeekFloat(Vertices, 48 * I + OFS_VERTEXA)) glNormal3f(PeekFloat(Vertices, 48 * I + OFS_VERTEXNX), PeekFloat(Vertices, 48 * I + OFS_VERTEXNY), PeekFloat(Vertices, 48 * I + OFS_VERTEXNZ)) glVertex3f(PeekFloat(Vertices, 48 * I + OFS_VERTEXX), PeekFloat(Vertices, 48 * I + OFS_VERTEXY), PeekFloat(Vertices, 48 * I + OFS_VERTEXZ)) Next End Method End Type Type TVertex Field X:Float, Y:Float, Z:Float Field U:Float, V:Float, W:Float Field R:Float, G:Float, B:Float Field A:Float Field NX:Float, NY:Float, NZ:Float End Type
Example.bmx:
SuperStrict Import "Test.bmx" Global Event:Int GLGraphics 800, 600, 0 glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, 1.33333, 1, 1000) Global S:TSurface = New TSurface Global V:TVertex = New TVertex V.X = 0 V.Y = 1 V.Z = -10 V.R = 1 V.G = 1 V.B = 0.1 S.AddVertex(V) V.X = -1 V.Y = -1 V.Z = -10 S.AddVertex(V) V.X = 1 V.Y = -1 V.Z = -10 S.AddVertex(V) V.X = -1 V.Y = 1 V.Z = -10 S.AddVertex(V) While(Event <> EVENT_APPTERMINATE) PollSystem() PollEvent() Event = EventID() glClear(GL_COLOR_BUFFER_BIT) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glBegin(GL_POLYGON) S.Render() glEnd() GLDrawText "Triangles: " + S.Triangles, 10, 10 Flip glFlush() Wend End
Thanks in advance,