Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ideas para un resource manager

Iniciado por killrazor, 26 de Agosto de 2011, 01:02:48 PM

« anterior - próximo »

killrazor

Hola a todos.

Tengo algunas dudas para hacer un gestor de recursos. En estos momentos tengo un sistema (unas pocas clases) de fileSystem virtual, que esta basado en physfs de icculus. Por otro lado tengo unos cuantos managers para cargar imagenes y manejar texturas, y algunas cosas mas.

Ahora quiero diseñar algo que este en el medio de esto para facilitar las cosas. En principio, mi idea es cargar los recursos desde un script o desde código de manera que desde fuera de resource manager no se tenga que trabajar con rutas. Ademas creo que puede ser interesante que tenga un contador de referencias para cada recurso. Otra cosa es si el resource manager deberia ser el encargado de llamar a los managers particulares para que carguen un recurso o es el manager particular quien, a partir de un alias, habla con el resource manager para pedir el path?

El motivo por el que escribo este post es para que me deis algunas ideas sobre que deberia tener un gestor de recursos para ser completo. No hace falta nada de código ni nada. Unas cuantas sugerencias o algun enlace y yo me busco la vida :)

Vicente

Permite cargar recursos desde un stream. Un path está por lo general muy asociado a un sistema de ficheros, pero un stream es mucho más flexible. Te podría venir el recurso por un socket, o un webservice, o parte de un fichero .zip que tengas en memoria,...

killrazor

Esa es buena. No lo habia pensado  :o

Solo una pregunta. Si 'cargo' desde un stream, se presupone que el resource manager tambien tiene que cargar ficheros? Lo digo por que en muchos casos ya tengo hechos managers que cargan ficheros (como el de imagen). Pero segun lo que dices, seria el resource manager quien tendria que cargarlos? O deberia cargarlo en memoria como un conjunto de bytes, y despues pasarle el puntero a los managers especializados en cargarlos?

Vicente

Supongo que sería a nivel de manager especializado. Por ejemplo el que tienes que carga imágenes, mira por ejemplo como se puede cargar una imagen en .NET:

Image.FromFile(string)
Image.FromStream(Stream)

A nivel de tu manejador de recursos, la imagen se representará por un identificador que supongo que será una cadena de texto, pero a nivel de manager especializado estaría genial que las cosas puedan venir de un stream.

Sobre lo de cargar en memoria, hay veces que lo mismo puedes guardar cosas en memoria. Si por ejemplo tienes un manager que trabaja sobre un .zip (o cualquier otro fichero que tenga muchos recursos agrupados en un solo fichero) que te ha venido de un servidor, o lo copias a disco, y cuando quieras algo, lo abres, buscas y tal, o te lo guardas en memoria y trabajas desde ahí.

yorch

Quizás también puedes mirar el Asset Manager que incluye Unity. Yo no controlo mucho este engine, pero pienso que tiene un enfoque data-driven lógico. No sé del todo si Unity tiene un enfoque bastante centrado en diseño, en vez de arquitectura de software pura y dura, pero por si te inspira...

http://unity3d.com/support/documentation/Manual/Asset%20Import%20and%20Creation.html
http://unity3d.com/support/documentation/Manual/Behind%20the%20Scenes.html

killrazor

Hola yorch, muchas gracias.

Tiene algunos detalles interesantes, pero la escala de Unitiy no es la de lo que estoy haciendo :) (ni mucho menos). Ojala yo pudiera planificar un engine con un servidor de proyectos :).

En cambio el hecho de procesar metadatos por separado del archivo, me parece un buen detalle a considerar. Así, un recurso seria datos (un .png) mas un archivo de metadatos asociado. Eso me parece muy acertado.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.