• Miércoles 20 de Noviembre de 2024, 10:15

Autor Tema:  ¿qué Librería Gráfica Utilizar?  (Leído 3235 veces)

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
¿qué Librería Gráfica Utilizar?
« en: Martes 3 de Febrero de 2004, 19:24 »
0
Hola a todos.

Me gustaría saber qué librería gráfica debería utilizar bajo Windows para poder pintar píxeles de la forma más eficiente.

Me explicaré un poco más. Me gustaría que la librería me permitiera crear un primary buffer y un backbuffer, en el que pintar. Y permitirme intercambiar los contenidos para evitar el parpadeo.

Además, me gustaría que soportara al menos 16 bits de color y un direccionamiento lineal para el backbuffer, lo que me permitiría pintar los píxeles más o menos así:

Código: Text
  1.  
  2. PintarPixel(x,y, color)
  3. {
  4.     backbuffer[x+y*anchuraPantalla] = color;   // backbuffer es un puntero al backbuffer
  5. }
  6.  
  7.  
  8.  

He estado buscando por internet y algunas de las librerías que creo que permiten esto son (corregidme si me equivoco):
  • DirectDraw</li>
  • OpenGL (API 3D, he hecho pruebas y es muy ineficiente para esto, lo descarto)</li>
  • SDL</li>
  • Allegro </li>
  • GDI (¿permite backbuffer?)</li>
¿Alguien me podría decir con cuál de estas librerías se podría implementar esto de la manera más sencilla y eficiente posible?

Muchas gracias.

Ruben3d

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #1 en: Martes 3 de Febrero de 2004, 20:31 »
0
todas te sirven y todas permiten backbuffer.
el ejemplo de gdi que coloque hoy en el foro de c++ usa double buffer.
directx es implicitamente gdi, ya que se monta partiendo de este,

allegro, salvo que lo uses en djgpp o en un entorno dos o linux... tambien resulta usar directx. :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #2 en: Martes 3 de Febrero de 2004, 21:13 »
0
Hola!

Gracias por la respuesta. Después de haberla leido me quedan algunas dudas:

- Si DirectX usa GDI, y Allegro usa DirectX, ¿la librería más eficiente es GDI?

- En el código que has puesto en el foro de C++ parace que el contexto del dispositivo (hdc) hace de PrimaryBuffer, y creas un BackBuffer que copias al Primary llamado (hdcmem) usando BitBlt(). ¿Es esto así?

- ¿Puedo pintar píxeles en hdcmem de la manera que he expuesto en el primer post?

- ¿Quedaría algo más claro el código si se usara DirectDraw, aunque esté basado en GDI?

Espero que no sean demasiadas preguntas  :(

Muchas gracias.

Ruben3d

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #3 en: Martes 3 de Febrero de 2004, 22:52 »
0
1-- si en teoria, aunque allegro realmente no usa nada en gdi, se hizo una version que utiliza directx, con el fin de crear compatibilidad con la programacion para win32, en todo caso si usas muchas cosas en gdi para hacer lo que hace una funcion en directX .. el resultadio no sera mejor ya que las librerias ahn sido desarrololadas de la forma mas optimizada posible lo cual seguramente es mejor de lo que cualquirea de nosotros lograria
2-si
3- no exactamente de esa forma, pero deben haber funciones capaces de soportarlo y ademas funciones que copien de un backbuffer normal (char *) a un contexto de memoria.
4-si quedaria mas claro , pero en ese caso usa c++ y no c, es mas emjor c#.. es lo mas claro que conozco en cuanto programacion., si usas lenguaje c, mejor usa allegro.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #4 en: Miércoles 4 de Febrero de 2004, 10:37 »
0
Estoy usando C++, así que creo que me decantaré por DirectDraw. Me pondré a investigar sobre cómo usarlo para conseguir lo que quiero.

Muchas gracias por tus respuestas!  :gracias:

Un saludo.

Ruben3d

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #5 en: Jueves 5 de Febrero de 2004, 01:55 »
0
"el resultadio no sera mejor ya que las librerias ahn sido desarrololadas de la forma mas optimizada posible lo cual seguramente es mejor de lo que cualquirea de nosotros lograria"

Hmmm... Considerando que hablamos de microsoft...

En realidad es relativo, si hablas de funciones de propósito general o específicas para cubrir un problema puntual:

Ej. "Cambiar el tamaño a una superficie", sólo perderíamos tiempo haciendo una nueva función que haga esto, ya que existe una buena de propósito general que hace lo mismo. Pero si lo que SIEMPRE haremos es "Cambiar el tamaño de una superficie al DOBLE de ancho y de alto" entoces podremos crear una función de propósito específico y por esto mismo podrá ser mucho más rápida.

Lo mismo sucede con los efectos alpha: el método genérico es útil para multitud de casos, pero si sólo necesitamos un alpha del 50% podremos crear una función específica que será mucho más rápida, claro que esto puede ser muy relativo si la tarjeta aceleradora es TAN buena que incluso su función genérica de alpha es más rápida que una función simplificada e implementada para que la ejecute el procesador, aunque seguramente la transmisión entre memoria de video, RAM y otra vez memoria de video sea el peso fundamental que termine por hacer más lento cualquier edición hecha por el procesador.

Personalmente pude comprobar el peso de tener memorias lentas: mover memoria (bitblt) toma prácticamente el mismo tiempo que aplicar un efecto de transparencia al 50%. La respuesta es que mientras el procesador espera a la lenta RAM, puede darse el lujo de hacer algunas operaciones con sus registros.

¿Alguien sabe en que quedo el "cg" de NVIDIA?

PD.

Lo mejor del direct draw es esto:

if SuperficieRender.lock (@Rectangulo_Origen,lpDDSurfaceDesc,DDLOCK_WAIT,0)=DD_OK then
begin
   .....
    membase:=lpDDSurfaceDesc.lpSurface;
    ...

    SuperficieRender.unlock(@Rectangulo_Origen);
end

Te da una referencia al sector de memoria donde está la "superficie" gráfica, además de otras variables para navegar por ese bloque contiguo de memoria (ancho, alto, ancho con alineación a n bytes, etc).

"membase" y "posicionActual" son referencias a memoria,

luego tu

" backbuffer[x+y*anchuraPantalla] = color "

sería:

posicionActual:=pointer (integer(membase)+x+y*anchuraPantalla);

si anchuraPantalla es potencia de 2 mejor por velocidad:
(log2anchuraPantalla es una constante)

posicionActual:=pointer (integer(membase)+x+y shl log2anchuraPantalla);

luego para escribir o leer:

miword:=word(posicionActual^ );
milongint:=longint(posicionActual^ );
mibyte:=byte(posicionActual^ );

word(posicionActual^ ):=$09FF;
longint(posicionActual^ ):=$00FFFFFF;
byte(posicionActual^ ):=$09;

PD2. Los primeros 4 "type casting" sólo son para el programador, por respeto a los tipos de datos y para evitar bugs por interpretaciones ambiguas, en realidad no generan código máquina y no se usan en C. Los 6 restantes "type casting" indican tamaños de memoria.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #6 en: Jueves 5 de Febrero de 2004, 04:38 »
0
Definitivamente amilus sabes bastabte de esto de los videojuegos!!!!

te felicito!!!.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #7 en: Viernes 6 de Febrero de 2004, 13:27 »
0
Muchas gracias por toda la información.

Un saludo.

Ruben3d

hetand

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: ¿qué Librería Gráfica Utilizar?
« Respuesta #8 en: Lunes 29 de Marzo de 2004, 18:08 »
0
Necesito algun orientacion respecto a la libreria SDL, para realizar un juego utilizando C++...
utilizo Builder 6 C++--
Si alguien puede dar alguna informacion acerca de donde obtengo SDL y como lo "configuro" para poder trabajar con Builder..

Gracias