Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Release En Directx

Iniciado por vincent, 16 de Agosto de 2005, 08:38:55 PM

« anterior - próximo »

vincent

 Muy buenas,

cuando se hace un release de un recurso en DirectX ( una textura por ejemplo ) se elimina todo el recurso, es decir si le hemos hecho n AddRef se los carga todos, o solo se elimina un AddRef?

En el segundo caso, como se puede hacer para cargarnos toda la textura?

Gracias!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

_Grey

 
CitarEn el segundo caso, como se puede hacer para cargarnos toda la textura?

Cuando no queden referencias a esta se eliminara con el ultimo release.

vincent

 O sea, que en algún sitio debo tener un contador de referencias a la textura, no?
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

zupervaca

 los objetos COM ya proporcionan esa funcionalidad, tu solo llama a Release

vincent

Cita de: "zupervaca"los objetos COM ya proporcionan esa funcionalidad, tu solo llama a Release
Perdón pero estoy un poco espeso....  :(

Con esto quieres decir que con una sola llamada ya es suficiente?

Os explico el ejemplo para ver si queda más claro. Tengo un manager de texturas que cada vez que alguien quiere cargar una textura mira ( en un map de stl ) si la textura ya está cargada. En caso afirmativo hace un AddRef de la textura y si no está cargada, pues la carga y ya está.

El caso es que al finalizar la aplicación quiero cargarme todo el manager de las texturas, con lo que me pateo todo el map y voy haciendo release de las texturas.

En caso que haya echo algun addRef con un release tendré suficiente o tengo que hacer tantos release como addRef.

Gracias y perdón por la espesura!  ;)  
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Zaelsius

 Claro, tienes que hacer un release por cada addref.

De todas maneras, si vas a manejar todo el cotarro con un manager, te puede resultar más útil utilizar un contador de referencias propio.. cuestión de gustos quizá. El diseño del motor deberia ser tal que al liberar todos los objetos que usan esa textura, la textura se liberase tambien.

Si al destruir el manager de texturas, éste detecta que quedan texturas sin liberar, pues las elimina, y ADEMÁS, informa de ello, ya que significaría que el objeto asociado(malla, escenario, terreno etc) que la usa no ha sido liberado correctamente.

Por otra parte, existe la posibilidad de no eliminar la textura al llegar el contador a cero, y mantenerla en memoria siempre que el total de texturas "cacheadas"/"en reserva" no exceda cierta cuota. Esto puede ser útil para disminuir tiempos de carga entre niveles con conjuntos de texturas similares.

vincent

 Ya me parecía a mi...

si yo creo que lo mejor es tener un contador de referencias propio.

Me parece muy interesante lo que comentas de mantenerlas cacheadas. Realmente lo que más se tarda en cargar ( por lo menos en mi caso ) son las texturas.

Por cierto, que en codesampler hay unos code snippets muy interesantes sobre, entre otros, este tema de las referencias. Lectura recomendada!

Gracias!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com






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.