Login Barrapunto
¿Programación gráfica a bajo nivel en UNIX?
mansoft escribe: "Estoy bastante interesado en la programación gráfica a bajo nivel en UN*X (concretamente FreeBSD, aunque no creo que la esencia varíe mucho), pero me gustaría prescindir de bibliotecas tipo SVGAlib, para poder hacerlo yo mismo (y así de paso enterarme de cómo funciona). Aunque he estado buscando documentación no he encontrado nada al respecto. Evidentemente podría echarle una ojeada al código de SVGAlib o similares, pero si hay algo escrito sobre el tema, preferiría leerlo antes que descifrar código. ¿Alguna idea?"
Este hilo ha sido archivado.
No pueden publicarse nuevos comentarios.
¿Programación gráfica a bajo nivel en UNIX?
|
Log in/Crear cuenta
| Top
| 17 comentarios
| Buscar hilo
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.

¿Y por qué?
(Puntos:1)( http://gimp.es.gnome.org )
Re:¿Y por qué?
(Puntos:1)( http://www.doblequeso.novacampus.net/ )
Engage! [freebsd.org]
En contacto con el hard es siempre igal
(Puntos:1)( http://barrapunto.com/ )
Pero como ya han comentado por aquí, eso supondría que lo que hicieras seguramente sólo funcionaría con tu trajeta de vídeo y que incluso un cambio de modelo dejaría a tu programa poco menos que inútil.
Y si a eso le añades que posiblemente lo que tu hagas ya lo han hecho otros, y también posiblemente mejor, pues no creo que valga mucho la pena. Supongo que cosas como SvgaLib y demás han sido revisadas por varias personas para sacarle mayor rendimiento y estarán bastante optimizadas...
Programación gráfica a bajo nivel
(Puntos:2, Interesante)( http://www.comunidadnet.org )
Yo en unices no tengo experiencia programando gráficamente a bajo nivel, apenas he tocado las X y el GTK+ un poco.
Sin embargo, en DOS sí que he trabajado mucho a bajo nivel, utilizando ensamblador y C. Y para ello utilicé documentación bastante antigua, aunque aplicable a las tarjetas modernas si conoces algunas especificaciones de las mismas.
Es por eso que te recomiendo un tutorial un poco antiguo pero que trata a la perfección (desde mi punto de vista) este tema y muchos otros. Lo lamentable es que se necesitaba DOS o Windows para leerlo cómodamente y para algunos ejemplos, aunque ahora hay una versión online. La documentación en sí se llama PCGPE, era un intento de crear una enciclopedia de conocimientos para programadores de videojuegos y de la demoscene, y la puedes encontrar en perfecto inglés en http://brand107.home.attbi.com/pc-gpe/. Utiliza seudocódigo en algunos docs, pero también usa mayoritariamente Pascal (y algo de C y assembler). De todos modos, el código es fácilmente transportable con unos mínimos conocimientos.
Yo con ella aprendí a programar la SVGA, a mover gráficos 3D, y algunas cosas más que cuando me pasé al PC no dominaba mínimamente.
Ya de paso me gustaría abrir una lanza en favor de que te programes tu propia librería. Si bien es cierto que esto a la larga puede dar problemas de compatibilidad si la librería que programes no está suficientemente testada en distintas combinaciones hardware (necesitarás por tanto o muchas máquinas o muchos amigos), estoy ya un poco cansado de ver que parece que existe una ley no escrita que dice que "no se puede programar nada que ya exista". Si esto fuera así, entonces no existiría Minix, Linux, *BSD, KOffice, ni nada, porque ya existían en mayor o menor medida las mismas implementaciones con anterioridad.
Creo que, además, programar una librería gráfica desde cero es un gran aprendizaje porque te va a plantear montones de problemas, y tendrás que ingeniar montones de soluciones. Te deseo suerte en el empeño.
Saludos.
Pistas
(Puntos:1, Informativo)1. Confiando en que tu tarjeta sea VESA y acceder a la memoria 0xa000:0000 (dirección en modo real), hechandole mano a la interrupción 0x10 (más modo real). En el caso del linux tendrás que mirarte como acceder al modo real desde el modo protegido.
2. Olvidandote del modo real y de las interrupciones e ir directamente a tocar los puertos de entrada/salida. El problema con ésto es la baja compatibilidad entre las tarjetas (supongo que hasta una resolución de 320x200 todas funcionan más o menos igual). Creo que hay poca documentación de esto ya que la mayoría de la gente que programa en bajo nivel (vease MS-DOS) usa el método 1.
Yo personalmente creo que es una tontería intentar a hacer programación gráfica a bajo nivel. Si quieres aprender como funciona la tarjeta internamente ponte a programa un driver para las XFree.
La mejor forma de programación gráfica es SDL, FrameBuffer, XFree, OpenGL, etc...
PD: La web me da un internal sever error si intento poner el comentario con mi usuario. Soy samsaga2.
Re:¿Y por qué?
(Puntos:2)Supongo que el grupo de la svgalib tendrá una lista de correo, pide allí alguna página/libro/recurso que ellos hayan utilizado o utilicen.
---------
"Si miras fijamente la realidad, verás los pixels”
...
bajo nivel
(Puntos:2, Informativo)Realmente es necesario?
(Puntos:2, Interesante)( http://www.unrealspace.com/cartuchoGL )
Si quieres apredender como funcionan los gráficos a bajo nivel estudia el código de estas librerias, pero despues de estar muchos años haciendo programación gráfica en MS-DOS, no creas que es tan útil aprender este tipo de cosas, a menos que quieras usar algun modo gráfico especial como los modosX pero pienso que esto pertenece a otra época.
Si lo que quieres es escribir una libreria gráfica mirate las existentes,pruébalas y si alguna se ajusta a tus necesidades úsala, si no se ajustan a tus necesidades usa el código ya escrito para adaptarlas, y si aún asi crees que hace falta una nueva (aunque lo dudo) pos ánimo,si es sencilla de usar, soporta openGL, sonido, y soporte para usar el teclado y el ratón, y ademas es portable (UNIXs, windozes, BeOS,etc..) hasta la uso, pero sinceramete si vas a desarrollar apps gráficas usa SDL.
La red es vasta e infinita.
Qué es lo más rentable...
(Puntos:1)( http://www.pplux.com/ )
Bueno, no voy a ser muy extenso, pero la programación gráfica en LinuX...BSD es un tema apasionante. En primer lugar programar a bajo nivel carece de sentido, realmente no es muy útil en un mundo donde el hardware es muy cambiante. Además que programar a bajo nivel obliga a programar para modelos concretos de tarjetas, ya que los fabricantes rara vez siguen los estándares, o bien con los estándares te quedas muy corto.
Yo abogo por una solución intermedia entre el bajo nivel y algo tipo OpenGL (que es indiscutiblemente portable y MUY potente), prueba las SDL que son unas librerías fantásticas para programar a un relativo bajo nivel. Por otro lado SDL presenta algo que a todo programador interesa, son MUY portables[incluso tienes la versión para Play Station] y te abstraen del hardware (incluso del S.O). nota: !Ánimaos a programar gráficos para LinuX! y vistad Grafix que somos un mini-grupo de desarrollo de gráficos para Linux (ahora por el momento con SDL y algo de Allegro...)Re:Realmente es necesario?
(Puntos:1)( Última bitácora: Lunes, 05 Marzo de 2007, 09:41h )
Si lo quieres mirar, el codigo es muy pequenyo y esta muy bien comentado. (Es lo justo para abrir un fb en X11, tanto en ventana como en fullscreen).
Re:Experiencias
(Puntos:1)( http://www.unrealspace.com/cartuchoGL )