OpenGL memiliki beberapa konsep 'Objek' di dalamnya.
Misalnya segala sesuatu dengan id dapat melalui sebagai objek (Ada juga hal-hal khusus bernama 'Objek'). Buffer, Tekstur, Objek Penyangga Verteks, Objek Array Vertex, Objek Penyangga Bingkai dan sebagainya. Dengan sedikit kerja Anda bisa membungkus kelas di sekitar mereka. Ini juga memberi Anda cara mudah untuk kembali ke fungsi OpenGL lama yang sudah usang jika konteks Anda tidak mendukung ekstensi. Misalnya VertexBufferObject dapat kembali menggunakan glBegin (), glVertex3f (), dan sebagainya.
Ada beberapa cara yang mungkin Anda perlukan untuk beralih dari konsep OpenGL tradisional, misalnya Anda mungkin ingin menyimpan metadata tentang buffer dalam objek buffer. Misalnya jika buffer menyimpan simpul. Apa format dari simpul (yaitu posisi, normals, texcoords dan sebagainya). Apa primitif yang digunakannya (GL_TRIANGLES, GL_TRIANGLESTRIP, dll ...), informasi ukuran (berapa banyak pelampung yang disimpan, berapa banyak segitiga yang mereka wakili, dll ...). Hanya untuk membuatnya mudah untuk menghubungkannya ke perintah draw arrays.
Saya sarankan Anda melihat OGLplus . Ini binding C ++ untuk OpenGL.
Juga glxx , itu hanya untuk memuat ekstensi sekalipun.
Selain membungkus API OpenGL, Anda harus melihat pembuatan level satu yang sedikit lebih tinggi di atasnya.
Misalnya kelas manajer material yang bertanggung jawab untuk semua shader Anda, memuat dan menggunakannya. Juga akan bertanggung jawab untuk mentransfer properti kepada mereka. Dengan begitu Anda bisa langsung memanggil: materials.usePhong (); material.setTexture (somethingexture); material.setColor (). Ini memungkinkan lebih banyak fleksibilitas karena Anda dapat menggunakan hal-hal yang lebih baru seperti objek buffer seragam bersama untuk hanya memiliki 1 buffer besar yang berisi semua properti yang digunakan shader Anda dalam 1 blok tetapi jika tidak didukung Anda tidak dapat mengunggah kembali untuk mengunggah ke setiap program shader. Anda dapat memiliki 1 shader monolitik besar dan bertukar antara model shader yang berbeda menggunakan rutin yang seragam jika didukung atau Anda dapat kembali menggunakan sekelompok shader kecil yang berbeda.
Anda juga dapat melihat pengeluaran dari spesifikasi GLSL untuk menulis kode shader Anda. Misalnya #include akan sangat berguna dan sangat mudah diimplementasikan dalam kode pemuatan shader Anda (ada juga ekstensi ARB untuk itu). Anda juga dapat membuat kode dengan cepat berdasarkan ekstensi apa yang didukung, misalnya menggunakan objek seragam bersama atau kembali menggunakan seragam normal.
Terakhir, Anda akan menginginkan API pipa render tingkat tinggi yang melakukan hal-hal seperti grafik adegan, efek khusus (blur, cahaya), hal-hal yang memerlukan beberapa proses rendering seperti bayangan, pencahayaan, dan semacamnya. Dan selain itu, API game yang tidak ada hubungannya dengan grafik API tetapi hanya berurusan dengan objek di dunia.