-
-
Notifications
You must be signed in to change notification settings - Fork 0
Guide: Optimization
The code of GML-OOP is executed during the runtime of an application built with it. Executing any code with that nature will have the processor and then a graphics card of the device take time to finish completing the operation before proceeding with the next. Adding any features to a project, including features of GML-OOP is adding more code to it, and adding code means adding time necessary for execution. That time is usually measured in microseconds.
While the code of GML-OOP has many optimizations applied to it, it is still runtime code in nature. Its primary purpose is to improve the quality and readability of code written with it, turning the attention to solving bigger problems. Good practices, being able to properly understand written code, write it optimally, debug it efficiently and prevent crashes provide benefits which outweigh the cost of added execution time.
GML-OOP constructors contain several features that make creating and understanding efficient code easier. Three primary groups of their methods stand out for that purpose:
-
toString(): Every constructor can be stringified to output its properties and calling this method directly allows configuring that output, making it easy to see the data being worked with. -
destroy(): Every constructor that has this method must call it after it is no longer used, unless noted otherwise. This is crucial in avoiding memory leaks, as otherwise internal data will linger in memory for the rest of the runtime. The entirety of constructors without that method is automatically handled by Garbage Collection. -
toVertexBuffer(): Every constructor which renders graphics has this method. It can be used instead ofrender()to pre-calculate drawn graphics once, as opposed to performing these calculations each of frames in which graphics would be drawn.
Core concepts
As executing code takes time, the goal of optimization is to reduce the amount of steps taken to achieve the same result in shorter time. Each GameMaker application executes its code in a cycle which happens every rendering frame. That cycle consists of executing its Events in a set order, then by default, waiting until it is time to begin the next frame. Their amount to perform in a single second can be set in Project Settings or with the
game_set_speed() function. That number can be made unlimited, in which case its only limit is what the components of the device can produce at maximum load. However, the amount of frames that can actually visible is dictated by the screen the application is displayed on and mainly its refresh rate.
Because the minimal refresh rate limit found on concurrent devices is usually 60, the limit of frames produced in a second is also set to 60 for a newly created GameMaker project. With that limit, each frame has a time limit of 1/60 of a second, in which it can execute without delaying the next frame. Not managing to fit in that limit lowers the number of frames operated in that second, resulting in visible delays. All primary components of a device take part in the total execution time of each frame, but most of written code is operated by the processor. If the code relates to graphics, internal GameMaker functions will proceed to operate components relating to the graphics card. The only direct way to affect code executed by the graphics card is through the use of Shaders, written in a shading language.
Changing the frame limit of a GameMaker application will change the speed at which all logic of execution is performed. Supporting values higher than 60, while a portion of devices will not be able to effectively achieve that speed, necessities manual scaling of speed the logic is executed at. A guide for one of many ways, in which this can be achieved can be found here. However, as a starting point, it is recommended proceed with creating the application by picking an accessible, slower device and targeting executing a fixed amount of 60 frames per second on that device. Furthermore, actual execution time on that device should be tested with the YoYo Compiler target. By default, an application will be compiled to the Virtual Machine target, which is faster to compile to and provides more debugging information, but not as performant to execute actual code of the application.
Executing code once, instead of every frame
Majority of performance problems stem from code being executed more times than it needs to. Because this is an ubiquitous problem, steps to cover for it must be taken every time any code is written.
Events in GameMaker come in two types:
- Executing once, such as the
CreateorClean UpEvents. - Executing every frame, such as the
Step,DraworDraw GUIEvents and their variations.
Draw Event, but a primary reason for it is optimization.
This problem can be exemplified by having GameMaker render a chunk of text in such a way it fits it is line-broken to fit a rectangular box. To achieve this, the following procedure needs to be executed:
- Initial string must be declared.
- Box boundaries must be declared.
- The string must be parsed to separate each word.
- Line breaks must be inserted where the location of boundary was reached.
- Text rendering properties must be set and the string is rendered.
- Properties of the string and box boundaries can be declared once.
- The string can be separated once.
- Line-breaks can be inserted only when above properties change.
- Text has to be rendered every frame.
While basing a system on GML-OOP, it should become natural to separate preparatory single-frame data and active every-frame operations. Constructors condense the preparatory data in universal, reusable structures. Properties of two concepts from this example, the drawn text and the rectangular box, become encapsulated into a single variable each. These variables would refer to
TextRenderer and Rectangle constructors, respectively. These constructions should happen only once, such as in the Create event, so that they exist in memory until the system stops being needed, rather than being redeclared every frame. Operations happening each frame should be reduced only to calling methods executing that prepared data whenever possible.
Additionally, it should be noted that:
- Setting properties of a GML-OOP constructor should happen by either constructing them or using appropriate methods if a documentation page for a given constructor states the value is not directly modifiable. These properties can be used to read a saved value of that data, without a need to call a getter function or a method.
- Graphical data can also be prepared once ahead of rendering it multiple times through the use of their
toVertexBuffer()methods.
Optimizing loops
The chunks of code that require most attention when considering performance are ones that execute repeatedly after all other code was separated to run only once. Most of loops in GML-OOP follow this pattern:
var _i = 0; repeat (/*amount of iterations*/) { // loop contentThis declaration is the fastest possible general-use loop GameMaker can execute:
++_i; }
- Contrary to its popularity, there is little to no reason to ever use a
forloop, as GameMaker Language features the simpler repeat loop. The difference between them is that theforloop always checks for its ending point before every iteration, whereas arepeatloop does that only once. Regardless of the type of loop used, if the loop should be able to end prematurely, thebreakstatement can be used, and if it should be able to execute until a specific result is achieved, thewhileloop should be utilized instead. Changing the end point of a loop in any other way reduces the readability of code and presents a risk of an infinite loop preventing further execution of the application. - The use of
_iiterator variable can be omitted on simplest loops, when current iteration does not need to be known. Left-side++_i;incremental operator refers to a marginally faster operation than right-side_i++;, as it writing it on left side specifies a number to be incremented, then returned. Writing it on right side specifies the value to be copied separately, then the original be incremented, to then return the copy. There is no need to read the returned value, so the simpler way is used. - If the loop is created to iterate though a linearly-stored data, such as in an array, the currently iterated value should be first saved to a local variable before reading it multiple times. Reading data assigned to a local variable is the fastest possible way to obtain its value.
- All data that does not change during the loop should be declared before it, not inside of it.
forEach() method executing a loop with a known ending point. However, the above is loop declaration is recommended for a majority of cases, as it is the simplest and therefore the fastest to execute.
In situations where the number of iterations in one loop reaches extreme amounts, such as thousands or tens of thousands, simplifying the code to native GameMaker functions, rather than the use of constructors and their methods will yield faster execution times. However, such amount of iterations should first be considered a symptom of inadequate code separation or preparation prior to executing it.
Using Vertex Buffers
Like other data, graphical data can be pre-calculated for reuse in advance. GameMaker primarily offers two ways to do so. One is with Surfaces saving raster data of each pixel, other is through primitives saving the location, color, alpha and optionally texture coordinates of a drawn graphics, which can be saved in a Vertex Buffer. The amount of memory used by surfaces grows larger with its total pixel size, whereas the size of a vertex buffer grows with the amount of graphics to draw, regardless of their size. More specifically, the data of vertices it contains. Working with primitives involves a significant amount of repetitive steps to fill aforementioned data for each property of every vertex, but GML-OOP constructors greatly simplify their usage to just three method calls: creating a Vertex Buffer, rendering with it and destroying it. This is the same amount of operations as when using a Surface. When calling a draw function, GameMaker calculates primitive data to then render the graphic. Preparing that data ahead of time simplifies that step.
Vertex Buffers come with two limitations:
- Pre-calculated data is static, meaning its content cannot be modified after it is added to a Vertex Buffer. However, all of its properties can still be altered with a Shader.
- Graphics for a single primitive render can only come from a single Texture Page, as a texture swap will not be performed automatically. Unloading a current texture and loading in a different texture in its place takes time, so grouping sprites that are usually used at once on a single texture reduces the length of rendering operation.
Example
CodeCreate Event shape = new RoundRectangle(new Vector4(50, 50, 550, 500), new Vector2(25), make_color_rgb(0, 100, 200), 1, 5, c_white, 1); renderData = shape.toVertexBuffer();
Draw GUI Event renderData.render();
Clean Up Event renderData = renderData.destroy();
Explanation
• Create Event: ARoundRectangleis constructed and assigned to theshapevariable. That variable is then used to callRoundRectangle.toVertexBuffer()method, which constructsRoundRectangle.PrimitiveRenderDataassigned to therenderDatavariable, containing all information necessary for rendering.
• Step Event: TherenderDatavariable is referenced to call aRoundRectangle.PrimitiveRenderData.render()method, causing it to render content of theVertexBufferto the current Surface. The filling of the shape is rendered first, then its outline.
• Clean Up Event: When the object instance is being removed, theRoundRectangle.PrimitiveRenderData.destroy()method is called and assigned to therenderDatavariable, using the method of a constructor it is about to stop referencing, to removeVertexBufferdata from memory, along with references to related constructors, as that method returns{undefined}.
Container
Angle
Management
● isFunctional()Getters
● equals()
● difference()Conversion
● toString()Color2
Management
● isFunctional()Getters
● equals()
● interpolate()Conversion
● toString()
● toArray()Color3
Management
● isFunctional()Getters
● equals()
● interpolate()Conversion
● toString()
● toArray()Color4
Management
● isFunctional()Getters
● equals()
● interpolate()Conversion
● toString()
● toArray()
● split()DateTime
Management
● isFunctional()Getters
● compareDateTime()
● compareDate()
● compareTime()
● spanOfYears()
● spanOfMonths()
● spanOfWeeks()
● spanOfDays()
● spanOfHours()
● spanOfMinutes()
● spanOfSeconds()
● getDate()
● getTime()
● getDaysInYear()
● getDaysInMonth()
● getWeekOfYear()
● getDayOfYear()
● getHourOfYear()
● getMinuteOfYear()
● getSecondOfYear()
● getWeekday()
● isToday()
● isLeapYear()Setters
● modify()
● modifyYears()
● modifyMonths()
● modifyWeeks()
● modifyDays()
● modifyHours()
● modifyMinutes()
● modifySeconds()
● setCurrent()
● setDateTime()Conversion
● toString()
● toStringDate()
● toStringTime()
● toArray()
● toArrayDate()
● toArrayTime()EulerAngle
Management
● isFunctional()Conversion
● toString()
● toArray()Range
Management
● isFunctional()Getters
● sum()
● difference()
● product()
● quotient()
● clamp()
● interpolate()
● percent()
● randomReal()
● randomInt()
● getMiddle()
● isBetween()
● isBoundary()Conversion
● toString()
● toArray()RangedValue
Management
● isFunctional()Getters
● equals()
● percent()
● isBoundary()
● isMinimum()
● isMaximum()Setters
● modify()
● modifyWrap()
● modifyBounce()
● interpolate()
● set()
● setMinimum()
● setMaximum()
● setOriginal()
● setMiddle()Conversion
● toString()Scale
Management
● isFunctional()Getters
● contains()
● equals()
● sum()
● difference()
● product()
● quotient()
● getMinimum()
● getMaximum()
● getSign()Setters
● add()
● substract()
● multiply()
● divide()
● approach()
● grow()
● shrink()
● mirror()
● mirrorX()
● mirrorY()
● set()
● setAll()Conversion
● toString()
● toArray()TextAlign
Management
● isFunctional()Getters
● equals()
● getMultiplier()Setters
● mirror()
● mirrorX()
● mirrorY()
● setXLeft()
● setXCenter()
● setXRight()
● setYTop()
● setYMiddle()
● setYBottom()Execution
● setActive()Conversion
● toString()
● toArray()Vector2
Management
● isFunctional()Getters
● contains()
● equals()
● exceeds()
● subceeds()
● sum()
● difference()
● absoluteDifference()
● product()
● quotient()
● dotProduct()
● crossProduct()
● getAngle()
● getDistance()
● getMinimum()
● getMaximum()
● getMagnitude()
● getNormalized()
● getSign()Setters
● add()
● substract()
● multiply()
● divide()
● approach()
● grow()
● shrink()
● clamp()
● setMinimum()
● setMaximum()
● flip()
● mirror()
● set()
● setAll()
● setFloor()
● setRound()
● setCeil()
● setCursor()Conversion
● toString()
● toArray()Vector3
Management
● isFunctional()Getters
● contains()
● equals()
● exceeds()
● subceeds()
● sum()
● difference()
● absoluteDifference()
● product()
● quotient()
● dotProduct()
● crossProduct()
● getDistance()
● getMinimum()
● getMaximum()
● getMagnitude()
● getNormalized()
● getSign()Setters
● add()
● substract()
● multiply()
● divide()
● approach()
● grow()
● shrink()
● mirror()
● set()
● setAll()
● setFloor()
● setRound()
● setCeil()Conversion
● toString()
● toArray()Vector4
Management
● isFunctional()Getters
● contains()
● equals()
● exceeds()
● subceeds()
● sum()
● difference()
● absoluteDifference()
● product()
● quotient()
● dotProduct()
● interpolate()
● percent()
● getAngle()
● getDistance()
● getClosest()
● getMinimum()
● getMaximum()
● getMiddle()
● getMagnitude()
● getNormalized()
● getSign()
● isBetween()
● isDegenerate()Setters
● add()
● substract()
● multiply()
● divide()
● approach()
● clamp()
● setMinimum()
● setMaximum()
● grow()
● shrink()
● flip()
● mirror()
● mirrorX()
● mirrorY()
● sort()
● roundToBorder()
● set()
● setAll()
● setFloor()
● setRound()
● setCeil()
● setCursor()
● setBoundary()Conversion
● toString()
● toArray()
● split()
● combine()
Data Structure
Grid
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● containsRegion()
● containsDisk()
● count()
● getValue()
● getCellCount()
● getRow()
● getColumn()
● getMinimum()
● getMinimumDisk()
● getMaximum()
● getMaximumDisk()
● getMean()
● getMeanDisk()
● getSum()
● getSumDisk()
● getValueLocation()
● getValueLocationDisk()Setters
● setSize()Execution
● forEach()
● set()
● setRegion()
● setDisk()
● setRegionCopied()
● add()
● addRegion()
● addDisk()
● addRegionCopied()
● multiply()
● multiplyRegion()
● multiplyDisk()
● multiplyRegionCopied()
● mirrorX()
● mirrorY()
● transpose()
● sort()
● shuffle()Conversion
● toString()
● toArray()
● fromArray()
● toEncodedString()
● fromEncodedString()List
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● count()
● getValue()
● getFirst()
● getLast()
● getFirstPosition()
● getPositions()
● getSize()
● isEmpty()Execution
● forEach()
● add()
● set()
● replace()
● removePosition()
● removeValue()
● insert()
● sort()
● shuffle()Conversion
● toString()
● toArray()
● fromArray()
● toEncodedString()
● fromEncodedString()Map
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● count()
● getValue()
● getAllValues()
● getAllKeys()
● getFirst()
● getLast()
● getPrevious()
● getNext()
● keyExists()
● valueIsBoundList()
● valueIsBoundMap()
● getSize()
● isEmpty()Execution
● forEach()
● add()
● addBoundList()
● addBoundMap()
● set()
● replace()
● remove()Conversion
● toString()
● toArray()
● fromArray()
● toStruct()
● fromStruct()
● toEncodedString()
● fromEncodedString()
● secureToFile()
● secureFromFile()
● secureFromBuffer()PriorityQueue
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● count()
● getFirst()
● getLast()
● getPriority()
● getFirstPriority()
● getLastPriority()
● getSize()
● isEmpty()Execution
● forEach()
● add()
● setPriority()
● remove()
● removeFirst()
● removeLast()Conversion
● toString()
● toArray()
● fromArray()
● toEncodedString()
● fromEncodedString()Queue
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● count()
● getFirst()
● getLast()
● getSize()
● isEmpty()Conversion
● toString()
● toArray()
● fromArray()
● toEncodedString()
● fromEncodedString()Stack
Management
● isFunctional()
● destroy()
● clear()
● copy()Getters
● contains()
● count()
● getFirst()
● getLast()
● getSize()
● isEmpty()Conversion
● toString()
● toArray()
● fromArray()
● toEncodedString()
● fromEncodedString()
Debug
ErrorReport
Management
● isFunctional()Execution
● report()Conversion
● toString()
ErrorReport.ReportData
Management
● isFunctional()Getters
● equals()
● formatLocation()
● formatDetail()
● formatCallstack()
● formatTime()Conversion
● toString()
Handler
ArrayParser
Management
● isFunctional()
● setParser()
● create()
● clear()
● copy()
● merge()Getters
● contains()
● containsAll()
● containsCondition()
● equals()
● getValue()
● getUniqueValues()
● getSharedValues()
● getFirst()
● getLast()
● getFirstPosition()
● getLastPosition()
● getPositions()
● getPositionsCondition()
● getReduction()
● getColumn()
● getSize()
● isEmpty()Setters
● setSize()Execution
● forEach()
● add()
● addUnique()
● set()
● insert()
● removePosition()
● removeValue()
● sort()Conversion
● toString()AudioPlayer
Management
● isFunctional()Execution
● play()Conversion
● toString()Callback
Management
● isFunctional()
● clear()Getters
● prependArgument()Execution
● execute()Conversion
● toString()
● toArray()SpriteRenderer
Management
● isFunctional()Getters
● equals()
● getVertexLocation()
● getUV()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()StringParser
Management
● isFunctional()
● setParser()Getters
● contains()
● containsAll()
● startsWith()
● endsWith()
● charEquals()
● charIsWhitespace()
● split()
● getFirst()
● getLast()
● getBetween()
● getByte()
● getByteLength()
● getChar()
● getOrd()
● getPart()
● getLetters()
● getDigits()
● getLettersAndDigits()
● getSubstringCount()
● getSubstringPosition()
● getSize()
● getPixelSize()Setters
● remove()
● formatNumber()
● formatStruct()
● insert()
● duplicate()
● replace()
● reverse()
● trim()
● setByte()
● setLowercase()
● setUppercase()
● capitalize()Execution
● forEach()
● displayOutput()
● displayMessageBox()Conversion
● toString()
● toNumber()
● toArray()
● fromArray()
● toFile()
● fromFile()
● fromJSON()SurfaceRenderer
Management
● isFunctional()Execution
● render()Conversion
● toString()
● toVertexBuffer()TextRenderer
Management
● isFunctional()Getters
● equals()
● getScaleMultiplier()
● getPixelSize()
● getBoundaryOffset()Setters
● wrapText()Execution
● render()Conversion
● toString()
● toVertexBuffer()
Resource
Audio
Management
● isFunctional()Getters
● isPlaying()Setters
● setOffset()Execution
● play()Conversion
● toString()Buffer
Management
● isFunctional()
● destroy()
● copy()Getters
● getSeekPosition()
● getType()
● getAlignment()
● getPointer()
● getSize()Setters
● setSeekPosition()Execution
● write()
● fill()
● read()
● compress()
● decompress()
● getValue()Conversion
● toString()
● toHashMD5()
● toHashSHA1()
● toHashCRC32()
● toEncodedString()
● fromEncodedString()
● secureFromMap()
● fromSurface()
● toFile()
● fromFile()
● fromFilePart()Camera
Management
● isFunctional()
● destroy()Execution
● applySettings()
● createOrtographicProjectionMatrix()
● createPerspectiveProjectionMatrix()
● createPerspectiveFieldOfViewProjectionMatrix()
● createViewMatrix()Conversion
● toString()
Camera.OrtographicProjectionMatrix
Management
● isFunctional()Execution
● build()Conversion
● toString()Camera.PerspectiveProjectionMatrix
Management
● isFunctional()Execution
● build()Conversion
● toString()Camera.PerspectiveFieldOfViewProjectionMatrix
Management
● isFunctional()Execution
● build()Conversion
● toString()Camera.ViewMatrix
Management
● isFunctional()Execution
● build()Conversion
● toString()Font
Management
● isFunctional()
● destroy()Getters
● equals()
● getTexture()
● getTexel()
● getUV()
● isActive()Execution
● setActive()Conversion
● toString()Layer
Management
● isFunctional()
● destroy()Getters
● hasInstance()
● getElements()Setters
● setLocation()
● setSpeed()
● setVisible()
● setDepth()
● setShader()
● setFunctionDrawBegin()
● setFunctionDrawEnd()Execution
● createBackground()
● createInstance()
● createTilemap()
● createSprite()
● createParticleSystem()
● destroyInstance()
● setInstancePause()Conversion
● toString()
Layer.SpriteElement
Management
● isFunctional()
● changeParent()
● destroy()Setters
● setSprite()
● setScale()
● setColor()
● setAlpha()
● setFrame()
● setSpeed()Conversion
● toString()Layer.BackgroundElement
Management
● isFunctional()
● changeParent()
● destroy()Setters
● setSprite()
● setScale()
● setColor()
● setAlpha()
● setFrame()
● setSpeed()
● setStretch()
● setTiled()
● setVisible()Conversion
● toString()Layer.TilemapElement
Management
● isFunctional()
● destroy()
● clear()
● changeParent()Getters
● getFrame()
● getMask()
● getTileInCell()
● getTileAtPoint()
● getCellAtPoint()Setters
● setMask()
● setTileset()
● setSize()Execution
● render()
● setTileInCell()
● setTileAtPoint()Conversion
● toString()
Layer.TilemapElement.TileData
Management
● isFunctional()
● clear()Getters
● getTilesetIndex()
● isEmpty()
● isMirroredX()
● isMirroredY()
● isRotated()Setters
● setTilesetIndex()
● setMirrorX()
● setMirrorY()
● setRotate()Execution
● render()Conversion
● toString()Layer.ParticleSystem
Management
● isFunctional()
● destroy()
● clear()
● changeParent()Getters
● getParticleCount()Setters
● setLocation()
● setDrawOrder()
● setAutomaticUpdate()
● setAutomaticRender()Execution
● createEmitter()
● render()
● update()Conversion
● toString()
Layer.ParticleSystem.ParticleEmitter
Management
● isFunctional()
● destroy()
● clear()Setters
● setRegion()
● setStreamEnabled()
● setStreamCount()Conversion
● toString()ParticleType
Management
● isFunctional()
● destroy()
● clear()Setters
● setShape()
● setSprite()
● setScale()
● setSize()
● setSpeed()
● setDirection()
● setAngle()
● setGravity()
● setLife()
● setColor()
● setColorMix()
● setColorRGB()
● setColorHSV()
● setBlend()
● setAlpha()
● setStep()
● setDeath()Execution
● create()
● createShape()Conversion
● toString()Room
Management
● isFunctional()
● copy()Getters
● isActive()Setters
● setSize()
● setPersistent()Execution
● createInstance()
● setActive()Conversion
● toString()
Room.AddedInstance
Management
● isFunctional()Conversion
● toString()Shader
Management
● isFunctional()Getters
● isActive()Setters
● setUniformFloat()
● setUniformInt()
● setUniformMatrix()
● setUniformTexture()
● updateUniforms()Execution
● setActive()
● createUniformData()Conversion
● toString()
Shader.Uniform
Management
● isFunctional()Execution
● update()Conversion
● toString()Sprite
Management
● isFunctional()
● destroy()
● replace()
● merge()Getters
● getNineslice()
● getTexture()
● getUV()
● getTexel()
● getTextureTrim()Setters
● setNineslice()
● setOrigin()
● setSpeed()
● setCollisionMask()Execution
● render()
● renderTiled()
● renderPerspective()
● load()
● generateAlphaMap()Conversion
● toString()
● toFile()Surface
Management
● isFunctional()
● create()
● destroy()
● clear()
● copy()Getters
● equals()
● getPixel()
● getTexture()
● getTexel()
● isActive()Setters
● setSize()Execution
● render()
● renderTiled()
● setActive()Conversion
● toString()
● toFile()
● fromBuffer()VertexBuffer
Management
● isFunctional()
● destroy()
● copy()Getters
● getSize()Setters
● setLocation2D()
● setLocation3D()
● setColor()
● setUV()
● setNormal()Execution
● render()
● setActive()
● createPrimitiveRenderData()
● makeReadOnly()Conversion
● toString()
VertexBuffer.PrimitiveRenderData
Management
● isFunctional()
● destroy()Execution
● render()Conversion
● toString()VertexFormat
Management
● isFunctional()
● destroy()Conversion
● toString()
Shape
Circle
Management
● isFunctional()Getters
● equals()
● collision()
● containsPoint()
● cursorOver()
● cursorHold()
● cursorPressed()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()Cube
Management
● isFunctional()Getters
● getVertexLocation()
● getUV()
● getNormal()
● getSpriteFrameOrder()
● getVertexSign()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toVertexBuffer()Ellipse
Management
● isFunctional()Getters
● equals()
● collision()
● containsPoint()
● cursorOver()
● cursorPressed()
● cursorHold()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()
● getOutlineLocation()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()Line
Management
● isFunctional()Getters
● equals()
● collision()
● containsPoint()
● cursorOver()
● cursorPressed()
● cursorHold()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()Plane
Management
● isFunctional()Getters
● getVertexLocation()
● getUV()
● getNormal()
● getTransform()
● getVertexSign()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toVertexBuffer()Point
Management
● isFunctional()Getters
● equals()
● collision()
● cursorOver()
● cursorHold()
● cursorPressed()
● cursorReleased()
● getPrimitiveRenderData()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()Rectangle
Management
● isFunctional()Getters
● equals()
● collision()
● containsPoint()
● cursorOver()
● cursorHold()
● cursorPressed()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()
● getOutlineLocation()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()RoundRectangle
Management
● isFunctional()Getters
● equals()
● containsPoint()
● cursorOver()
● cursorPressed()
● cursorHold()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()
● getOutlineLocation()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()Triangle
Management
● isFunctional()Getters
● equals()
● containsPoint()
● cursorOver()
● cursorHold()
● cursorPressed()
● cursorReleased()
● getVertexLocation()
● getPrimitiveRenderData()
● getOutlineLocation()Execution
● render()Conversion
● toString()
● toArray()
● toVertexBuffer()