Test de mi gameEngine en C++

Started by Erkosone, December 06, 2018, 10:54:46 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone

Hola gente buenos dias, ando haciendo mis pinitos en C++ y como algunos saben mantengo una libreria en processing/java para hacer videoJuegos llamada gameLibZero, el problema de processing es que el render por software es super lento, y no todo el mundo tiene aceleración grafica.


Es por eso que me he dispuesto a crear el mismo game engine para C++ por los beneficios del alto percformance que esto implica supuestamente.


Bueno, no soy ningún pro de C++ pero he encontrado una libreria que renderiza sprites y textos como un demonio de rapido en C pelao.. y la estoy usando como base para la libreria que estoy montando.


Con un i5 y una grafica nvidia 1050GTX me renderiza 20.000 procesos a 60 fps.. casi na jeje..


usando angle, size, en breve usará también alpha y estas cosas que tan bien van en los juegos.


La libreria esta en estado embrionario pero vamos.. que por lo menos ya deja crear procesos con graficos y textos, en C++ a pelo.


Si alguien prueba el test del .ZIP me gustaria saber cuantos procesos le llega a crear, bueno gente, este churro de lib es open source claro está, en cuanto tenga la v0.1 la cuelgo por si alguien quiere destriparla, la colgaré en formato .ZIP conteniendo el entorno preconfigurado con todo y el notepad++, solo es descomprimir en C y usar.


En codigo fuente del ejemplo de test:
/* gameLibZero game.cpp template */
#include "gameLibZero.cpp"


// Global var block..
Texture2D img;
int st = 0;
//--------------------------------------------------------------------------------------
void setup(){
    setMode(1280, 720);
    //ToggleFullscreen();
    setTitle("gameLibZero C++ port render test with openGL 3.x");
    setFps(60);
    img = loadImage("data/images/00.png");
   
}
//--------------------------------------------------------------------------------------
class cosa : public sprite{
    public:
   
    void frame(){
        angle += 2;
    }
   
};
//--------------------------------------------------------------------------------------
class textosArriba : public sprite{
    public:
        int i = 0;
    void frame(){
        DrawFPS(10, 10);
        i = sprites.size();
        screenDrawText(GetFontDefault(), 22, i, RIGHT, 120, 10, BLACK, 255);
    }
};
//--------------------------------------------------------------------------------------
void draw(){
   
    switch(st){
        case 0:
            new textosArriba();
            st = 10;
            break;
        case 10:
           
            if(GetFPS() > 58){
                cosa* a = new cosa();
                a->x = GetRandomValue(0, 1280);
                a->y = GetRandomValue(150, 720);
                a->size = GetRandomValue(10, 80);
                a->graph = img;
                a->visible = true;
            }
           
            break;
    }
   
}
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------

oskarg

1500 procesos en mi amd a 10,aunque a mi personalmente no me gusta nada c++,es un lenguaje potente,pero complicado.

warrior_rockk

2500 procesos a 60fps en un portatil I7 con la gráfica integrada y luego van bajando los fps pero poco a poco.


Muy interesante la librería! Estaré esperando que la cuelgues para probarla. Buen trabajo!

Erkosone

Estoy integrando la Chipmunk2D con la libreria con el mismo api que monté para bennugd en su dia con la mod_chipmunk de prg a la que llamé phisics_motion_api.


Ya me empiezo a soltar con C++, yo vengo ahora mismo de pasar años en java/processing y la verdad es que en C++ programar es mas duro jeje.. es un lenguaje mas rudo y frio, me siento como un poco desamparado ahora mismo pero supongo que es por la falta de experiencia..


Pues eso, que estoy montando todo el sistema de colisiones y haber que tal, en cuanto tenga algo tangible os lo comparto ;)

Erkosone

Quote from: warrior_rockk on December 10, 2018, 07:56:30 AM
2500 procesos a 60fps en un portatil I7 con la gráfica integrada y luego van bajando los fps pero poco a poco.


Muy interesante la librería! Estaré esperando que la cuelgues para probarla. Buen trabajo!


Pues 2500 esta muy bien para ser una grafica integrada, ya que este engine que estoy montando tira completamente de targeta grafica, en mi i5 con una nvida 1050GTX me mueve 17200 procesos, cada uno con un bucle como este en su frame así que imaginate lo que tira en si el engine jeje..



class cosa : public sprite{
    public:
        int k = 0;
    void frame(){
        angle ++;
        for(k=0; k<100000; k++){
           
        }
    }
};





El source del test es este, osea, 17200 procesos con 100.000 iteraciones por proceso, no esta mal jeje..




/* gameLibZero game.cpp template */
#include "gameLibZero.cpp"


// Global var block..
Texture2D img;
int st = 0;
//--------------------------------------------------------------------------------------
void setup(){
    setMode(640, 400);
    //ToggleFullscreen();
    setTitle("gameLibZero C++ port render test with openGL 1.1");
    setFps(60);
    img = loadImage("data/images/00.png");
}
//--------------------------------------------------------------------------------------
class cosa : public sprite{
    public:
        int k = 0;
    void frame(){
        angle ++;
        for(k=0; k<100000; k++){
           
        }
    }
};
//--------------------------------------------------------------------------------------
class textosArriba : public sprite{
    public:
        int i = 0;
    void frame(){
        z = -10;
        DrawFPS(10, 10);
        i = sprites.size();
        screenDrawText(GetFontDefault(), 22, i, RIGHT, 120, 10, BLACK, 255);
    }
};
//--------------------------------------------------------------------------------------
void draw(){
    switch(st){
        case 0:
            new textosArriba();
            st = 10;
            break;
        case 10:
           
            if(GetFPS() > 58){
                for(int i=0; i<10; i++){
                    cosa* a = new cosa();
                    a->x = 320;
                    a->y = 200;
                    a->size = 50;
                    a->graph = img;
                    a->visible = false;
                }
            }
            break;
    }
   
}
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------







warrior_rockk

Quote from: Erkosone on December 11, 2018, 09:24:20 AM
Quote from: warrior_rockk on December 10, 2018, 07:56:30 AM
2500 procesos a 60fps en un portatil I7 con la gráfica integrada y luego van bajando los fps pero poco a poco.


Muy interesante la librería! Estaré esperando que la cuelgues para probarla. Buen trabajo!


Pues 2500 esta muy bien para ser una grafica integrada, ya que este engine que estoy montando tira completamente de targeta grafica, en mi i5 con una nvida 1050GTX me mueve 17200 procesos, cada uno con un bucle como este en su frame así que imaginate lo que tira en si el engine jeje..




He probado tu mismo ejemplo pero con Bennu nativo y me tira menos de 140 procesos a 60fps ejejej

SplinterGU

Quote from: warrior_rockk on December 11, 2018, 02:18:11 PM
Quote from: Erkosone on December 11, 2018, 09:24:20 AM
Quote from: warrior_rockk on December 10, 2018, 07:56:30 AM
2500 procesos a 60fps en un portatil I7 con la gráfica integrada y luego van bajando los fps pero poco a poco.


Muy interesante la librería! Estaré esperando que la cuelgues para probarla. Buen trabajo!


Pues 2500 esta muy bien para ser una grafica integrada, ya que este engine que estoy montando tira completamente de targeta grafica, en mi i5 con una nvida 1050GTX me mueve 17200 procesos, cada uno con un bucle como este en su frame así que imaginate lo que tira en si el engine jeje..




He probado tu mismo ejemplo pero con Bennu nativo y me tira menos de 140 procesos a 60fps ejejej

C vs Bennu! cosa de brujeria seria que te de igual o mejor! :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ahi probe el sample, 1400 procesos empieza a bajar los fps, arranca en 59fps... i7 linux wine integrada...

decir que la lib usa acceleracion opengl... por eso que da tanto en una grafica con acceleracion...


INFO: Initializing raylib 2.0
INFO: Display device initialized successfully
INFO: Display size: 1366 x 768
INFO: Render size: 1280 x 720
INFO: Screen size: 1280 x 720
INFO: Viewport offsets: 0, 0
INFO: GLAD: OpenGL extensions loaded successfully
INFO: OpenGL 3.3 Core profile supported
INFO: GPU: Vendor:   Intel Open Source Technology Center
INFO: GPU: Renderer: Mesa DRI Intel(R) Ivybridge Mobile x86/MMX/SSE2
INFO: GPU: Version:  4.2 (Core Profile) Mesa 18.0.5
INFO: GPU: GLSL:     4.20
INFO: Number of supported extensions: 175
INFO: [EXTENSION] DXT compressed textures supported
INFO: [EXTENSION] ETC2/EAC compressed textures supported
INFO: [EXTENSION] Anisotropic textures filtering supported (max: 16X)
INFO: [TEX ID 1] Texture created successfully (1x1 - 1 mipmaps)
INFO: [TEX ID 1] Base white texture loaded successfully
INFO: [SHDR ID 1] Shader compiled successfully
INFO: [SHDR ID 2] Shader compiled successfully
INFO: [SHDR ID 3] Shader program loaded successfully
INFO: [SHDR ID 3] Default shader loaded successfully
INFO: [CPU] Default buffers initialized successfully (lines, triangles, quads)
INFO: [VAO ID 1] Default buffers VAO initialized successfully (lines)
INFO: [VAO ID 2] Default buffers VAO initialized successfully (triangles)
INFO: [VAO ID 3] Default buffers VAO initialized successfully (quads)
INFO: OpenGL default states initialized successfully
INFO: [TEX ID 2] Texture created successfully (128x128 - 1 mipmaps)
INFO: [TEX ID 2] Default font loaded successfully
INFO: Target time per frame: 16.667 milliseconds
INFO: [data/images/00.png] Image loaded successfully (254x377)
INFO: [TEX ID 3] Texture created successfully (254x377 - 1 mipmaps)
INFO: [TEX ID 2] Unloaded texture data from VRAM (GPU)
INFO: [TEX ID 1] Unloaded texture data (base white texture) from VRAM
INFO: Window closed successfully


pinta muy bien!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Gracias Splinter  :D


Estoy integrandole a los procesos la Chipmunk2D que tan buen sabor de boca me dejo en bennuGD en su dia, voy a intentar hacer un engine lo mas simple y parecido a los divLikes ya por puro ejercicio de hacerlo y por que para mi C++ es una asignatura pendiente desde hace muchos años, este es el momento de liarme a ello jeje..


Cuando tenga algo minimo presentable para hacer juegos montaré unos videos como siempre con el contenido y ejemplos, se que el codigo C es sencillo de compilar para web con emscriptem, llegado el momento creo que si alguien tiene experiencia en este tema me vendrá genial algo de ayuda  ;)


Por ahora ya tengo el sistema de textos, de procesos, y de fisica integrado, con la raylib y la Chipmunk2D como unicas librerias externas y ambas cumplen el standar C99 así que la portabilidad deberia ser bastante amigable.


Bueno.. sigo con ello, pasado ya el bache de liarme con C++ y darme de hostias con un lenguaje practicamente inexplorado para mi ahora ya empieza la cosa a ser productiva jeje.. me he tirado años con processing/java y la verdad es que C++ es un poco diferente, aunque los conceptos son los mismos al fin y al cavo.

warrior_rockk

SI , por supuesto da mejores cifras porque, por muy integrada que sea la gráfica del portátil, lleva aceleración GPU  :)
Si tengo tiempo voy a testear el ejemplo pero con Pixtudio que también usa aceleración...

warrior_rockk

Haciendo la prueba con Pixtudio 1.0.0 me da 1100 procesos a 60fps con OpenGL...

Transdiv

La estuve probando en mis maquinas y estos son los resultados mas o menos:
- En una I5 con Win7-64x con tvideo AMD Radeon R7 200 series me da 6180 a 59 fps.

- En una I7 con Win10-64x con tvideo Nvidia Geforce GTX 760 llego hasta 8200 a 59 fps, pero luego la pantalla cambio y aperecia como un ventilador de conejos y el fps llego hasta 9400, luego el mensaje de texto fue cubierto por los sprites y no pude destinguir la velocidad.

- Una Intel Pentium GC3230 3.0Mhz con Win7-64x con Nvidea Geforce GT 620 da 2150.

- Una Intel Pentium GC3230 3.0Mhz con Win7-64x con video HD Intel integrada da 1100.

Te atacho una libreria que encontre hace un tiempo y creo que es algo parecido a lo que estas haciendo. Las atacho porque en la red no he encontrado un link para bajarlos, no son muy grandes y atacho la version 0.4 porque esta tiene unos manuales en pdf que no tiene la version 1.0


Erkosone

Gracias por los test Transdiv ;)


Lo del ventilador de conejos jajajajaa es por que el batch del render tiene como tope 7200 acciones y cuando pasas ese numero de procesos renderizados se renderizan en un segundo buffer y hace el tonto, actualmente ya lo he corregido aumentando a 20000 el numero de renderizados maximos y ya no tengo ese problema.


Esta libreria la habia escuchado alguna vez, gracias por colgarmela, le hecharé un vistazo, pero estoy tan contento con la raylib que no creo que la cambie por ahora, aunque siempre va bien tener alternativas.
Lo dicho, gracias por los test ;)

Erkosone

Bueno pues ya tengo la collisionMouse(), todos los metodos de la lib de fisica listo, y sobre todo ya tengo solucionado el tema de los ID y los type..


Sacar el type de un objeto como en DIV/bennugd ha sido algo divertido de decubrir por que nunca lo habia hecho, osea, obtener desde la clase base abstracta el identificador del tipo de clase derivada que la instancia..
Pero vaya.. que ya lo tengo y funciona perfecto jeje..


Aqui ya se pueden ver unas cajas con fisica, y pintado en ellas el ID, el collisionMouse() y el type de cada proceso ;)


Esto marcha!