Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Bloqueando el backbuffer en DirectX 8

Iniciado por Zaelsius, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Zaelsius

                                Lo que quiero es poder pintar sobre el backbuffer después de haber renderizado sobre él para poner elementos 2D o texto, pero al bloquear la superficie siempre irrumpo en un error de protección y todo se va al carajo.

A ver si me podeis poner código de ejemplo para copiar, por ejemplo una textura(su surface asociada de nivel 0) al backbuffer para que todo sea correcto y no explote.
(No he buscado ejemplos, pero espero que me digais cual es la manera más rapida y fiable)


gracias
                               

Lord Trancos

                                Es mala idea pintar objetos 2D de ese modo.
Lo normal es usar un par de triangulos ya transformados (mirate el tutorial 2 [creo] del SDK), o bien usar el interfaz ID3DXSprite.                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Zaelsius

                                Ya sé que algunos no le encontrarán sentido, pero yo quiero saber cómo se hace igualmente. Además los sprites usan texturas de tamaño potencias de 2 y yo quiero imprimir bitmaps de cualquier tamaño                                

Drácula

                                ¿Porqué no escribes aquí el código donde hacer el Lock y vemos un poco mejor si haces algo mal?
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Lord Trancos

                                Puedes seguir dibujando bitmaps de cualquier tamaño siempre y cuando los partas a cachos en varias texturas.... (que es lo que yo hago)

Ten en cuenta que acceder directamente al backbuffer podria suponer una grave penalizacion en cuanto a perdida de FPS....
ademas pierdes la posibilidad de usar filtro de texturas, alpha blend y demas cosillas por hard....                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Zaelsius

                                Bueno, en el caso de que usase los sprites dx finalmente(lo de partir los gráficos es un coñazo),¿cómo haria para que apareciesen detrás de todo lo renderizado?
es decir, los pongo de fondo y renderizo cosas encima, pero no consigo hacerlo, pues da igual el orden en el que pinte: siempre me salen los sprites delante.¿con d3dxsprite::drawtransform, indicándole una posición z menor?                                

mallrat

                                En el DX8 no se puede hacer un lock del backbuffer, salvo que esté creado con el formato D3DFMT_D16_LOCKABLE. De todas formas como comentan los demás es mejor, mas rápido, mas seguro y mas flexible (salvo por el tema de la potencias de dos, pero eso se apaña facilmente) usar sprites. Lo que quieres lo puedes hacer si desactivas la escritura en Z, luego pintas los sprites y luego la activas otra vez y pintas el resto. Otra forma sería pintando el sprite con valores máximos de Z, o también trucando el Viewport.
                               

Zaelsius

                                Gracias mallrat! ahora ya funciona! desactivo el zbuffer, pinto el sprite, lo vuelvo a activar y renderizo lo demás

                               

kuo

Saludos a todos...al al tratarse del tema del backbuffer (y al ver que son algo expertos) queria preguntarles un detalle...saben como saber si el backbuffer ha cambiado entre una llamada a Mesh.DrawSubset()... y la siguiente... A ver si me dejo entender masomenos este es el algoritmo...

//Dibujo el mesh(aqui el contenido del backbuffer seria el inicial)
mesh.DrawSubset(x)
//Ahora lo que quiero es comparar si ha cambiado el backbuffer con respecto al estado inicial
if("que hago aqui")
{

}
#9834;♪ musica y sol ☼ son lo mejor...claro lo son ta,bien las chicas...jejjeje

tamat

qué es el backbuffer? porque para un OGLero el backbuffer es simplemente el buffer en el que pintas que no se está viendo todavía en pantalla, y no me cuadra.
Por un stratos menos tenso






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.