2011-12-24 52 views
11

Quiero aprender sobre librerías gráficas y jugar con ellas un poco. Creé un pequeño programa que define líneas y formas como listas de píxeles, pero no puedo encontrar una manera de acceder a la pantalla directamente para poder mostrar los puntos en la pantalla sin ningún intermediario.¿Hay alguna manera de acceder al hardware directamente en Python?

Lo que quiero decir es que no quiero usar ninguna biblioteca gráfica precompilada como gnome, cocoa, etc. Normalmente uso Python para codificar y mi programa usa Python, pero también puedo codificar e integrar módulos C con él .

Soy consciente de que acceder al hardware de la pantalla quita directamente el lado multiplataforma de Python, pero lo ignoro por el simple hecho de aprender. Entonces, ¿hay alguna manera de acceder al hardware directamente en Python, y si es así, de qué se trata?

+7

Nadie, ni siquiera el estado de la técnica de videojuegos (la mayoría de las veces, de todos modos) hace cosas que a bajo nivel. Eso es trabajo de conductor. Para prácticamente todas las aplicaciones, es completamente poco práctico: increíblemente complicado, difícil o imposible de transportar a través de hardware suficientemente diferente, y propenso a romperse cada vez que el proveedor de hardware mejora algo (por ejemplo, extiende la tubería), y eso está fuera de mi cabeza. No hay nada que aprender de eso, a menos que quieras escribir controladores. Tenemos DirectX, OpenGL, etc. por una razón. Y puede acceder a esos (o al menos OpenGL) muy bien desde Python. – delnan

+6

@delnan Sí, pero op no tiene que justificar realmente por qué quiere aprender, si la pregunta es válida. ¿Qué pasa si él quiere escribir controladores? 'Insanamente complicado, difícil o imposible de transportar a través de hardware suficientemente diferente, y propenso a romperse cada vez que el proveedor de hardware mejora algo' ¿Cómo se relaciona todo esto con encender y apagar un píxel? Esa es la pregunta, todo lo demás son sus opiniones ampliamente especulativas. Llegar a mostrar solo un píxel es una experiencia de aprendizaje fantástica. – yannis

+3

Puede tener razón. Pero mi impresión es que OP tiene una impresión equivocada de lo que constituye la programación gráfica de bajo nivel. – delnan

Respuesta

2

Esto parece un gran camino de auto-aprendizaje y me gustaría añadir mis dos centavos vale la pena y sugerir se tiene en cuenta mirando el GObject, Cairo y módulos Pygame algún tiempo.

El pitón GObject módulo puede estar a un nivel más alto que su interés actual, pero permite el delineado nivel de píxel con Cairo (ver la home page), así como proporcionar una base general para aplicaciones GUI portátiles que utilizan Python

Pygame también tiene métodos a nivel de píxel, así como los métodos de acceso a los controladores de gráficos (en el nivel superior) - que aquí hay una rápida code example

7

No, Python no es la mejor opción para este tipo de acceso de hardware sin formato a la tarjeta de video. Yo recomendaría escribir C en DOS. Bueno, en realidad, no lo recomiendo. Es algo horrible de hacer Pero es la forma en que aprendí a hacerlo, y es probable que sea tan amigable como puedas obtener para acceder al hardware directamente sin intermedios.

Digo DOS en lugar de Linux o NT porque ninguno de estos le dará acceso directo al hardware de video sin escribir un controlador. Eso significa tener que aprender toda la API del controlador, y necesitas invocar mucha "magia", eso no será muy obvio porque escribir un controlador de video en Windows NT es bastante complicado.

Digo C en lugar de Python porque te da consejos reales y la capacidad de hacer cosas estúpidas con ellos. En DOS, puede escribir en direcciones de memoria física arbitraria en C, que parece ser lo que desea. Intentar que Python funcione en un sistema operativo lo suficientemente terrible como para permitirle acceder directamente al hardware sería una frustración en sí misma, incluso si solo quisiera hacer cosas simples en las que Python es bueno.

Y, como han dicho otros, no esperes utilizar nada que aprendas con este proyecto en el mundo real. Puede ser interesante, pero si intentas escribir una aplicación real de esta manera, serás disparado por quien quiera que tenga que mantener tu código.

1

Esto es más bien un hilo de edad ahora, pero tropezó con él mientras meditando la misma pregunta.

Solía ​​programar en lenguaje ensamblador. En mi época, dibujar en la pantalla era simplemente (?) Una cuestión de introducir un valor en una ubicación de memoria. El valor activó o desactivaba un píxel y definió su color.

El término 'poke' proviene de Basic por cierto, no de ensamblador.En ensamblador, tenía que escribir un valor en un registro de datos y luego decirle al procesador dónde colocar los datos usando otro comando y especificar un registro de dirección, ¡generalmente en forma hexadecimal! Y cada procesador diferente tenía su propio lenguaje ensamblador. Pero hec fue el código rápido!

A medida que avanzaba el hardware, descubrí que la programación de hardware de gráficos se volvía cada vez más compleja. Hay mucho más que simplemente definir un píxel. El subsistema de gráficos tiene su propio procesador, o procesadores, y es con eso que debe aprender a hablar. El procesador no solo inserta cosas en ubicaciones de memoria. (¡Creo que lo que solía ser el superordenador más rápido del mundo durante un tiempo funcionaba con chips gráficos!) 'Plonk' no es un comando básico por cierto.

Lo sentimos; Estoy divagando. En respuesta a la consulta del cartel original, creo que el objetivo de comprender el proceso de diseño de gráficos podría haberse logrado mejor experimentando con un Raspberry Pi. Es compatible con Python y, por lo tanto, es perfecto para el trabajo. Su hardware está bien documentado y es barato y fácil de usar.

Espero que esto ayude a alguien, Cheers, M

Cuestiones relacionadas