Đây là câu hỏi ít hơn về OpenGL và nhiều câu hỏi về tổ chức C++.Bộ tiểu bang OpenGL
Tôi sẽ có biểu đồ cảnh đơn giản (một cây) với các nút (vì lợi ích của câu hỏi này) tất cả sẽ hiển thị một số hình. Để cụ thể hơn, mỗi người có một số lệnh rút OpenGL bên trong phương thức draw()
.
Vì lý do tối ưu, tôi muốn nhóm các đối tượng giống nhau lại với nhau và vẽ tất cả cùng một lúc. Vì lý do này tôi muốn một cách thể hiện những gì tôi đang gọi là "bộ nhà nước" cho OpenGL. Một bộ trạng thái chỉ là một bó của các liên kết OpenGL, hoặc các lệnh được đặt trước khi vẽ được gọi trên các đối tượng X, và không được đặt sau đó.
Do đó, tập hợp nhà nước có ít nhất set()
và unset()
và sẽ được hệ thống hiển thị gọi trước và sau khi vẽ lệnh của các nút sử dụng tập hợp trạng thái này.
Câu hỏi của tôi là cách diễn đạt các bộ trạng thái đã nói? Chắc chắn một loạt các chức năng có thể làm, nhưng tôi muốn có thể đặt tên một bộ và gọi lại nó. Giống như nút A có một tập hợp trạng thái là LIGHTING_AND_SHADOW
và nút B có CEL_SHADING
.
Vì lý do này, hãy tạo một lớp trừu tượng có tên là stateSet
về cơ bản là giao diện cho các phương pháp set()
và unset()
và có mỗi bộ trạng thái kế thừa từ nó. Nhưng, nó đòi hỏi việc tạo ra một loạt các đối tượng chỉ để có được một tên cơ bản. nó có vẻ như có thể có một cách tốt hơn.
Cũng lý tưởng tôi muốn có danh sách tất cả stateSets
có thể dễ dàng bị thu hồi. Ví dụ: trước khi kết xuất bắt đầu, sẽ tốt hơn nếu có thể sắp xếp tất cả các nút trong biểu đồ cảnh theo stateSet
của chúng.
Bất kỳ ý tưởng nào?
Có vẻ như bạn đang yêu cầu chúng tôi cung cấp tên cho bộ tiểu bang của bạn. Bạn có thể xây dựng một chút về loại trợ giúp nào bạn đang tìm kiếm hay không. – Mads
Nếu chương trình GLSL đang hoạt động là một phần của "bộ trạng thái" thì bạn có thể làm cho "bộ trạng thái" này trong lớp chương trình GLSL của bạn: mỗi người biết trạng thái cần thiết và chương trình cần thiết để hoạt động. Sau đó, bạn nhóm các nút cho mỗi chương trình trước khi kết xuất. – Gigi