Estado del soporte archivos 1bpp?

Started by darío, February 18, 2016, 12:06:38 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

no es tan simple drumpi... y las operaciones de paso entre una memoria a otra son muy costosas, no son para nada rapidas.

si mal no recuerdo, en opengl no tenes paletas 8bits...

tampoco podes modificar facilmente lo que ya cargaste, tenes que descargarlo a ram, modificarlo y luego mandarlo de nuevo a vram... y no con todas las texturas se puede, hay que copiar/transformar y otras operaciones costosas... todas son costosas, y el rendimiento seria peor que hacer render por soft...

podes renderizar una textura sobre otra, pero no es una filosofia diferente...

es un mundo bastante distinto...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Lo que quiere drumpi se soluciona facilmente con lo que yo he propuesto. Puesto que los mapas de 8bits tienen q ser explicitamente convertidos en nuevos mapas de 32 el que quiera cambiar la paleta lo puede hacer, pero tendra q recrear el grafico de 32. Todos los colores de un map de 8 bita son representables en 32 argb...
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

Algo hay que hacer, porque los cambios de color en un mapa directamente siempre terminan perdiendo información. Es decir, si yo paso todos los pixels rojos a azules, después no puedo deshacer la acción, porque los que ya eran azules también se volverían rojos.
La ventaja de las paletas era eso, que era un "filtro" que convertía de unos colores a otros, y no perdías información (repetías colores visualmente, pero no era el mismo color).

Si tan costosas son las modificaciones de los mapas, entonces se pierden muchísimas cosas interesantes, entre ellas, el scroll a mapa ¿no? Recuerdo cuando usaba VSE (librería que permitía crear modos7 con alturas), necesitaba un mapa de textura y otro de alturas, y modificando el segundo en runtime con DRAW_BOX hacía plataformas móviles. Ni qué decir de, por ejemplo, hacer efectos de olas en el agua y...
Bueno, siempre puedo seguir con BennuGD r307 :D :D :D
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

no, scroll a mapa es un render de una textura sobre otra, son 2 texturas que no van a RAM.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Yo es que no he llegado a trabajar con VRAM, así que no sé cómo va eso ^^U
Y eso de render de una textura sobre otra ¿cómo va?
¿Sería posible hacerlo teniendo una tabla de conversión de 256 colores concretos? Lo digo porque se podría tener para 8 bits dos mapas guardados: uno con la info de color original (el valor de la posición de la paleta), y otro donde se copie pero con los colores transformados de byte(paleta) a int(rgb).

No sé, sería lo ideal, tener la textura en la VRAM con pixels de 8bits, y la tabla de transformación a RGBA (paleta), y que sea la gráfica la que haga la conversión sobre la imágen en 32bits (no sé si se puede usar el multiprocesamiento de la GPU para eso, o si lo permite SDL u OpenGL).
Tampoco sé cuán costoso es el paso de RAM -> VRAM ¿Más de de tarjeta SD -> RAM, que de RAM -> RAM y que las herramientas PUT?
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

no recuerdo el tema con los 8bits, pero las pruebas fueron quebraderos de cabeza, y un sin fin de no resultados...

con respecto al multiprocesamiento de la GPU, lamento informar (que creo es por limitaciones SDL, no me acuerdo, tengo que volver a mirar los fuentes de SDL), no permite multiprocesamiento, o sea, las texturas generadas en un thread sirven solo para ese thread, incluso no recuerdo si es a nivel global de la implementacion... lo seguro es que el multiprocesamiento es un problema... de hecho tengo problemas para los load de graficos en background, porque creo la textura en la carga... o quizas era a nivel surface... voy a tener que splitear un poco mas la cosa... ya vere, son varias cosas que estoy viendo a la vez... y ahora que estoy un poco entusiasmado estoy metiendo mano al asunto...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

En realidad no hablaba del multithreading clásico de las CPUs, más bien de que, internamente, las GPUs llevan cientos de hilos de ejecución simultaneos, usados para hacer operaciones de multiplicación+suma de forma paralela y masiva.
Pero claro, yo hablo de HW y de fotos de rayos-x tomadas a viejas GPUs de la época del Pentium II :D

Si supiera más de eso, o de OpenGL o de SDL, sería de más ayuda, pero ahora sólo puedo dar tiros a ciegas, con la esperanza de encenderle una luz a alguien.
Me gustaría poder ayudar, pero tendría que entrar haciendo algo pequeño, e ir ampliando mi alcance poco a poco al resto del código... y ahora estoy en modo "terminar proyectos" (Montezuma, el juego de la Jam del año pasado, el TFM... incluso he estado leyendo esta noche el worklog que escribí en el foro del Echo, dado que me ha dado por revisar el código del editor de mapas de tiles 2.0, para poder terminarlo).
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

ahi ya no se, supongo que si lo hace el GPU.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Lo que dice Splinter es correcto: en SDL las texturas creadas desde hilos que no sean el principal no son válidas.

Sobre lo que habláis: creo que previamente lo que busca vulkan es dar control al programador sobre esa clase de cosas, aunque no sé mucho de eso...

darío

Volviendo a retomar el tema original (archivos 1bpp). Tengo otra duda:


       
  • En Bennu, imagino que sí que se pueden pintar estos gráficos en pantalla. El color 0 se considera opaco o transparante? Cambia la respuesta en función de si el modo de video es de 16 o 32? Qué ocurre con el modo 8? Es posible hacer un set_mode a 1bpp? (Cool! :D)
Gracias! (a cambio de toda esta información en breve tendréis una librería en .NET con soporte para todos los archivos Bennu/PixTudio)... Así el que quiera hacer editores FPG, FNT, MAP o PAL ya no tendrá excusa...

Darío
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

Hasta donde recuerdo, los mapas de 1bpp son tratados de la misma manera que las primitivas gráficas o los textos de 1bpp (por ejemplo, la fuente del sistema): usan dos colores, el transparente y el que se defina mediante DRAWING_COLOR (bueno, los textos tiene SET_TEXT_COLOR, pero ya me entiendes).
Eso debería funcionar en todos los modos de color.

No recuerdo que existiera un modo de color de 1bit, pero tras ver lo que se hace con el emulador de Pico8 te dan ganas de que incluso haya modo de 3 ó 4 bits :D :D :D

Lo que no se si llegué a entender bien es que si una línea de un mapa no es múltiplo de 8, los bits sobrantes del último byte se descartan ¿no?
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)