Sí, así es como funciona. Al abstraer la API de gráficos que utiliza, la está eliminando de lo que el programador debe preocuparse. Esto es similar a la forma en que GDI abstrae el dispositivo en el que se escribe, por ejemplo, que el programador no necesita preocuparse por ello.
En este sentido, su biblioteca de funciones similar a la anterior sería como la HDC. Es la interfaz de esta abstracción.
Sería más difícil que una simple comprobación de API, y luego llamar a la (s) función (es) apropiada (s). Las dos API (DirectX y OpenGL) son muy diferentes, y no sería fácil resumirlas en una única interfaz, especialmente si desea cubrir la mayor parte de la funcionalidad.
Necesitarás más abstracción que simplemente funciones universales. Necesitarías crear estructuras más complejas.
Digamos hipotéticamente que OpenGL requirió que llamara a la función A, luego la función B para que algo sucediera, pero DX requirió que llamara al func B, luego al func A. Para acomodar esto, necesitaría hacer algo similar a esto:
void functionA(...) {
if (OpenGL) {
glFuncA();
} else {
//store parameters
}
}
void functionB(...) {
if (OpenGL) {
glFuncB();
} else {
dxFuncB();
dxFuncA(saved params);
}
}
No es un muy buen ejemplo, pero demuestra el principal. Crear una abstracción para API muy grandes y diferentes requeriría mucho pensamiento, y mucho más esfuerzo luego de envolver cada función.
Posiblemente el mejor ejemplo de esto es OGRE. Utiliza módulos para abstraer DirectX y OpenGL en una forma interna uniforme. Hay un montón de código, pero funciona bastante bien, por lo que es posible que desee comprobarlo. – ssube
Gracias por la información. –