Problemas de rendimiento

Started by warrior_rockk, January 13, 2016, 07:33:05 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Goku jr

#45
Buenas!
Pues Josebita debo decirte que a mi con D3D me va mas lento que con OpenGL

DIRECT 3D



OPENGL


josebita

#46
Quote from: Goku jr on January 18, 2016, 10:13:45 PM
Buenas!
Pues Josebita debo decirte que a mi con D3D me va mas lento que con OpenGL
Me refería al driver de Intel. Pero vamos, que con 1000fps creo que nos da para hacer juegos :)
Por cierto, Free, las últimas versiones que compila Pixel están alojadas en en hilo del FAQ.
Quote from: FreeYourMind on January 18, 2016, 08:41:03 PM
ya se que no hay releases pero asi las betas tambien hay que buscarlas xD


FreeYourMind

como cambio a opengl y directx ? con opengl ira mas rapido no ?

josebita

Quote from: FreeYourMind on January 19, 2016, 12:38:40 PM
como cambio a opengl y directx ? con opengl ira mas rapido no ?
Es algo que sólo se soporta desde ayer y con la versión que subí. Debes cambiar el valor de la variable de entorno SDL_HINT_RENDER_DRIVER a cualquiera de los valores descritos aquí. PERO no recomiendo que lo hagáis salvo que haga falta: puede haber bugs en SDL que hagan que el comportamiento del renderizador basado en Direct3D no sea idéntico al basado en OpenGL y eso redundaría en bugs (ya nos los hemos encontrado).

Por defecto se usa OpenGL, que es lo más portable y sencillo.

FreeYourMind

donde lo haría al llamar el interprete ?


Algo asi ?

SDL_HINT_RENDER_DRIVER=direct3d
pixinterprete mijuego.dcb

josebita

En Windows puedes hacer así:
SET SDL_HINT_RENDER_DRIVER="direct3d"
pxtp -d test.dcb
(El "-d" no te hace falta, pero te imprimirá en consola el driver que se está usando, que debería ser "direct3d")

warrior_rockk

Ya he probado los diferentes modos y, en resumen, OpenGL muy lento, Direct3D algo mas rapido y Bennu muchisimo mas rapido. He realizado las pruebas en 3 equipos distintos en los cuales todos llevan tarjetas integradas Intel de distinta generación (pero de la misma familia).





Erkosone

Hola gente, yo me he encontrado con algo muy parecido en java acelerado por openGL y bueno, quería compartir mi experiencia.


1. con el render por software java2D directamente las operaciones con 'pixels' se hacen en ram, sin mas, unicamente en ram, esto es lento.
2. Con P2D que es el render que uso que tira de openGL sucede que el rendimiento aumenta una brutalidad, PERO todo cambia cuando hago operaciones a nivel de pixel.. ya que por openGL no se pinta a nivel de pixel, si no a nivel de textura o eso he entendido yo.. y bueno.. si no hago lecturas o escrituras a nivel de pixel me buela el render. en el momento en que por openGL hago un simple dumpeo de pixels de una imagen a otra.. pff.. es mucho mas lento que por software ya que  tengo que capturar el pixel de la memoria de la targeta, lo copio a la ram, lo proceso, y lo devuelvo a la memoria grafica en forma de textura otra vez.. y así para cada pixel.


Este es un cuello de botella que yo me he encontrado con openGL, no se si esta info os vale para algo, pero creo que alomejor van por aquí los tiros..


Yo para hacer un virtual resolution en mi engine dumpeo constantemente a nivel de pixel un mapa que es el que uso de blitter al surface que es la pantalla o ventana.. esto me mata el rendimiento.. pero si lo hago sin aceleración grafica funciona mucho mas rapido.


Erkosone

Os pego un trozo de mi blitter en java.. ya se que no tiene absolutamente nada que ver con vuestro código, pero mirad, la linea que está comentada es el antiguo sistema de volcado de imagen al render final de la memoria de vídeo, y lo que está sin comentar es el sistema actual de volcado..


La diferencia es que antes en Android me trabajaba mi plantilla de java a unos 3 FPS y ahora a unos 80 fps.. el cambio es una barbaridad, quizá algún trozo de vuestro proyecto está tirando de copia de imagen o lectura a nivel pixel? en serio que se nota una locura el cambio de sistema y en realidad hacen lo mismo en pantalla ;)




  if(virtualResolution) {
    //copy(blitter, 0, 0, virtualResolutionWidth, virtualResolutionHeight, 0, 0, resolutionWidth, resolutionHeight);
    beginShape();
    texture(blitter);
    vertex(0,0,    0,0);
    vertex(resolutionWidth,0, virtualResolutionWidth,0);
    vertex(resolutionWidth, resolutionHeight, virtualResolutionWidth,virtualResolutionHeight);
    vertex(0, resolutionHeight, 0,virtualResolutionHeight);
    endShape();
  }
  else {
    //copy(blitter, 0, 0, resolutionWidth, resolutionHeight, 0, 0, resolutionWidth, resolutionHeight);
    beginShape();
    texture(blitter);
    vertex(0,0,    0,0);
    vertex(resolutionWidth,0, virtualResolutionWidth,0);
    vertex(resolutionWidth, resolutionHeight, virtualResolutionWidth,virtualResolutionHeight);
    vertex(0, resolutionHeight, 0,virtualResolutionHeight);
    endShape();
  }





Digamos que antes pegaba mi buffer de graficos en la memoria de vídeo a nivel de "imagen", y ahora creo un rectangulo por openGL y le asigno como textura mi blitter, y cambia la cosa que se mea la perra jeje.

FreeYourMind

el maximo con directx ha sido 995

Drumpi

Lo siento, chicos, he intentado probarlo pero mi Kubuntu no tiene SDL2 en los repositorios, y no puedo actualizar mi Precise Pangolín (12.04) hasta que termine cierto proyecto.
A ver si mañana arranco con Windows y os doy mi resultado.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

a ver, me voy a meter en la conversacion...

warrior_rockk, con una intel grafica integrada te deberia ir mejor que BennuGD, yo tengo tambien una integrada intel (aunque tengo un i7 8 cores portatil) y mi version bennugd opengl, va muchisimo mas rapida que la version bennugd con render por software, asi que la version pixstudio deberia ir tambien mas rapido.
en un momento te comentaron si tenias seteado el vsync forzado o no para opengl, no importa si tu no tienes activado el vsync en el programa en bennugd, esta configuracion se puede hacer global, desde la app de configuracion opengl, te hablo de memoria, pero el seteo es algo asi como "Forzar uso Vsync o dejar lo decida la aplicacion". habias comentado que activandolo y desactivandolo obtenias diferencias.
por otra parte, pantalla completa va mas rapido que ventana.
luego freeyourmind, no te sirve de mucho comparar un ejemplo en bennu con un write en pantalla vs uno sin write en pantalla, el dibujado de textos es muy, muy costoso.

ahh!!! se me ocurre que estas probando en modo ventana, y opengl creo que va seteado por defecto a 32 bits, tu programa setea a 16 y no se a cuanto tengas el desktop, pero tu programa ira mas lento si la profundidad de colores no coincide con la del escritorio. En que resolucion tenes seteado el escritorio?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

warrior_rockk

He revisado la configuración de la sincronización vertical y la tengo en dejar que decida la aplicación, con lo que no me afecta. De todas maneras, lo aquí se está tratando de averiguar , no si es más rápido Opengl o d3d, si no, porque con equipos con gráfica integrada, es más rápido bennu sin aceleración, que el resto. He realizado las pruebas a pantalla completa y comprobando que tengo la misma profundidad de bits y nada, bennu sigue saliendo ganador....

panreyes

Se me ocurre también que en PixTudio el modo de bits es siempre 32 (aunque pongas set_mode(x,y,16)) y que en Bennu lo ejecutas en 16 bits. La comparativa no es justa entonces :)

Por otro lado, las tarjetas gráficas Intel con 3 años o más son muy lentas, en comparación con las actuales. Hice una prueba hoy con un test que suele coger 170fps en Intel actuales y con un portátil de hace 5 años, con una Intel integrada, iba a 17fps.