Primitivas gráficas, borrarlas, si, no y como

Started by Danielo515, October 24, 2010, 01:58:38 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Buenas a todos. El otro día me puse con un proyecto de lo mas tonto pero me ha picado, ASI que me he puesto a sacarlo adelante. Bueno al grano, el caso es que hago un uso intensivo de las primitivas gráficas para dibujar en mapas. El casi es que no se si es necesario cuando las uso para pintar, por ejemplo en el gráfico de un disparo ( previamente creado co new graph) si luego debo borrarlas y como. Normalmente después de usar unas cuantas hago un delete(0) y arreando. El problema es cuando varios procesos dibujan, no se si unos se pisan a otros, si eso daría error de accesos o que. Que alguien me ilustre por favor. Graaacias

Drumpi

Si no recuerdo mal, cada vez que haces un draw_* te devuelve el ID de dicha primitiva, que puedes usar luego para moverla (MOVE_DRAW) o borrarla (DELETE_DRAW). Para la segunda función, supongo que con 0 se borran todas las primitivas.
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)

Windgate

Quote from: Drumpi on October 24, 2010, 07:11:44 PM
Si no recuerdo mal, cada vez que haces un draw_* te devuelve el ID de dicha primitiva, que puedes usar luego para moverla (MOVE_DRAW) o borrarla (DELETE_DRAW). Para la segunda función, supongo que con 0 se borran todas las primitivas.

Eso mismo
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Danielo515

Vale, a ver si me explico mejor.

Se como usar las primitivas, no hay más que mirar el wiki para saber como se usa cada función. Pero una cosa es saber usar las funciones y otra es saber en que situaciones sí, en cuales no y cuales son sus consecuencias.

Imaginemos que yo hago varios procesos, y que "nacen" cuatro seguidos, y que cada uno hace uso de primitivas graficas solo para crear su gráfico. ¿Es posible que alguno haga un delete draw mientras otro esta usando un draw y eso de lugar a errores?

Si no borro las primitivas, ¿llega un momento en que da un error como el de demasiados textos o se empiezan a sobreescribir?

Esos son los detallitos que me hacen falta.

Muchas gracias de todos modos.

Windgate

QuoteImaginemos que yo hago varios procesos, y que "nacen" cuatro seguidos, y que cada uno hace uso de primitivas graficas solo para crear su gráfico. ¿Es posible que alguno haga un delete draw mientras otro esta usando un draw y eso de lugar a errores?

A eso respondo que no, cada proceso puede tener prioridad distinta, pero se resuelve todo su ciclo hasta FRAME sin ser interrumpido por los demás.

A las demás preguntas yo también dudo, a ver qué nos dicen xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

En principio no debe haber problemas con las primitivas gráficas, pero todo es ponerse y probarlo (255 primitivas se pintan en 5 segundos). La demo de Fenix no se cerraba por ese motivo.

Respecto a conflictos entre procesos, olvídate: una primitiva es como un proceso nuevo pero sin código ni variables locales. Lo más que puede pasar es que un proceso se ejecute más tarde que otro y su primitiva "tape" a la anterior, o que intentes mover o borrar una primitiva que ya no existe (y eso sí puede dar un error grave y cerrarse el programa sin decir el error).
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

leo ahi la palabra "cerrar", el bug en las primitivas se soluciona en la version que estoy liberando, ya fue corregido hace 1 o 2 meses.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Splinter, no alcanzo a entender lo que quieres decir. ILUMÍNANOS!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quote from: SplinterGU on October 26, 2010, 12:51:42 AM
leo ahi la palabra "cerrar", el bug en las primitivas se soluciona en la version que estoy liberando, ya fue corregido hace 1 o 2 meses.

Si es lo que yo digo, más que un bug, es una feature normal: si accedes a una dirección de memoria que no existe mediante un puntero, es normal que se cierre. Vale que puede ser menos brusco o dar un aviso, pero es lo que hay, el PC no es un ser inteligente.
Es como intentar detener un scroll que no se ha iniciado, que también se cerraba el programa (creo que el fallo que tuve hace tiempo era ese).
No son bugs, son errores graves de programación, un defecto en el manejo de recursos.
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

un error de programacion es un bug, y mas si es grave... pero hay veces que esos errores son por acceder a direcciones que salen de calculos complejos, y otra es hacerlo directo sin un calculo o por no inicializar una variable, como sea, esos son bugs.

prueben con la ultima version y despues comentan si sigue comportandose mal.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2