Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





dx_GFX_class Resolución a pantalla completa

Iniciado por Manu343726, 22 de Noviembre de 2012, 08:14:35 PM

« anterior - próximo »

Manu343726

Buenas, estaba haciendo unas modificaciones en mi implementación de la inicialización de dx_GFX_class, y hay una cosa que me ha llamado la atención de la implementación original:


If Windowed Then
        D3DWindow.Windowed = 1
        If VSync Then
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
       
        Else
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY
           
        End If
       
        D3DWindow.BackBufferFormat = DispMode.Format
        D3DWindow.BackBufferHeight = Height
        D3DWindow.BackBufferWidth = Width
        D3DWindow.hDeviceWindow = hWnd
   
        Global_Mod.D3D_FullScreen = False
   
    Else
        Select Case Bpp
            Case 16, Is < 16: DispMode.Format = D3DFMT_R5G6B5
            Case 32, Is > 32: DispMode.Format = D3DFMT_X8R8G8B8
       
        End Select

   
        DispMode.Width = Width
        DispMode.Height = Height

        If VSync Then
            D3DWindow.SwapEffect = D3DSWAPEFFECT_FLIP
       
        Else
            D3DWindow.SwapEffect = D3DSWAPEFFECT_DISCARD
            D3DWindow.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE
   
        End If
   
        D3DWindow.BackBufferCount = 2 + Abs(TripleBuffer)
        D3DWindow.BackBufferFormat = DispMode.Format
        D3DWindow.BackBufferHeight = DispMode.Height
        D3DWindow.BackBufferWidth = DispMode.Width

        .....


Cuando inicializas dx_GFX_class en modo pantalla completa tienes que introducir explícitamente la resolución de pantalla???? No sería más lógico que lo hiciera automáticamente, ya que has consultado el modo de pantalla? (D3DDISPLAYMODE)

La parte que me ha llamado la atención es:

        DispMode.Width = Width
        DispMode.Height = Height


y luego haces:


        ....
        D3DWindow.BackBufferHeight = DispMode.Height
        D3DWindow.BackBufferWidth = DispMode.Width
        ....


De manera que te pasas por el forro la resolución del display, tiene que darla el usuario....

Hay alguna razón para ésto?

[EX3]

Mmm, si no te he entendido mal lo que tu dices seria que el modo de video siempre deberia inicializar con el modo que ya tenga establecido el usuario en el escritorio de Windows, ¿no?

Si yo busco tener un modo de video (el "lienzo" donde renderizar la escena del juego) a 800x600 y el usuario tiene configurado Windows a 1280x800 tendriamos el problema de que si inicializo con el modo de video actual mi lienzo no seria de 800x600 si no de 1280x800 o la resolucion que tenga el usuario que ejecute el juego, lo cual seria un descontrol total.

Si te fijas, la estructura DispMode solo la uso para almacenar informacion temporalmente y para obtener el formato de color del contexto de video de Windows que lo necesito para inicializar el modo a ventana:
    If Windowed Then
        D3DWindow.Windowed = 1
        If VSync Then
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
       
        Else
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY
           
        End If
       
        D3DWindow.BackBufferFormat = DispMode.Format
        D3DWindow.BackBufferHeight = Height
        D3DWindow.BackBufferWidth = Width
        D3DWindow.hDeviceWindow = hWnd
   
        Global_Mod.D3D_FullScreen = False
   
    Else


En modo a pantalla completa no necesito saber para nada que modo de video usa Windows por que no lo necesito ya que configuro el modo de video de Direct3D tal y como se indica en los parametros de la llamada.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

Manu343726

Mierda, no había caido en eso. Gracias [EX3], perdona las molestias.

Enviado desde mi GT-S5830 usando Tapatalk 2

[EX3]

Cita de: Manu343726 en 23 de Noviembre de 2012, 09:56:17 AM
Mierda, no había caido en eso. Gracias [EX3], perdona las molestias.
Molestias ninguna, hombre, que a todos a veces se nos pasa algún detalle leyendo código ajeno ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

Manu343726

Y otra preguntita más:
Hoy he conseguido hacer funcionar el modo pantalla completa, pero no se por qué si no uso el BackBufferFormat del display, es decir, uso el formato que pasa el usuario como argumento; la creación del device
falla. Llevo una hora googleando y nada. Debería funcionar.....
Enviado desde mi GT-S5830 usando Tapatalk 2

[EX3]

No te compliques y tira con el formato del usuario. Hoy dia ya no tiene sentido inicializar modos de video a 16 bits salvo que vayas a ejecutar tu juego en Windows 98 sobre una grafica de hace 15 años. Hoy dia hasta la mas chusquera de las graficas soporta 32bits.

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.