Aprender OpenGL mientras practicas TDD (pruebas unitarias)

He comenzado un nuevo proyecto de juego y he decidido aprender y usar OpenGL para él (el proyecto se está desarrollando simultáneamente en Windows y Linux). Al mismo tiempo, también estoy muy interesado en Test Driven Development, y estoy tratando de hacer mi mejor esfuerzo para escribir mis pruebas unitarias para liderar el diseño antes de cualquier código real.

Sin embargo, creo que mi falta de conocimiento podría estar tropezando, y sigo golpeando una pared al tratar de escribir mis pruebas unitarias para las partes "renderizadas" de la base de código. Espero que alguien pueda darme una idea de cómo continuar.

Sé que necesito probar mis interacciones con OpenGL, y no OpenGL en sí. La única forma en que puedo ver para hacer esto es abstraer OpenGL del resto de mi código hasta cierto punto, ya sea interceptando llamadas de función OpenGL o creando una interfaz de clase completamente nueva, lo que me permite crear una versión simulada de esa clase para las pruebas (Aún mejor sería abstraerlos a un conjunto de funciones que no sean de clase en un espacio de nombres separado en lugar de abstracciones de clase virtual, pero no veo cómo podría burlarme de eso).

Sin embargo, como todavía estoy aprendiendo OpenGL, solo tengo una idea pasajera de cómo debería ser esa abstracción. Por ejemplo, ¿debo envolver cada llamada de OpenGL o agruparlas en funciones de nivel superior en función de las tareas a realizar? Los envoltorios delgados harían poco más que llamar a una función particular de OpenGL, por lo que no necesitaría probarlos de antemano, pero podría terminar con una gran cantidad de funciones para ajustar. Por otra parte, si voy demasiado lejos al otro lado y agrupo varias llamadas de OpenGL por tarea, siento que terminaré donde comencé, teniendo un gran cuerpo de código usando OpenGL que necesita ser probado antes de usarlo.

¿Dónde está el medio? ¿Cómo aprendo a usar OpenGL mientras al mismo tiempo hago las pruebas de unidad adecuadas de antemano?

Respuestas a la pregunta(6)

Su respuesta a la pregunta