¿Puede un juego XNA usar más de 1.5 GB de RAM y no bloquearse?

Me pregunto si es posible cargar toneladas de texturas en la memoria para un juego XNA y no salir de las excepciones de memoria de alguna manera.

Cargue específicamente texturas de flujos de archivos durante el tiempo de ejecución.

preguntado el 28 de julio de 12 a las 17:07

¿Por qué necesitarías hacer eso? -

Toneladas de texturas HiRes para un nivel\mapa\demostración. ¿Por qué no? -

Creo que la pregunta que está haciendo puede ser una de las razones por las que no lo haría. Básicamente, esa es una cantidad absurda de datos de textura para un solo entorno. Incluso los desarrolladores AAA deben trabajar dentro de las limitaciones de los motores patentados de gama alta, razón por la cual se emplean texturas en mosaico y LOD, además de mallas repetidas y otros activos. -

1 Respuestas

Hacer esto es una idea horrible por razones que no tienen nada que ver con la cantidad de memoria del sistema direccionable (que, como ha notado, está limitada a alrededor de ~ 2 GB por el hecho de que XNA es una biblioteca de 32 bits).

Para que se rendericen, las texturas deben cargarse en la memoria de video de la tarjeta gráfica. En estos días, las tarjetas gráficas de escritorio de gama alta tienen alrededor de 2-3 GB; las tarjetas de gama baja y media tienen considerablemente menos. Esta memoria se usa no solo para texturas, sino para todos los objetos que existen en la tarjeta de video, como los búferes de vértices. Y si no está ejecutando en modo exclusivo, esta memoria se compartirá potencialmente entre varias aplicaciones. Exceder la cantidad de memoria de video disponible causará una degradación significativa del rendimiento debido al intercambio.

Si realmente tiene la intención de llenar ese búfer de video (digamos, está escribiendo un modo de gráficos de gama ultra alta para un juego AAA), tendría que emplear algunas técnicas avanzadas de direccionamiento de memoria que involucren la API Win32 o cargue las texturas en el dispositivo gráfico sin guardar una copia en la memoria del sistema. Estas técnicas están fuera del alcance de XNA.

Respondido 29 Jul 12, 16:07

Como complemento, si está decidido a implementar una cantidad tan absurda de datos de texturas en un solo entorno, puede zonificar el área y descargar las texturas antiguas y cargar las nuevas donde corresponda. Sin duda, sufrirá un impacto en el rendimiento en el cruce, pero eso es mejor que el problema de rendimiento continuo con el intercambio continuo en la memoria gráfica. - nathan runge

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.