edivc/ediv/explica_entrypoints.txt

61 lines
2.9 KiB
Plaintext

[14:10] > veamos
[14:10] > alguna vez has hecho una dll para div2?
[14:10] > o has visto el source de una?
[14:10] > (div2 o div1) :p
[14:11] [@Daijo] varias / si
[14:11] [@Daijo] pero el cd del div2 lo tengo jodio
[14:11] [@Daijo] y asi poco puedo rekordar komo era xD
[14:11] > ok
[14:12] > a ver
[14:12] > kizas recuerdes
[14:12] > ke habia dlls
[14:12] > como la hboy o la polys, por ejemplo
[14:12] > que dibujaban cosas en la pantalla
[14:12] > modificando el buffer
[14:12] [@Daijo] sips
[14:12] > en una funcion llamada post_process_buffer
[14:12] > pues bien, esa funcion es un entrypoint
[14:12] > que div ejecuta
[14:13] > justo antes de actualizar el buffer en la memoria de video
[14:13] > ese tipo de funciones
[14:14] > se exportan a div con DIV_export("nombre_de_funcion",puntero_a_la_funcion);
[14:14] > DIV las guarda en una tabla
[14:14] > y cuando llega el momento de ejecutar cierta funcion
[14:14] > por ejemplo, ha terminado de dibujar los graficos y debe llamar a post_process_buffer
[14:14] > lo hace asi:
[14:15] > puntero=DIV_import("post_process_buffer");
[14:15] > puntero();
[14:15] > sentiende hasta ahora?
[14:16] [@Daijo] mas o menos
[14:16] > weno
[14:16] > pues ojo al dato porke lo ke viene ahora es un poco complicao
[14:17] > en eDIV
[14:17] > la implementacion seria como sigue:
[14:17] > para que la exportacion/importacion sea mas rapida, usamos ints en lugar de cadenas
[14:17] > esos son los #defines que puse en el mail
[14:18] > por ejemplo EDIV_post_process_buffer es 13
[14:18] > para que no haya errores, las funciones se prototipan en el export.h
[14:18] > ya que deben tener unos parametros determinados
[14:19] > entonces en la dll se mete una funcion llamada post_process_buffer()
[14:19] > y ahi se mete el codigo ke se kiera
[14:20] > en el exportafuncs, exportamos la funcion con EDIV_Export_Entrypoint(EDIV_post_process_buffer,post_process_buffer);
[14:20] [@Daijo] ahá
[14:20] > El stub recoge esa exportacion y la guarda en una tabla de entrypoints
[14:21] > entonces, nos situamos en la graphics.dll
[14:21] > hemos pintado el fondo y todos los procesos en el buffer
[14:21] > y toca llamar a post_process_buffer
[14:22] > de esta manera:
[14:22] > Call_Entrypoint(EDIV_post_process_buffer);
[14:23] > La funcion Call_Entrypoint recorre la tabla de entrypoints y va ejecutando uno a uno los que corresponden a EDIV_post_process_buffer (13)
[14:24] > eso es, basicamente como funciona todo el sistema
[14:24] > como ya comentaba en el mail
[14:24] > podemos añadir un entrypoint llamado EDIV_frame
[14:24] > que se llama POR EL STUB en cada frame
[14:25] > de forma que podemos colocar todas las rutinas de dibujado en graphics.dll
[14:25] > ya que ésta tendra en su función frame() las rutinas necesarias
[14:25] > y a su vez llamará a otros entrypoints, como buffer_to_video, put_sprite, o post_process_buffer
[14:26] > pillas la cosa? :)
[14:26] [@Daijo] sips
[14:26] [@Camvoya] xDDDDDDDDDDDDDD
[14:26] > ea, pos eso es to