OpenGL đã có sẵn một số khái niệm 'Đối tượng'.
Ví dụ, mọi thứ có id đều có thể thông qua như một đối tượng (Cũng có những thứ được đặt tên cụ thể là 'Đối tượng'). Bộ đệm, Kết cấu, Đối tượng bộ đệm Vertex, Đối tượng mảng Vertex, Đối tượng bộ đệm khung, v.v. Với một chút công việc bạn có thể bao bọc các lớp học xung quanh chúng. Nó cũng cung cấp cho bạn một cách dễ dàng để quay lại các chức năng OpenGL cũ không dùng nữa nếu ngữ cảnh của bạn không hỗ trợ các tiện ích mở rộng. Ví dụ: VertexBufferObject có thể quay lại sử dụng glBegin (), glVertex3f (), v.v.
Có một số cách bạn có thể cần phải di chuyển khỏi các khái niệm OpenGL truyền thống, ví dụ bạn có thể muốn lưu trữ siêu dữ liệu về bộ đệm trong các đối tượng bộ đệm. Ví dụ nếu bộ đệm lưu trữ các đỉnh. Định dạng của các đỉnh là gì (tức là vị trí, quy tắc, texcoords, v.v.). Nó sử dụng nguyên thủy gì (GL_TRIANGLES, GL_TRIANGLESTRIP, v.v ...), thông tin kích thước (có bao nhiêu phao được lưu trữ, bao nhiêu hình tam giác mà chúng đại diện, v.v ...). Chỉ để làm cho nó dễ dàng để cắm chúng vào các lệnh vẽ mảng.
Tôi khuyên bạn nên xem OGLplus . Đó là các ràng buộc C ++ cho OpenGL.
Cũng glxx , điều đó chỉ dành cho tải mở rộng.
Ngoài việc gói API OpenGL, bạn nên xem xét xây dựng một cấp độ cao hơn một chút trên đầu trang.
Ví dụ, một lớp trình quản lý vật liệu chịu trách nhiệm cho tất cả các shader của bạn, tải và sử dụng chúng. Ngoài ra, nó sẽ chịu trách nhiệm chuyển tài sản cho họ. Bằng cách đó bạn chỉ có thể gọi: liệu.usePhong (); vật liệu.setTexture (đôi khi); vật liệu.setColor (). Điều này cho phép linh hoạt hơn vì bạn có thể sử dụng những thứ mới hơn như các đối tượng bộ đệm thống nhất được chia sẻ để chỉ có 1 bộ đệm lớn chứa tất cả các thuộc tính mà trình tạo bóng của bạn sử dụng trong 1 khối nhưng nếu nó không hỗ trợ bạn sẽ quay lại tải lên mỗi chương trình đổ bóng. Bạn có thể có 1 shader nguyên khối lớn và trao đổi giữa các mô hình shader khác nhau bằng cách sử dụng các thói quen thống nhất nếu nó được hỗ trợ hoặc bạn có thể quay lại sử dụng một loạt các shader nhỏ khác nhau.
Bạn cũng có thể xem xét mở rộng từ thông số kỹ thuật GLSL để viết mã shader của bạn. Ví dụ: #incoide sẽ cực kỳ hữu ích và rất dễ thực hiện trong mã tải shader của bạn (cũng có phần mở rộng ARB cho nó). Bạn cũng có thể tạo mã của mình một cách nhanh chóng dựa trên những tiện ích mở rộng nào được hỗ trợ, ví dụ: sử dụng một đối tượng đồng phục được chia sẻ hoặc quay lại sử dụng đồng phục thông thường.
Cuối cùng, bạn sẽ muốn một API đường ống kết xuất mức cao hơn thực hiện những việc như biểu đồ cảnh, hiệu ứng đặc biệt (làm mờ, phát sáng), những thứ đòi hỏi nhiều lần kết xuất như bóng, ánh sáng và như vậy. Và trên hết là một API trò chơi không liên quan gì đến API đồ họa mà chỉ giao dịch với các đối tượng trong một thế giới.