background image

την απομόνωση της OpenGL από τον πυρήνα της μηχανής,

τη δυνατότητα μελλοντικής αντικατάστασης του backend,

την αποδοτική διαχείριση μεγάλου αριθμού δισδιάστατων αντικειμένων.

4.4.1

Διαχείριση γεωμετρίας και Buffer Objects

Για την αποφυγή άμεσης εξάρτησης από την OpenGL, εισήχθη ενδιάμεσο επίπεδο αφαί-

ρεσης (abstruction). Οι κλάσεις που διμιουργίθηκαν γαι τα βασικά αντικείμενα του rendering

pipeline είναι:

Shader class . Υπέφθηνη για την μεταγλώτηση των shader προγαραμμάτων και την διμιουρ-

για των uniform δεδομένων που τιχόν θελουμε να στείλουμε στην καρτα γραφικών.

Vertex_buffer class (VBO). Aποθήκευση δεδομένων κορυφών.

Index_buffer class (IBO). Aποθήκευση δεικτών για επαναχρησιμοποίηση κορυφών.

Vertex_array class (VAO). Περιγραφή διάταξης δεδομένων κορυφών.

Texture class. Δεδομένα που αφορούν τα χρώματα και τις υφές.

4.4.2

Renderer και Renderer2D

Η αρχιτεκτονική του rendering διαχωρίζεται σε δύο επίπεδα:

• Η κλάση Renderer διαχειρίζεται τη διαδικασία απόδοσης (π.χ. state management, ενερ-

γοποίηση pipeline).

• Η κλάση Renderer2D καθορίζει τα είδη αντικειμένων που αποδίδονται (sprites, τετρά-

πλευρα, tiles).

Ο διαχωρισμός αυτός επιτρέπει μελλοντική προσθήκη Renderer3D, χωρίς αναδιάρθρωση του

βασικού μηχανισμού απόδοσης.

4.4.3

Βελτιστοποίηση μέσω Batch Rendering

Στην αρχική υλοποίηση, κάθε αντικείμενο αποδιδόταν με ξεχωριστό draw call. Αν και λει-

τουργικά ορθό, το μοντέλο αυτό προκαλεί σημαντική επιβάρυνση στην επικοινωνία CPU–GPU,

ιδιαίτερα σε δισδιάστατα παιχνίδια με μεγάλο αριθμό αντικειμένων. Για τον λόγο αυτό υλοποι-

ήθηκε τεχνική Batch Rendering, όπου πολλαπλά αντικείμενα συγκεντρώνονται σε ενιαίο buffer

και αποδίδονται με μειωμένο αριθμό draw calls. Η τεχνική αυτή μειώνει:

• state changes,

• δεσμεύσεις (bind operations),

• uniform uploads,

29