Việc triển khai E / C của tôi là cơ bản trong đó Thực thể chỉ là ID, Thành phần là dữ liệu và Hệ thống hoạt động trên Dữ liệu. Ngay bây giờ tôi đang gặp rắc rối với các vật liệu đối tượng và kết xuất nói chung. Đối với objetcs đơn giản, tôi có a ModelComponent
, gắn với a RenderSystem
, ModelComponent
có id bộ đệm đỉnh mà hệ thống kết xuất sử dụng. Một đơn giản MaterialComponent
có thể có màu sắc hoặc cường độ đặc biệt, v.v., nhưng tôi muốn nó đủ linh hoạt để cho phép nhiều hơn một kết xuất và "hiệu ứng" chung không dễ như một biến đơn giản trong MaterialComponent
.
Cố gắng giải quyết những vấn đề này tôi đã đưa ra hai giải pháp:
1 - Thành phần vật liệu siêu chung
Một cái gì đó như thế này:
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
và trong hệ thống kết xuất, tôi sẽ lặp và chuyển đồng phục cho shader. Tôi cho rằng điều này sẽ chậm, nhưng đủ nhanh cho mục đích của tôi.
2 - Một lớp trừu tượng khác, MaterialData
Có một lớp để bọc các vật liệu cụ thể, có thể được kế thừa bởi bất kỳ vật liệu chuyên dụng nào, lớp cơ sở sẽ có thứ gì đó giống như void set_shader_constants(ShaderData* d)
nhưng việc triển khai tùy thuộc vào từng lớp và MaterialComponent
sẽ có một con trỏ tới một đối tượng MaterialData.
Tôi không chắc chắn cách tiếp cận nào tôi thích, nhưng cả hai đều không chạm vào chủ đề của nhiều đường chuyền hoặc các kỹ thuật kết xuất phức tạp khác.
Bất kỳ ý tưởng về làm thế nào để thực hiện điều này?