Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre Dirty Rects

Iniciado por [EX3], 17 de Marzo de 2005, 12:50:45 AM

« anterior - próximo »

[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: 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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

CoLSoN2

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.
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

[EX3]

 
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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

CoLSoN2

 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.
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

[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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

zupervaca

 tienes la posibilidad de crear un rendertarget

CoLSoN2

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.
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

[EX3]

 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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






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.