Implementasi E / C saya adalah yang mendasar di mana Entitas hanya ID, Komponen adalah data, dan Sistem bertindak atas Data. Saat ini saya mengalami masalah dengan material objek dan rendering secara umum. Untuk objek sederhana, saya memiliki ModelComponent
, terkait dengan RenderSystem
, ModelComponent
memiliki id buffer vertex yang digunakan sistem render. Sederhana MaterialComponent
mungkin akan memiliki kekuatan warna atau specular, dll, tapi saya ingin itu cukup fleksibel untuk memungkinkan lebih dari satu render pass dan "efek" umum yang tidak semudah variabel sederhana di MaterialComponent
.
Mencoba memecahkan masalah ini, saya menemukan dua solusi:
1 - Komponen Bahan Super-generik
Sesuatu seperti ini:
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
dan dalam sistem render saya akan mengulang dan menyerahkan seragam ke shader. Saya kira ini akan lambat, tetapi cukup cepat untuk tujuan saya.
2 - Lapisan abstraksi lainnya, MaterialData
Memiliki kelas untuk membungkus bahan tertentu, yang bisa diwarisi oleh bahan khusus apa pun, kelas dasar akan memiliki sesuatu seperti void set_shader_constants(ShaderData* d)
tetapi implementasinya terserah masing-masing kelas, dan MaterialComponent
akan memiliki pointer ke objek MaterialData.
Saya tidak yakin pendekatan mana yang saya inginkan, tetapi tidak satu pun dari ini menyentuh subjek beberapa pass, atau teknik rendering kompleks lainnya.
Adakah cara untuk mencapai ini?