Better Minimal Code (2nd Dialog)

Category: Graphics - OpenGL

Date: 03-28-2012

Return to Index


 
'This example takes the "minimal code" example and puts a little more content
'in it - particularly to clarify properties instead of using default values.
 
'This example also uses a 2nd dialog as the OpenGL canvas, but a control can
'also be used.
 
 
'Compilable Example:
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
#Include "win32api.inc"
#Include "gl.inc"
#Include "glu.inc"
 
Global hDlg, hDlg2, hDC, hRC As DWord
 
Function PBMain() As Long
   Dialog New Pixels, 0, "Main Screen",,, 320, 240,%WS_OverlappedWindow To hDlg
   Dialog Show Modal hdlg Call dlgproc
End Function
 
CallBack Function dlgproc()
   Select Case CB.Msg
      Case %WM_InitDialog : OpenDialog2 : DrawScene
   End Select
End Function
 
Sub OpenDialog2
   Dialog New Pixels, 0, "OpenGL Canvas",200,200, 320, 240,%WS_OverlappedWindow To hDlg2
   Dialog Show Modeless hdlg2 Call dlgproc2
End Sub
 
CallBack Function dlgproc2()
   Select Case CB.Msg
      Case %WM_InitDialog : GetRenderContext
         InitializeScene
      Case %WM_Size       : ResizeScene Lo(Word, CB.lParam), Hi(Word, CB.lParam)
         DrawScene
      Case %WM_Paint      : DrawScene
      Case %WM_Close      : wglmakecurrent %null, %null 'unselect rendering context
         wgldeletecontext hRC        'delete the rendering context
         releasedc hDlg2, hDC         'release device context
   End Select
End Function
 
Sub GetRenderContext
   Local pfd As PIXELFORMATDESCRIPTOR   'pixel format properties for device context
   pfd.nSize       =  SizeOf(PIXELFORMATDESCRIPTOR)
   pfd.nVersion    =  1
   pfd.dwFlags     = %pfd_draw_to_window Or %pfd_support_opengl Or %pfd_doublebuffer
   pfd.dwlayermask = %pfd_main_plane
   pfd.iPixelType  = %pfd_type_rgba
   pfd.ccolorbits  = 24
   pfd.cdepthbits  = 24
 
   hDC = GetDC(hDlg2)                                      'DC for dialog
   SetPixelFormat(hDC, ChoosePixelFormat(hDC, pfd), pfd)  'set properties of device context
   hRC = wglCreateContext (hDC)                           'get rendering context
   wglMakeCurrent hDC, hRC                                'make the RC current
End Sub
 
Sub InitializeScene
   glClearColor 0,0,0,0     'sets color to be used with glClear
   glClearDepth 1           'sets zvalue to be used with glClear
End Sub
 
Sub ResizeScene (w As Long, h As Long)
   glViewport 0, 0, w, h             'resize viewport to match window size
   glMatrixMode %gl_projection       'select the projection matrix
   glLoadIdentity                    'reset the projection matrix
   gluPerspective 45, w/h, 0.1, 100  'calculate the aspect ratio of the Window
   glMatrixMode %gl_modelview        'select the modelview matrix
End Sub
 
Sub DrawScene
   glClear %gl_color_buffer_bit Or %gl_depth_buffer_bit  'clear buffers
   glLoadIdentity               'clear the modelview matrix
   glBegin %gl_triangles        'select triangles as primitive
   glcolor3ub 255,0,0        'set default vertex color
   glvertex3f  0, 1,  -4     'vertex1
   glvertex3f  -1, 0, -4     'vertex2
   glvertex3f  1, -1, -4     'vertex3
   glEnd
   SwapBuffers hDC              'display the buffer (image)
End Sub
 
'gbs_00620
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm