Vâng, đó là cách hoạt động của nó. Bằng cách trừu tượng hóa API đồ họa bạn sử dụng, bạn sẽ loại bỏ nó khỏi những gì mà lập trình viên cần phải lo lắng. Điều này tương tự như cách GDI tóm tắt thiết bị được ghi vào, chẳng hạn như lập trình viên không cần lo lắng về nó.
Theo nghĩa này, thư viện chức năng của bạn tương tự như thư viện ở trên sẽ giống như HDC. Nó là giao diện của sự trừu tượng này.
Sẽ khó khăn hơn khi kiểm tra API đơn giản, sau đó gọi (các) chức năng thích hợp. Hai API (DirectX và OpenGL) là rất khác nhau, và abstracting chúng cả hai thành một giao diện duy nhất sẽ không dễ dàng, đặc biệt là nếu bạn muốn bao gồm hầu hết các chức năng.
Bạn sẽ cần trừu tượng hơn sau đó chỉ cần thực hiện các chức năng phổ quát. Bạn sẽ cần phải tạo ra các cấu trúc phức tạp hơn. Giả sử giả thuyết rằng OpenGL yêu cầu bạn gọi hàm A, sau đó hàm B để thực hiện điều gì đó, nhưng DX yêu cầu bạn gọi func B, sau đó func A. Để chứa điều này, bạn sẽ cần phải làm một cái gì đó tương tự như sau:
void functionA(...) {
if (OpenGL) {
glFuncA();
} else {
//store parameters
}
}
void functionB(...) {
if (OpenGL) {
glFuncB();
} else {
dxFuncB();
dxFuncA(saved params);
}
}
Nó không phải là một ví dụ rất tốt, nhưng nó thể hiện hiệu trưởng. Tạo một trừu tượng cho các API rất lớn và khác nhau sẽ đòi hỏi nhiều suy nghĩ, và nỗ lực nhiều hơn nữa sau đó gói mỗi chức năng.
Nguồn
2010-09-12 23:12:22
Có thể ví dụ tốt nhất về điều này là OGRE. Nó sử dụng các mô-đun để trừu tượng DirectX và OpenGL thành một dạng nội bộ thống nhất. Có rất nhiều mã, nhưng nó hoạt động khá tốt, vì vậy bạn có thể muốn kiểm tra nó. – ssube
Tôi sẽ cảm ơn thông tin. –