home *** CD-ROM | disk | FTP | other *** search
- VERSION 5.00
- Begin VB.Form Form1
- Caption = "Form1"
- ClientHeight = 3195
- ClientLeft = 60
- ClientTop = 345
- ClientWidth = 4680
- LinkTopic = "Form1"
- ScaleHeight = 3195
- ScaleWidth = 4680
- StartUpPosition = 3 'Windows Default
- Attribute VB_Name = "Form1"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = False
- Attribute VB_PredeclaredId = True
- Attribute VB_Exposed = False
- '---------------------------------------------------------------
- ' Visual Basic Game Programming for Teens
- ' Chapter 2 - LoadBitmap program
- '---------------------------------------------------------------
- Const SCREENWIDTH As Long = 640
- Const SCREENHEIGHT As Long = 480
- Const FULLSCREEN As Boolean = False
- Const C_BLACK As Long = &H0
- Const C_RED As Long = &HFF0000
- 'the DirectX objects
- Dim dx As DirectX8
- Dim d3d As Direct3D8
- Dim d3dx As New D3DX8
- Dim dispmode As D3DDISPLAYMODE
- Dim d3dpp As D3DPRESENT_PARAMETERS
- Dim d3ddev As Direct3DDevice8
- 'some surfaces
- Dim backbuffer As Direct3DSurface8
- Dim surface As Direct3DSurface8
- Private Sub Form_Load()
- 'set up the main form
- Form1.Caption = "LoadBitmap"
- Form1.AutoRedraw = False
- Form1.BorderStyle = 1
- Form1.ClipControls = False
- Form1.ScaleMode = 3
- Form1.Width = Screen.TwipsPerPixelX * (SCREENWIDTH + 12)
- Form1.Height = Screen.TwipsPerPixelY * (SCREENHEIGHT + 30)
- Form1.Show
- 'initialize Direct3D
- InitDirect3D Me.hwnd, SCREENWIDTH, SCREENHEIGHT, FULLSCREEN
- 'get reference to the back buffer
- Set backbuffer = d3ddev.GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO)
- 'load the bitmap file
- Set surface = LoadSurface(App.Path & "\sky.bmp")
- End Sub
- Public Sub InitDirect3D(ByVal hwnd As Long, ByVal lWidth As Long, ByVal lHeight As Long, ByVal bFullscreen As Boolean)
- 'catch any errors here
- On Local Error GoTo fatal_error
- 'create the DirectX object
- Set dx = New DirectX8
- 'create the Direct3D object
- Set d3d = dx.Direct3DCreate()
- If d3d Is Nothing Then
- MsgBox "Error initializing Direct3D!"
- Shutdown
- End If
- 'tell D3D to use the current color depth
- d3d.GetAdapterDisplayMode D3DADAPTER_DEFAULT, dispmode
- 'set the display settings used to create the device
- Dim d3dpp As D3DPRESENT_PARAMETERS
- d3dpp.hDeviceWindow = hwnd
- d3dpp.BackBufferCount = 1
- d3dpp.BackBufferWidth = lWidth
- d3dpp.BackBufferHeight = lHeight
- d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
- d3dpp.BackBufferFormat = dispmode.Format
- 'set windowed or fullscreen mode
- If bFullscreen Then
- d3dpp.Windowed = 0
- Else
- d3dpp.Windowed = 1
- End If
- 'chapter 9
- d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE
- d3dpp.AutoDepthStencilFormat = D3DFMT_D32
- 'create the D3D primary device
- Set d3ddev = d3d.CreateDevice( _
- D3DADAPTER_DEFAULT, _
- D3DDEVTYPE_HAL, _
- hwnd, _
- D3DCREATE_SOFTWARE_VERTEXPROCESSING, _
- d3dpp)
-
- If d3ddev Is Nothing Then
- MsgBox "Error creating the Direct3D device!"
- Shutdown
- End If
- Exit Sub
- fatal_error:
- MsgBox "Critical error in Start_Direct3D!"
- Shutdown
- End Sub
- Private Function LoadSurface(ByVal filename As String) As Direct3DSurface8
- On Local Error GoTo fatal_error
- Dim surf As Direct3DSurface8
- 'return error by default
- Set LoadSurface = Nothing
- 'create the new surface
- Set surf = d3ddev.CreateImageSurface(SCREENWIDTH, SCREENHEIGHT, dispmode.Format)
- If surf Is Nothing Then
- MsgBox "Error creating surface!"
- Exit Function
- End If
- 'load surface from file
- d3dx.LoadSurfaceFromFile _
- surf, _
- ByVal 0, _
- ByVal 0, _
- filename, _
- ByVal 0, _
- D3DX_DEFAULT, _
- 0, _
- ByVal 0
-
- If surf Is Nothing Then
- MsgBox "Error loading " & filename & "!"
- Exit Function
- End If
- 'return the new surface
- Set LoadSurface = surf
- fatal_error:
- Exit Function
- End Function
- Private Sub Form_Paint()
- 'copy the bitmap image to the backbuffer
- d3ddev.CopyRects surface, ByVal 0, 0, backbuffer, ByVal 0
- 'draw the back buffer on the screen
- d3ddev.Present ByVal 0, ByVal 0, 0, ByVal 0
- End Sub
- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
- If KeyCode = 27 Then Shutdown
- End Sub
- Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
- Shutdown
- End Sub
- Private Sub Shutdown()
- Set surface = Nothing
- Set d3ddev = Nothing
- Set d3d = Nothing
- Set dx = Nothing
- End
- End Sub
-