Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: [EX3] en 17 de Marzo de 2005, 12:50:45 AM

Título: Sobre Dirty Rects
Publicado por: [EX3] en 17 de Marzo de 2005, 12:50:45 AM
 Wennas. Hace poco lei en un foro sobre la implementacion de los Dirty Rects que estan llevando a cabo en el port de Div, Fenix, para lograr optimizar el sistema grafico del interprete, y entonces recorde que D3D tambien proporciona la implementacion de las Dirty Rects pero nunca he tenido claro que hacen exactamente: definen una zona del backbuffer, textura o surface que se actualizara o que no se actualizara en el proximo repintado del backbuffer? No se, si alguien pudiese explicarmelo un poco se lo agradeceria, por que si realmente es una buena forma de optimizar el sistema grafico me interesa, ya que mi libreria grafica necesita un pequeño empujon para ciertas cosas.

Salu2...
Título: Sobre Dirty Rects
Publicado por: CoLSoN2 en 17 de Marzo de 2005, 07:12:52 AM
Cita de: "[EX3"] Wennas. Hace poco lei en un foro sobre la implementacion de los Dirty Rects que estan llevando a cabo en el port de Div, Fenix, para lograr optimizar el sistema grafico del interprete, y entonces recorde que D3D tambien proporciona la implementacion de las Dirty Rects pero nunca he tenido claro que hacen exactamente:
D3D no proporciona eso porque es sólo para juegos 2D, en los juegos 3D se actualiza toda la pantalla siempre. Aún así, tampoco DirectDraw lo proporciona, es algo que tiene que currarse el programador.
Título: Sobre Dirty Rects
Publicado por: [EX3] en 17 de Marzo de 2005, 02:59:29 PM
 
Cita de: "CoLSoN2"D3D no proporciona eso porque es sólo para juegos 2D, en los juegos 3D se actualiza toda la pantalla siempre.
QUOTE (DirectX 8.1 SDK Documentation > Direct Graphics)
Direct3DTexture8.AddDirtyRect

Adds a dirty region to a texture resource.
object.AddDirtyRect(DirtyRect As Any)
Parts
object
Object expression that resolves to a Direct3DTexture8 object.

DirtyRect
A RECT type, specifying the dirty region to add. Specifying ByVal 0 expands the dirty region to cover the entire texture.

Error Codes
If the method fails, an error is raised and Err.Number can be set to D3DERR_INVALIDCALL.

For information on trapping errors, see the Microsoft® Visual Basic® Error Handling topic.

Remarks
For performance reasons, dirty regions are only recorded for level zero of a texture. For sublevels, it is assumed that the corresponding (scaled) rectangle or box is also dirty. Dirty regions are automatically recorded when LockRect or LockBox is called without D3DLOCK_NO_DIRTY_UPDATE or D3DLOCK_READONLY. Also, the destination surface of a CopyRects call is marked dirty.

Applications can optimize what subset of a resource is copied by specifying dirty regions on the resource.[/quote]
D3D si las proporciona, a lo mejor solo para el bliteo en surfaces o texturas y no para el render final, pero esto es lo que necesito averiguar, si se puede hacer tb sobre el backbuffer. Sobre DD7 creo que Dirty Rects no pero algo similar que usaba para renderizar solo lo necesario de un grafico si habia, ClipRects puede ser?? Ya ni lo recuerdo.

Salu2...
Título: Sobre Dirty Rects
Publicado por: CoLSoN2 en 17 de Marzo de 2005, 03:04:52 PM
 Bueno antes que nada tendríamos que definir qué es para ti un dirty rect (o para qué lo vas a usar).

Como yo lo entiendo, los dirty rects son los rectangulos que cubren el área que sí va a redibujarse/actualizarse de la pantalla, en un juego 2D. En uno 3D no se qué utilidad tendrán. Quizá es por si vas a modificar la textura, que sólo se actualice una parte, no se.
Título: Sobre Dirty Rects
Publicado por: [EX3] en 17 de Marzo de 2005, 03:11:35 PM
 Mi proyecto usa D3D para el renderizado de sprites 2D con aceleracion por hardware. El tema era que no tenia muy claro el concepto de las Dirty Rects y queria saber si realmente me podian ser utiles o no en mi proyecto.

Entonces las Dirty Rects son las zonas que se actualizarian en la siguiente pasada del render, ok, aclarado. Pues para el backbuffer a lo mejor no pero para los bliteos en las superficies si me puede ser util.

Gracias por la explicacion ;)

Salu2...
Título: Sobre Dirty Rects
Publicado por: zupervaca en 17 de Marzo de 2005, 03:27:11 PM
 tienes la posibilidad de crear un rendertarget
Título: Sobre Dirty Rects
Publicado por: CoLSoN2 en 17 de Marzo de 2005, 03:52:08 PM
Cita de: "[EX3"] Mi proyecto usa D3D para el renderizado de sprites 2D con aceleracion por hardware. El tema era que no tenia muy claro el concepto de las Dirty Rects y queria saber si realmente me podian ser utiles o no en mi proyecto.

Entonces las Dirty Rects son las zonas que se actualizarian en la siguiente pasada del render, ok, aclarado. Pues para el backbuffer a lo mejor no pero para los bliteos en las superficies si me puede ser util.

Gracias por la explicacion ;)

Salu2...
Pero en qué superficies bliteas, si estás usando D3D? Si estás usando aceleración por hardware estar manejando superficies a nivel de pixel es muy ineficiente.
Título: Sobre Dirty Rects
Publicado por: [EX3] en 17 de Marzo de 2005, 03:59:56 PM
 Copio porciones de superficies en otras, para la creacion de mapas de tiles en memoria a partir de graficos sueltos, mediante las funciones CopyRects() y LoadSurfaceFromSurface() y que luego paso a texturas si necesito blitearlas. Uso superficies nada mas que para poder respetar las dimensiones originales de los graficos en memoria si lo preciso. No trabajo a nivel de pixel nada mas que para lectura de pixeles individuales para usar mapas de durezas.

Salu2...