January 23rd, 2007

Este snippet muestra una clase de ventana completa, incluyendo el problemático wndProc, que es es algo complicado incluir en la clase debido a que se tiene que pasar como parametro lpfnWndProc al WNDCLASS. Esto es debido a que no se puede pasar un puntero a una función miembro de una clase a menos de que sea estática o que el puntero vaya a ser usado en el contexto de un objeto de una clase, que sigue sin arreglar el problema. La solución que me ha parecido mas viable es la que se muestra en este hilo de gamedev.net, en la que se usa una función miembro estática que sirve de dummy para la verdadera función interna de la clase, comunicandose entre ambas vias el area de datos de usuario HWND de 32-bit, por donde se envía una referencia del objeto CVentana.

Para ver mas detalladamente el problema en la página The Function Pointer Tutorials esta que son y como usar los punteros a funciones en c++, este es un artículo de msdn como crear un puntero a función miembro y en linuxquality hay otro.

Continuar Leyendo… »

September 23rd, 2006

Hace unos cuantos meses y como parte de un proyecto de creación de videojuegos desarrolle este pequeño test para medir el rendimiento de render de triángulos de manera simple. La prueba se realizó con el objetivo de mostrar cuantos triángulos podría mostrar un juego no optimizado bajo una cierta resolución, en modo ventana o pantalla completa

La prueba genera una cantidad especificada de triángulos y los muestra con un color y posición aleatorio dentro del espacio de dibujo, luego realiza diez mediciones de cuantos frames se pueden dibujar en un segundo. Al terminar todas las pruebas el programa genera un dialogo estándar "guardar como", para obtener la dirección y el nombre de un archivo .txt que contiene todos los datos de la prueba, con alguna información del sistema (memoria, procesador y tarjeta de video).

Todo la funcionalidad de la prueba es accesible a través de la clase CPolygonTest , declarada en el archivo PolygonTest.h. El código típico (incluido en principal.cpp) para ejecutar una prueba es:

C++:
  1. #include <windows.h>
  2.  
  3. #include "ventana.h"
  4. #include "LibreriasGL.h"
  5. #include "PolygonTest.h"
  6.  
  7.  
  8.  
  9.  
  10. int WINAPI WinMain( HINSTANCE    hInstance,HINSTANCE hPrevInstance,LPSTR    lpCmdLine,int nCmdShow)
  11. {
  12.  
  13.     CPolygonTest test;
  14.  
  15.     test.correrPrueba(50000,240,320,false,32,1,10000,1000);
  16.     test.correrPrueba(80000,240,320,false,32,1,10000,1000);
  17.     test.correrPrueba(100000,240,320,false,32,1,10000,1000);
  18.     test.correrPrueba(50000,480,640,false,32,1,10000,1000);
  19.     test.correrPrueba(80000,480,640,false,32,1,10000,1000);
  20.     test.correrPrueba(100000,480,640,false,32,1,10000,1000);
  21.     test.correrPrueba(50000,600,800,false,32,1,10000,1000);
  22.     test.correrPrueba(80000,600,800,false,32,1,10000,1000);
  23.     test.correrPrueba(100000,600,800,false,32,1,10000,1000);
  24.     test.correrPrueba(50000,480,640,true,32,1,10000,1000);
  25.     test.correrPrueba(80000,480,640,true,32,1,10000,1000);
  26.     test.correrPrueba(100000,480,640,true,32,1,10000,1000);
  27.     test.correrPrueba(50000,600,800,true,32,1,10000,1000);
  28.     test.correrPrueba(80000,600,800,true,32,1,10000,1000);
  29.     test.correrPrueba(100000,600,800,true,32,1,10000,1000);
  30.     test.finalizarPruebas();
  31.    
  32.  
  33. }

En una futura versión (de existir) tendría las siguientes modificaciones:

- Posibilidad de elegir entre la versión Microsoft y OpenGL del driver.
- Otros modos de render con optimizaciones.
- Mayores opciones de control sobre OpenGL.

Nota: Este software - código fuente se proveen sin garantía. Úsese bajo su propio riesgo.