Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: fiero en 26 de Diciembre de 2007, 11:10:44 PM

Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 26 de Diciembre de 2007, 11:10:44 PM
Hola,

Estoy convirtiendo mis funciones DX a OpenGL y hay algunas cosas que no consigo hacer igual, por ejemplo, tener los buffers de la textura en memoria de sistema y memoria de video separados.

Solo he encontrado la extensión GL_APPLE_client_storage, que permite crear la textura manteniendo la copia original en memoria de sistema, con lo cual el driver OpenGL solo crea una copia en memoria de video. El problema es que esta extensión no es soportada por todos los drivers, incluso las tarjetas modernas.

Entonces, creando la textura de la forma habitual con glTexImage2D, ¿es posible obtener el puntero de memoria de sistema de la textura en OpenGL? Esto me posibilitaria modificar la textura en memoria de sistema, sin tener que tener dos copias (la mia y la de OpenGL)

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: tamat en 27 de Diciembre de 2007, 12:58:41 AM
O_o! Eso se puede hacer en DX?!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Pogacha en 27 de Diciembre de 2007, 01:41:52 AM
Creeria que no se puede (pero no tengo idea realmente)
Muchas implementaciones de OpenGL guardan una copia pero no tienen la obligación de hacerlo, es una implementación nada mas. En algunas implementaciones la copia queda en el formato original y luego se convierte al destino al atravezar el canal agp, pero en otras queda transformada al formato final desde un principio, o peor aun, cuando se pide un cambio de resolución esta es descargada del canal agp y luego subida nuevamente. Esto se puede ver cuando haces un cambio de resolución y OpenGL automaticamente ajusta las propiedades de las texturas, al volver a la resolución anterior las texturas han perdido calidad. Esto lo vi en placas Savage si mal no recuerdo ...

No se de tu implementación especifica, pero ten en cuenta que casi nadie se esta preocupando por eso ;)
Generalmente la copia en memoria se usa poco y el OS la suele llevar a disco cuando realmente es un problema.

Saludos
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 27 de Diciembre de 2007, 07:26:18 AM
Cita de: "tamat"O_o! Eso se puede hacer en DX?!

Sí, se puede hacer. En DX, si creas las texturas con D3DPOOL_MANAGED, todo el trabajo lo hace el driver, así que te olvidas de las transacciones MEMSISTEMA<->MEMVIDEO. Sin embargo yo tenia muchos problemas de rendimiento, por ejemplo cuando tenia que cargar 200MB de texturas con una tarjeta de solo 64MB de video, así que tuve que hacerlo "a mano". Es decir, creo las texturas con D3DPOOL_SYSTEMMEM, y luego sus gemelas en VRAM con D3DPOOL_DEFAULT sólo si están dentro del frustum. Tambien modifico las texturas dinamicamente (carga de imagen mientras se usa la textura) y las actualizo en VRAM con UpdateTexture. Las transacciones se manejan por hardware, así que no hay problema de rendimiento.

Podeis ver un ejemplo de esto instalando mi plugin (solo windows (http://www.devalvr.com/install)) y luego viendo esto http://www.devalvr.com/paginas/soporte/compass.html . Este ejemplo crea las texturas en DX y luego las va actualizando a medida que se descarga el Jpeg de 12000x1648. Para hacer esto con OpenGL necesito tener dos copias de la textura en memoria de sistema, la mia que me sirve para actualizar la textura y la que hace OpenGL. Al menos todos los ejemplos que he visto de texturas dinámicas mantienen una copia aparte de la de OpenGL. El problema es cuando cargas una imagen de 20000x10000, en ese momento mantener dos copias es un poco bestial.

Todo seria más sencillo si tuviera acceso al puntero que usa OpenGL en memoria de sistema. O si pudiera decidir, como en DX, donde se crean las texturas. Como dice Pogacha, en la documentacion de OpenGL dice que "GL implementations normally maintain a copy of texture image data (http://www.opengl.org/registry/specs/APPLE/client_storage.txt)", o sea que en la mayoria de los casos tendré dos copias en RAM de lo mismo.

Se agradece qualquier idea  :wink:
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Fran en 28 de Diciembre de 2007, 10:51:48 AM
No sé si esto te servirá xq es lento

glGetTexImage

Cuando quieras modificarla, te la traes, la modificas y la vuelvas a escribir con la instruccion contraria. Yo no conozco otra forma. Por cuestiones de velocidad, si me hace falta modificarla yo tengo dos copias.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 28 de Diciembre de 2007, 07:15:34 PM
Creo que al final tendré que dejar las dos copias, al menos mientras dure la carga/actualización de las texturas.

Muchas gracias por las respuestas!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 09 de Enero de 2008, 09:39:10 AM
Cita de: "fiero"Entonces, creando la textura de la forma habitual con glTexImage2D, ¿es posible obtener el puntero de memoria de sistema de la textura en OpenGL? Esto me posibilitaria modificar la textura en memoria de sistema, sin tener que tener dos copias (la mia y la de OpenGL)

He entendido mal la pregunta, porque lo que quieres es tener el puntero a los texels de la tarjeta gráfica no de memoria de sistema. La pregunta sería ¿Es posible obtener el puntero en memoria de LA TARJETA GRAFICA de la textura en OpenGL? Bueno dejo la respuesta a lo que he creido entender en un principio :P

En OpenGL cuando creas una textura como bien dices con glTexImage2D (http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/teximage2d.html) si ves la especificación el último parametro es el puntero a los texels :) que... lo tienes ya en memoria dinamica oiga! :)

Veamos:

uint g_textureID_0;
CTexture miTextura("fiero.tga");

glGenTextures( 1, &g_textureID_0 );    // Le decimos a OpenGL que nos de un "id" libre donde colocar nuestra textura en la memoria de la tarjeta
glBindTexture( GL_TEXTURE_2D, g_textureID_0 );    // Le decimos que el contexto irá a parar a ese "id" o imaginemos ESPACIO LIBRE de memoria de la tarjeta

// Configuramos chorradas...
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );

// Enviamos a la tarjeta el contenido de texels con una configuración específica
glTexImage2D( GL_TEXTURE_2D, 0, 3, miTextura->sizeX, miTextura->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, miTextura->data );


Una vez comprendido como funciona la carga de texturas, si no borras la clase miTextura, su variable data tiene en memoria de sistema la misma copia que en la de la tarjeta. Ya que lo que hemos hecho es enviarle por la función glTexImage2D un puntero a esa variable para que copie el contenido.

Por consiguiente! siempre tienes una copia en memoria de sistema de lo que mandas a la tarjeta, ahora bien, otra cosa es que te carges la clase que contiene esos datos o no tengas un texture manager.

:) saludetes!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 09 de Enero de 2008, 09:59:11 AM
Hola Prompt,

Lo hago tal y como dices. A lo que me refiero con 2 copias es a que OpenGL no solo hace una copia de la textura en VRAM, sino que además hace otra copia en memoria de sistema. Con lo cual tienes dos copias de la misma textura en memoria de sistema, una la tuya, y otra la de OpenGL. Esto no es preocupante en la mayoria de aplicaciones, pero si tienes que cargar una textura de 400 MB, resulta que necesitas 800MB de ram.

Al final he encontrado una solución, aunque no sé si funcionará igual con todos los drivers OpenGL, tengo que hacer más pruebas. Lo que hago es directamente eliminar con glDeleteTextures los trozos de textura que no están dentro del frustum. Luego si entran dentro de la escena las vuelvo a crear con glTexImage2D. Nunca pensé que esto de andar creando y eliminando texturas fuera tan rápido, pero no tengo ninguna penalización en los FPS. Ahora cargando una textura de 350MB la aplicación me consume unos 420MB en vez de 700MB con toda la textura cargada en OpenGL.

Gracias por la respuestas!
saludos
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 14 de Enero de 2008, 08:13:10 PM
Ni me quiero imaginar que estarás haciendo :) ni que tarjeton tendras :P

Imagino que 1 de 2... o no es un juego o andas creando "mapas atlas" para un render rápido.

No tendras penalizaciones siempre y cuando no copes el BUS de la tarjeta. Es decir, que si tu BUS es... yo q se... 500 MB por segundo, pues no te penaliza si subes 400 MB cada segundo ( el refresco es cada segundo por ej ). Pero! ten en cuenta que te quedan 100.

De todas formas lo que comentas es ahorro de memoria de tarjeta y entiendo por VRAM y memoria de sistema, que no es memoria de la tarjeta grafica. En la memoria de GPU ( por llamarla así ) solo tienes una copia, con un id relacioado. Y parecias querer librarte de la copia de memoria de CPU ( llamemosla así ). Pero resulta q hablas de otra VRAM.

Que yo sepa, existen 3 copias:
- En HD.
- En memoria de CPU.
- En memoria de GPU.

- Se carga del HD a memoria de CPU y luego se pasa una copia a la memoria de la GPU. Si es formato DDS pues el paso es directo etc...

Te refieres a estas 3 "copias de texturas"?

Un saludo, y me alegro de que hayas encontrado la solución :)
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 14 de Enero de 2008, 08:40:30 PM
Tengo un iMac con una ATI Mobility Radeon X1600 de 128 MB, no es la bomba, pero es bastante buena... creo :)

Si tienes Windows, podrás ver mi programa "en directo" en este ejemplo: http://www.devalvr.com/paginas/soporte/compass.html (mi programa es un visor 3D en forma de plugin para el navegador)

Olvidando la textura en el HD, una vez que la cargamos en la aplicación OpenGL, tenemos 3 copias de la textura:

1- En memoria de CPU (la que nosotros reservamos y manejamos)
2- En memoria de CPU (creada por glTexImage2D y manejada por OpenGL, sin acceso directo)
3- En memoria de GPU (creada por glTexImage2D y manejada por OpenGL, sin acceso directo)

Mi pregunta inicial era como acceder a la memoria 2, para poder eliminar mi copia 1. Pero ahora lo que hago es eliminar la 2 y 3 de las partes que no entran en el frustum y listo. Ya probaré con tarjetas más antiguas a ver como va. De todas formas trabajo descomponiendo la textura en trozos de 256x256, esto son solo 200KB, así que puede ser que las transferencias de memoria se hagan muy escalonadas, con lo cual no veo retrasos aunque mueva la cámara muy rápido. Por ejemplo, una textura de 10000x5000 la divido en 750 cachitos.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: marcode en 15 de Enero de 2008, 11:24:54 PM
Cita de: "fiero"
Olvidando la textura en el HD, una vez que la cargamos en la aplicación OpenGL, tenemos 3 copias de la textura:

1- En memoria de CPU (la que nosotros reservamos y manejamos)
2- En memoria de CPU (creada por glTexImage2D y manejada por OpenGL, sin acceso directo)
3- En memoria de GPU (creada por glTexImage2D y manejada por OpenGL, sin acceso directo)

¿Estás seguro que reside en la 2 y la 3 al mismo tiempo?, porque yo lo que creo que ocurre es que se crea en memoria de sistema a lo primero, y cuando se utiliza se mueve a la de vídeo y allí permanece a menos que deje de usarse en preferencia de otras texturas, en cuyo caso vuelve a ser movido por OpenGL a la memoria de sistema.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 15 de Enero de 2008, 11:36:44 PM
Hola marcode,

Lo que hace OpenGL es una copia en memoria de sistema (2), y luego una copia en VRAM cuando se necesita (3), descargandola cuando no. Funciona como dices, excepto que no "mueve" la textura a VRAM, sino que copia la textura a VRAM cuando es necesario. Esto significa que la copia interna de OpenGL en memoria de sistema (la 2) siempre está ahí. Este comportamiento es igual que cuando se crea una textura en DX con D3DPOOL_MANAGED.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: marcode en 15 de Enero de 2008, 11:54:34 PM
Cita de: "fiero"Lo que hace OpenGL es una copia en memoria de sistema (2), y luego una copia en VRAM cuando se necesita (3), descargandola cuando no. Funciona como dices, excepto que no "mueve" la textura a VRAM, sino que copia la textura a VRAM cuando es necesario. Esto significa que la copia interna de OpenGL en memoria de sistema (la 2) siempre está ahí. Este comportamiento es igual que cuando se crea una textura en DX con D3DPOOL_MANAGED.

Creo que si no me muestras una fuente fiable que explique que eso ocurre así, no me voy a poder creer nunca que Las texturas se guarden por duplicado. Es ilógico e innecesario ese gasto de memoria.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 16 de Enero de 2008, 12:30:47 AM
Si no vas a modificar la textura, puedes eliminar tu copia (la 1), así liberas RAM.

Las pruebas:

Apple añadió una extensión para poder mantener la copia del usuario como copia de memoria de sistema manejada por OpenGL, para así ahorrarse el duplicado http://www.opengl.org/registry/specs/APPLE/client_storage.txt (En el "Overview" está explicado muy claro). El problema es que esta estensión no es muy común en windows, al menos mis drivers ATI no la soportan.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Zaelsius en 16 de Enero de 2008, 12:41:47 AM
Cita de: "marcode"Es ilógico e innecesario ese gasto de memoria.

Es una optimización muy común, con un coste espacial. Si no se hiciese así,  ¿qué pasaria cuando todas las texturas de una escena no pudiesen ser almacenadas a la vez en VRAM(cosa bastante normal)?. Habría que traer de vuelta las texturas de VRAM a RAM, perdiendo un tiempo precioso y afectando al rendimiento de la aplicación/juego. Es más rápido aumentar la cuota de uso de RAM y ahorrarte esas transferencias.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 16 de Enero de 2008, 12:49:53 AM
Yo creo que la razón fué para dar estabilidad y evitar errores "humanos". Es decir, OpenGL necesita una copia en RAM, ya que casi nunca caben todas las texturas en VRAM al mismo tiempo, por eso el driver se encarga de subir y bajar lo que sea necesario. Con la copia interna, se evitan errores como por ejemplo, que el usuario borre el buffer de la textura mientras se está usando.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 16 de Enero de 2008, 09:59:27 AM
Vale a ver que ya se de que hablas... pero sigo teniendo una duda.

En principio, puedes usar GL_APPLE_client_storage en windows si está en el .h correspondiente. Aunque sea de APPLE y no sea del standart ARB nVidia y ATI le tienen que dar soporte para OSX.

Resulta que evidentemente en tu ATI de 128 MB no puede tener 400 MB de texturas por lo cual el driver guarda una copia en memoria de CPU siempre. ¿Cómo funciona esto?

En aplicaciones como "pix" o el perfHUD de nVIDIA puedes ver que cuando la memoria de la GPU está llena, tiene que ir vaciando y subiendo texturas a la memoria de la GPU para generar el frame que se le pide. Para esto sirve guardar esa copia que auto-gestiona el driver.

Lo que me sorprende es que esta copia se pueda desactivar. ¿Qué pasa si se copa la memoria de la GPU?
Me da por pensar que entonces el rendimiento cae, ya que 1º hace una copia de la textura en memoria de CPU y luego la borra de la memoria de la GPU.

Así que eso afecta al rendimiento. Evidentemente para tu aplicación pues tampoco es que el rendimiento sea un requisito primordial.

PD: con que has hecho ese plugin? es multiplataforma? está bien :)
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 16 de Enero de 2008, 01:15:22 PM
Prompt, tienes el concepto algo confuso (te lo digo con todo el cariño ;) )

GL_APPLE_client_storage es una extensión, y como todas las extensiones, primero hay que comprobar que la tarjeta la soporta. Mi tarjeta no la soporta, y solo tiene un año.

OpenGL es una API que gestiona automáticamente la VRAM, por lo tanto OpenGL se encarga de llenar la memoria de GPU con lo que necesite (como tú has explicado). Pero, para funcionar de esta manera, OpenGL necesita la textura en RAM y VRAM. GL_APPLE_client_storage NO sirve para eliminar la copia en RAM, sino que sirve para no hacer una nueva copia y utilizar la del usuario. En el texto de la extensión está bien claro, en inglés, claro.

EL plugin es para Windows, está hecho en C++ (con VisualC6), pero estoy ahora convirtiendo algunas de mis funciones para compilarlo en Mac y Linux (por eso estoy con OpenGL ahora)

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 16 de Enero de 2008, 02:12:00 PM
Si si, para no hacer el store... lo he expresado mal probablemente. No queria decir que con esa extensión se elimine. Directamente no se crea copia. Lo de eliminar viene por el supuesto mio, de lo que hará la tarjeta cuando no tenga espacio en la memoria de la GPU, 1º copia a memoria de CPU y luego borra la textura de la memoria de la GPU para poder subir más cosas a la tarjeta necesarias para hacer el frame pertinente.

Espero que me hayas entendido esta vez.

Es una pena que GL_APPLE_client_storage no esté soportado por tu tarjeta. Aunque más bien puede ser culpa del .h / driver de windows, porque la extensión es del 2002/08/27 y en OSX se usa. ¿Por qué no preguntas en el foro de nVidia?
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 16 de Enero de 2008, 02:20:15 PM
Cita de: "Prompt"Lo de eliminar viene por el supuesto mio, de lo que hará la tarjeta cuando no tenga espacio en la memoria de la GPU, 1º copia a memoria de CPU y luego borra la textura de la memoria de la GPU para poder subir más cosas a la tarjeta necesarias para hacer el frame pertinente.

Si no tiene espacio en GPU, elimina la textura de GPU, no la copia a la memoria de CPU porque ya la tiene. Por lo que te entiendo, creo que piensas que cuando OpenGL sube una textura a GPU, la elimina de CPU, pero no es así. La copia de CPU siempre la tiene, ya sea en memoria que ha reservado OpenGL, o en memoria del usuario si usas GL_APPLE_client_storage.

Vete a saber, como no es una extension ARB igual han pasado de meterla. Quizás esté en OpenGL 2.0.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: marcode en 16 de Enero de 2008, 04:58:35 PM
Cita de: "fiero"Si no vas a modificar la textura, puedes eliminar tu copia (la 1), así liberas RAM.

Las pruebas:

Apple añadió una extensión para poder mantener la copia del usuario como copia de memoria de sistema manejada por OpenGL, para así ahorrarse el duplicado http://www.opengl.org/registry/specs/APPLE/client_storage.txt (En el "Overview" está explicado muy claro). El problema es que esta estensión no es muy común en windows, al menos mis drivers ATI no la soportan.

saludos!

sigo sin verlo claro y de todos modos dice que "algunas implementaciones mantiene la copia normalmente" pero no dice que siempre.

A lo mejor eso sucedía cuando la memoria VRAM era muy excasa y no existía el puerto AGP. Donde podías tener 8 MB de VRAM + 128 de RAM y las trasferencias PCI eran muy lentas. Entonces sí tiene sentido mantener la copia.

Pero actualmente algunos ordenadores pueden llegar a tener incluso más memoria residente VRAM + AGP que memoria de sistema libre, por lo que tener un duplicado de todas las texturas penalizaría los recursos gravemente.

Es probable que las implementaciones hayan evolucionado de manera que  las texturas más usadas permanecen en VRAM o AGP (que en la actualidad puede llegar hasta los 512 MB), y sean eliminadas de la memoria de sistema, y algunas texturas que no tienen preferencia y están siendo habitualmente subidas sí se conserven en la memoria de sistema.

No estoy seguro de todo esto, pero yo a ti si te veo muy seguro y a lo mejor tendrías asegurarte de cual es el mecanismo real de las actuales implementaciones de OpenGL en cuanto al mantenimiento de texturas porque lo de mantener por duplicado todas las texturas no lo acabo de ver claro.

Tal vez tendrías que chequear la memoria para saber qué está pasando realmente, el "Video Memory Watcher" está bien para verlo en tiempo real.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 16 de Enero de 2008, 08:20:49 PM
Me cago en la leche fiero que no nos estamos haciendo entender, rematemos ya:

Sin extension: al generar el primer frame por ejemplo...
- Copia en memoria de CPU.
- Se sube a la GPU.
- Copia en memoria de GPU.
- No hay memoria en GPU.
- Elimina algunas de la GPU.
- Sube las que sea de la CPU.
- Termina de generar el frame.

Con extension: al generar el primer frame por ejemplo...
- Se sube la textura a la GPU.
- No hay memoria en GPU.
- Copia algunas de las textura en memoria de CPU.
- Elimina algunas de la GPU.
- Sube las que sea de la CPU.
- Termina de generar el frame.

Conclusión, estoy seguro que al activar esa extensión el proceso en las situaciones peores para generar un frame va a ser más costoso :P


PD: por qué llamais a la memoria de la CPU, VRAM? no será por Virtual RAM? porque memoria virtual es la que se vuelca al HD haciendo el mismo proceso que describimos aqui con las texturas.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Zaelsius en 16 de Enero de 2008, 08:49:52 PM
Cuando decimos VRAM creo que nos referimos a Video RAM :D (o más 'modelnamente' GPU RAM), yo al menos.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Pogacha en 16 de Enero de 2008, 09:17:01 PM
Cita de: "marcode"A lo mejor eso sucedía cuando la memoria VRAM era muy excasa y no existía el puerto AGP. Donde podías tener 8 MB de VRAM + 128 de RAM y las trasferencias PCI eran muy lentas. Entonces sí tiene sentido mantener la copia.
En realidad es alrevez, he visto viejas implementaciones que no dejaban copia, las nuevas todas la dejan.

Que pasa, OpenGL debe seguir andando por mas que halla un cambio de resolución o por mas que otra aplicacion requiera el uso de la VRAM. DX tiene mensajes para mostrarte que la memoria de video se perdio y debe ser recargada, en OpenGL esto no existe, una lastima.

Saludos.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 16 de Enero de 2008, 09:40:57 PM
Hombre, es que si no tenemos claras las nomenglaturas normal que no se entienda. VRAM es toda la vida Video RAM http://es.wikipedia.org/wiki/VRAM , si se va a la pagina de ATI o Geforce a comprar una tarjeta, una de las caracteristicas principales es la VRAM.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Prompt en 17 de Enero de 2008, 08:41:09 AM
El día que te vea fiero te voy a dejar yo clara la programación con OpenGL y el saber entender la lengua castellana mamoncete! te voy a dar yo a ti nomenclatura xD

Yo creo que en algun post nombrasteis memoria de CPU, VRAM y memoria de GPU. Y yo ya me hago viejo y escribiendo y leyendo post a ratos pos pasa lo que pasa xD


Resalto esto de la wikipedia:
"En un principio (procesadores de 8 bits) se llamaba así a la memoria sólo accesible directamente por el procesador gráfico, debiendo la CPU cargar los datos a través de él. Podía darse el caso de equipos con más memoria VRAM que RAM (como algunos modelos japoneses de MSX2, que contaban con 64 KiB de RAM y 128 KiB de VRAM)."

Hasta luego que me voy a desayunar! :P
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: davidgf en 31 de Enero de 2008, 08:22:22 PM
Hola!!!

Una pregunta que no me ha quedado clara. Al crear la textura OpenGL la copia. Así que yo puedo hacer free(buffer); en principio (lo he visto en todos los lados).

Eso es así en todas las implementaciones de OpenGL? Es que estoy haciendo un jueguecillo para la Dreamcast y me parece que la implementación de GL es un poco xapuza (no tienes más que 4 funciones básicas). Puedo borrar el buffer?? (el mio digo) O corro el riesgo que esta implementacion de GL se aopye en mi buffer para recargar la VRAM??

Si lo sabéis o me dáis una opinión me hacéis un favor!!!!

Gracias , David
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: fiero en 31 de Enero de 2008, 08:45:02 PM
Hola!!

Se me ocurre que si la consola tiene por ejemplo 8MB de VRAM, puedes subir una escena que ocupe más, para que se produzcan transferencias de memoria al mover la escena. Después puedes rellenar todas las texturas con un color plano (tus punteros *buffer), y si la escena permanece igual, es que está usando sus copias internas. Quizás una consola sea uno de los pocos casos en que la norma no se cumple, ya que la RAM es limitada. Si haces la prueba comentanos a ver que pasa.

saludos!
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: Pogacha en 31 de Enero de 2008, 08:53:43 PM
En realidad yo nunca lo supe, ni leyendo la documentación ni nada, es una duda que me queda.
Título: OpenGL - Acceso al buffer interno de la textura
Publicado por: davidgf en 01 de Febrero de 2008, 01:47:37 AM
Buena idea fiero!!! No se me habría ocurrido...

Me parece que le mandaré un mail al autor o postearé en el foro preguntándole. Él lo sabrá mejor que nadie

Gracias!