DX9 Windowed Issue - Draw area is 'detached' from window

Lycaon

Newcomer
Joined
Oct 20, 2004
Messages
6
I'm trying to enable my engine to start up in windowed or fullscreen mode mased on the initialize call... Fullscreen works great, when I draw something at 0,0 it shows up in the upper left corner as intended...

If I start up in windowed mode, and draw to 0,0 the image is still drawn to 0,0 on my screen, even if my window is at, say 200,200... I literally have to move the window up to the upper left corner of my screen to see the drawn image. Basically everything is drawn as if the app IS in fullscreen, even when the window is in a different position.

I'm not sure where I went wrong. Here's the code I've got for initialization.

Visual Basic:
Public Sub Initialize(f as Form, Windowed As Boolean)
        m_VideoDevice = New DirectDraw.Device(DirectDraw.CreateFlags.Default)

        If Windowed Then
                f.FormBorderStyle = FormBorderStyle.FixedToolWindow
                m_VideoDevice.SetCooperativeLevel(f, DirectDraw.CooperativeLevelFlags.Normal)
        Else
                f.FormBorderStyle = FormBorderStyle.None
                m_VideoDevice.SetCooperativeLevel(f, DirectDraw.CooperativeLevelFlags.FullscreenExclusive)
                m_VideoDevice.SetDisplayMode(1024, 768, 16, 60, True)
        End If

        Dim Caps As New DirectDraw.SurfaceCaps()
        Dim surfBack, surfFront As DirectDraw.SurfaceDescription

        Caps.PrimarySurface = True

        surfFront = New DirectDraw.SurfaceDescription(Caps)

        Primary = New DirectDraw.Surface(surfFront, m_VideoDevice)
        Primary.Clipper = New DirectDraw.Clipper(m_VideoDevice)
        Primary.Clipper.Window = f

        Caps.Clear()
        Caps.OffScreenPlain = True
        'Caps.SystemMemory = True  <-- drops my fps by 75% (yuck)

        surfBack = New DirectDraw.SurfaceDescription(Caps)

        surfBack.Width = f.Width
        surfBack.Height = f.Height

        f.Show()

        Backbuffer = New DirectDraw.Surface(surfBack, m_VideoDevice)

        LoadResources()

End Sub

On a side note, I remember using .Flip back in VB + DX7... Would it be better here performance-wise? I got this code from createdbyx.com, the rendering is all done with the following (after the .Draw calls):

Visual Basic:
objDestRect = New Rectangle(0, 0, 1024, 768)
Primary.Draw(objDestRect, Backbuffer, DirectDraw.DrawFlags.Wait)

Last, createdbyx has a windowed example on his site that works perfectly with a picturebox. As a test, I removed the picturebox and changed the code to directly draw to the form. Still worked perfect, with no need to offset x/y... Yet when I take that working initialization code and throw it in my engine class (after updating variable names), doesn't work :\


Forgive any errors in the code, I had the subs separated out into separate subs for windowed and fullscreen and just reconstructed my original sub that used a boolean to choose between the two (since I have no problem with fullscreen).

Thanks in advance,

Lyc
 
Back
Top