- Procedure RenderingMethods_renderGraphicsObjectVERTEXARRAY(*pageList.GraphicsObjectPageList)
- RenderingMethods_applyGLModelViewTransformation()
- If(*pageList\pageAmount = 0 Or *pageList\objectAmount = 0)
- ProcedureReturn
- EndIf
- Define *page.GraphicsObjectPage = *pageList\firstPage
- Define *obj.GraphicsObject
- Define i.i
- Define arrayi.i
- Define size = *pageList\objectAmount * 12 * SizeOf(Float)
- Define *vertexArray = AllocateMemory(size)
- Define *vert.ThreeFloatWrapper = *vertexArray
- size = *pageList\objectAmount * 8 * SizeOf(Float)
- Define *uvArray = AllocateMemory(size)
- Define *uv.TwoFloatWrapper = *uvArray
- size = *pageList\objectAmount * 16 * SizeOf(Byte)
- Define *colorArray = AllocateMemory(size)
- Define *color.FourByteWrapper = *colorArray
- Define colValue.i
- While(*page <> #Null)
- i = 0
- *obj.GraphicsObject = *page\obj
- While(i < *page\size)
- If(*obj\inUse = #True)
- colValue = *obj\colorRed << 24 + *obj\colorGreen << 16 + *obj\colorBlue << 8 + *obj\colorAlpha
- ;Fill the color array with 4 * 4 values
- FillMemory(*color, 16, colValue, #PB_Long)
- *color = *color + 16
- *uv\value1 = *obj\u1
- *uv\value2 = *obj\v1
- *uv = *uv + 8
- *uv\value1 = *obj\u2
- *uv\value2 = *obj\v1
- *uv = *uv + 8
- *uv\value1 = *obj\u2
- *uv\value2 = *obj\v2
- *uv = *uv + 8
- *uv\value1 = *obj\u1
- *uv\value2 = *obj\v2
- *uv = *uv + 8
- *vert\value1 = *obj\x - *obj\vec1x
- *vert\value2 = *obj\y - *obj\vec1y
- *vert\value3 = *obj\z
- *vert = *vert + 12
- *vert\value1 = *obj\x + *obj\vec2x
- *vert\value2 = *obj\y + *obj\vec2y
- *vert\value3 = *obj\z
- *vert = *vert + 12
- *vert\value1 = *obj\x + *obj\vec1x
- *vert\value2 = *obj\y + *obj\vec1y
- *vert\value3 = *obj\z
- *vert = *vert + 12
- *vert\value1 = *obj\x - *obj\vec2x
- *vert\value2 = *obj\y - *obj\vec2y
- *vert\value3 = *obj\z
- *vert = *vert + 12
- arrayi = arrayi + (SizeOf(Float))
- EndIf
- *obj = *obj + SizeOf(GraphicsObject)
- i = i + 1
- Wend
- *page = *page\nextPage
- Wend
- glEnable(#GL_TEXTURE_2D)
- glBindTexture(#GL_TEXTURE_2D, *g_CurrentTexObj\texture)
- glEnableClientState(#GL_VERTEX_ARRAY);
- glEnableClientState(#GL_TEXTURE_COORD_ARRAY)
- glEnableClientState(#GL_COLOR_ARRAY)
- glVertexPointer(3, #GL_FLOAT, 0, *vertexArray)
- glTexCoordPointer(2, #GL_FLOAT, 0, *uvArray)
- glColorPointer(4, #GL_UNSIGNED_BYTE, 0, *colorArray)
- glDrawArrays(#GL_QUADS, 0, arrayi);
- glDisableClientState(#GL_VERTEX_ARRAY);
- glDisableClientState(#GL_TEXTURE_COORD_ARRAY)
- glDisableClientState(#GL_COLOR_ARRAY)
- FreeMemory(*colorArray)
- FreeMemory(*uvArray)
- FreeMemory(*vertexArray)
- EndProcedure
