GLFW + GLEW not working

Linux specific forum
User avatar
StarBootics
Addict
Addict
Posts: 1006
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

GLFW + GLEW not working

Post by StarBootics »

Hello everyone,

OK I have spent many hours trying to figure out a problem with GLEW (OpenGL Extension Wrangler Library) Please note that you need to have the GLFW library installed as well as GLEW. There is the testing code

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GLFW Import Module
; File Name : GLFW Import - Module.pb
; File version: 1.0.0 Beta
; Programming : TO BE VALIDATED
; Programmed by : StarBootics
; Date : July 19th, 2022
; Last Update : July 19th, 2022
; PureBasic code : V6.00 LTS
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

DeclareModule GLFW
  
  #GLFW_TRUE = 1
  #GLFW_FALSE = 0
  
  #GLFW_RELEASE = 0
  #GLFW_PRESS = 1
  #GLFW_REPEAT = 2
  
  #GLFW_HAT_CENTERED = 0
  #GLFW_HAT_UP = 1
  #GLFW_HAT_RIGHT = 2
  #GLFW_HAT_DOWN = 4
  #GLFW_HAT_LEFT = 8
  #GLFW_HAT_RIGHT_UP = (#GLFW_HAT_RIGHT | #GLFW_HAT_UP)
  #GLFW_HAT_RIGHT_DOWN = (#GLFW_HAT_RIGHT | #GLFW_HAT_DOWN)
  #GLFW_HAT_LEFT_UP = (#GLFW_HAT_LEFT | #GLFW_HAT_UP)
  #GLFW_HAT_LEFT_DOWN = (#GLFW_HAT_LEFT | #GLFW_HAT_DOWN)
  
  #GLFW_KEY_UNKNOWN = -1
  
  #GLFW_KEY_SPACE             = 32
  #GLFW_KEY_APOSTROPHE        = 39  ;/* ' */
  #GLFW_KEY_COMMA             = 44  ;/* , */
  #GLFW_KEY_MINUS             = 45  ;/* - */
  #GLFW_KEY_PERIOD            = 46  ;/* . */
  #GLFW_KEY_SLASH             = 47  ;/* / */
  #GLFW_KEY_0                 = 48
  #GLFW_KEY_1                 = 49
  #GLFW_KEY_2                 = 50
  #GLFW_KEY_3                 = 51
  #GLFW_KEY_4                 = 52
  #GLFW_KEY_5                 = 53
  #GLFW_KEY_6                 = 54
  #GLFW_KEY_7                 = 55
  #GLFW_KEY_8                 = 56
  #GLFW_KEY_9                 = 57
  #GLFW_KEY_SEMICOLON         = 59  ;/* ; */
  #GLFW_KEY_EQUAL             = 61  ;/* = */
  #GLFW_KEY_A                 = 65
  #GLFW_KEY_B                 = 66
  #GLFW_KEY_C                 = 67
  #GLFW_KEY_D                 = 68
  #GLFW_KEY_E                 = 69
  #GLFW_KEY_F                 = 70
  #GLFW_KEY_G                 = 71
  #GLFW_KEY_H                 = 72
  #GLFW_KEY_I                 = 73
  #GLFW_KEY_J                 = 74
  #GLFW_KEY_K                 = 75
  #GLFW_KEY_L                 = 76
  #GLFW_KEY_M                 = 77
  #GLFW_KEY_N                 = 78
  #GLFW_KEY_O                 = 79
  #GLFW_KEY_P                 = 80
  #GLFW_KEY_Q                 = 81
  #GLFW_KEY_R                 = 82
  #GLFW_KEY_S                 = 83
  #GLFW_KEY_T                 = 84
  #GLFW_KEY_U                 = 85
  #GLFW_KEY_V                 = 86
  #GLFW_KEY_W                 = 87
  #GLFW_KEY_X                 = 88
  #GLFW_KEY_Y                 = 89
  #GLFW_KEY_Z                 = 90
  #GLFW_KEY_LEFT_BRACKET      = 91  ;/* [ */
  #GLFW_KEY_BACKSLASH         = 92  ;/* \ */
  #GLFW_KEY_RIGHT_BRACKET     = 93  ;/* ] */
  #GLFW_KEY_GRAVE_ACCENT      = 96  ;/* ` */
  #GLFW_KEY_WORLD_1           = 161 ;/* non-US #1 */
  #GLFW_KEY_WORLD_2           = 162 ;/* non-US #2 */
  
  #GLFW_KEY_ESCAPE            = 256
  #GLFW_KEY_ENTER             = 257
  #GLFW_KEY_TAB               = 258
  #GLFW_KEY_BACKSPACE         = 259
  #GLFW_KEY_INSERT            = 260
  #GLFW_KEY_DELETE            = 261
  #GLFW_KEY_RIGHT             = 262
  #GLFW_KEY_LEFT              = 263
  #GLFW_KEY_DOWN              = 264
  #GLFW_KEY_UP                = 265
  #GLFW_KEY_PAGE_UP           = 266
  #GLFW_KEY_PAGE_DOWN         = 267
  #GLFW_KEY_HOME              = 268
  #GLFW_KEY_END               = 269
  #GLFW_KEY_CAPS_LOCK         = 280
  #GLFW_KEY_SCROLL_LOCK       = 281
  #GLFW_KEY_NUM_LOCK          = 282
  #GLFW_KEY_PRINT_SCREEN      = 283
  #GLFW_KEY_PAUSE             = 284
  #GLFW_KEY_F1                = 290
  #GLFW_KEY_F2                = 291
  #GLFW_KEY_F3                = 292
  #GLFW_KEY_F4                = 293
  #GLFW_KEY_F5                = 294
  #GLFW_KEY_F6                = 295
  #GLFW_KEY_F7                = 296
  #GLFW_KEY_F8                = 297
  #GLFW_KEY_F9                = 298
  #GLFW_KEY_F10               = 299
  #GLFW_KEY_F11               = 300
  #GLFW_KEY_F12               = 301
  #GLFW_KEY_F13               = 302
  #GLFW_KEY_F14               = 303
  #GLFW_KEY_F15               = 304
  #GLFW_KEY_F16               = 305
  #GLFW_KEY_F17               = 306
  #GLFW_KEY_F18               = 307
  #GLFW_KEY_F19               = 308
  #GLFW_KEY_F20               = 309
  #GLFW_KEY_F21               = 310
  #GLFW_KEY_F22               = 311
  #GLFW_KEY_F23               = 312
  #GLFW_KEY_F24               = 313
  #GLFW_KEY_F25               = 314
  #GLFW_KEY_KP_0              = 320
  #GLFW_KEY_KP_1              = 321
  #GLFW_KEY_KP_2              = 322
  #GLFW_KEY_KP_3              = 323
  #GLFW_KEY_KP_4              = 324
  #GLFW_KEY_KP_5              = 325
  #GLFW_KEY_KP_6              = 326
  #GLFW_KEY_KP_7              = 327
  #GLFW_KEY_KP_8              = 328
  #GLFW_KEY_KP_9              = 329
  #GLFW_KEY_KP_DECIMAL        = 330
  #GLFW_KEY_KP_DIVIDE         = 331
  #GLFW_KEY_KP_MULTIPLY       = 332
  #GLFW_KEY_KP_SUBTRACT       = 333
  #GLFW_KEY_KP_ADD            = 334
  #GLFW_KEY_KP_ENTER          = 335
  #GLFW_KEY_KP_EQUAL          = 336
  #GLFW_KEY_LEFT_SHIFT        = 340
  #GLFW_KEY_LEFT_CONTROL      = 341
  #GLFW_KEY_LEFT_ALT          = 342
  #GLFW_KEY_LEFT_SUPER        = 343
  #GLFW_KEY_RIGHT_SHIFT       = 344
  #GLFW_KEY_RIGHT_CONTROL     = 345
  #GLFW_KEY_RIGHT_ALT         = 346
  #GLFW_KEY_RIGHT_SUPER       = 347
  #GLFW_KEY_MENU              = 348
  
  #GLFW_KEY_LAST              = #GLFW_KEY_MENU
  
  #GLFW_MOD_SHIFT           =  $0001
  #GLFW_MOD_CONTROL         =  $0002
  #GLFW_MOD_ALT             =  $0004
  #GLFW_MOD_SUPER           =  $0008
  #GLFW_MOD_CAPS_LOCK       =  $0010
  #GLFW_MOD_NUM_LOCK        =  $0020
  
  #GLFW_MOUSE_BUTTON_1        = 0
  #GLFW_MOUSE_BUTTON_2        = 1
  #GLFW_MOUSE_BUTTON_3        = 2
  #GLFW_MOUSE_BUTTON_4        = 3
  #GLFW_MOUSE_BUTTON_5        = 4
  #GLFW_MOUSE_BUTTON_6        = 5
  #GLFW_MOUSE_BUTTON_7        = 6
  #GLFW_MOUSE_BUTTON_8        = 7
  #GLFW_MOUSE_BUTTON_LAST     = #GLFW_MOUSE_BUTTON_8
  #GLFW_MOUSE_BUTTON_LEFT     = #GLFW_MOUSE_BUTTON_1
  #GLFW_MOUSE_BUTTON_RIGHT    = #GLFW_MOUSE_BUTTON_2
  #GLFW_MOUSE_BUTTON_MIDDLE   = #GLFW_MOUSE_BUTTON_3
  
  #GLFW_JOYSTICK_1            = 0
  #GLFW_JOYSTICK_2            = 1
  #GLFW_JOYSTICK_3            = 2
  #GLFW_JOYSTICK_4            = 3
  #GLFW_JOYSTICK_5            = 4
  #GLFW_JOYSTICK_6            = 5
  #GLFW_JOYSTICK_7            = 6
  #GLFW_JOYSTICK_8            = 7
  #GLFW_JOYSTICK_9            = 8
  #GLFW_JOYSTICK_10           = 9
  #GLFW_JOYSTICK_11           = 10
  #GLFW_JOYSTICK_12           = 11
  #GLFW_JOYSTICK_13           = 12
  #GLFW_JOYSTICK_14           = 13
  #GLFW_JOYSTICK_15           = 14
  #GLFW_JOYSTICK_16           = 15
  #GLFW_JOYSTICK_LAST         = #GLFW_JOYSTICK_16
  
  #GLFW_GAMEPAD_BUTTON_A               = 0
  #GLFW_GAMEPAD_BUTTON_B               = 1
  #GLFW_GAMEPAD_BUTTON_X               = 2
  #GLFW_GAMEPAD_BUTTON_Y               = 3
  #GLFW_GAMEPAD_BUTTON_LEFT_BUMPER     = 4
  #GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER    = 5
  #GLFW_GAMEPAD_BUTTON_BACK            = 6
  #GLFW_GAMEPAD_BUTTON_START           = 7
  #GLFW_GAMEPAD_BUTTON_GUIDE           = 8
  #GLFW_GAMEPAD_BUTTON_LEFT_THUMB      = 9
  #GLFW_GAMEPAD_BUTTON_RIGHT_THUMB     = 10
  #GLFW_GAMEPAD_BUTTON_DPAD_UP         = 11
  #GLFW_GAMEPAD_BUTTON_DPAD_RIGHT      = 12
  #GLFW_GAMEPAD_BUTTON_DPAD_DOWN       = 13
  #GLFW_GAMEPAD_BUTTON_DPAD_LEFT       = 14
  #GLFW_GAMEPAD_BUTTON_LAST            = #GLFW_GAMEPAD_BUTTON_DPAD_LEFT
  
  #GLFW_GAMEPAD_BUTTON_CROSS       = #GLFW_GAMEPAD_BUTTON_A
  #GLFW_GAMEPAD_BUTTON_CIRCLE      = #GLFW_GAMEPAD_BUTTON_B
  #GLFW_GAMEPAD_BUTTON_SQUARE      = #GLFW_GAMEPAD_BUTTON_X
  #GLFW_GAMEPAD_BUTTON_TRIANGLE    = #GLFW_GAMEPAD_BUTTON_Y
  
  #GLFW_GAMEPAD_AXIS_LEFT_X        = 0
  #GLFW_GAMEPAD_AXIS_LEFT_Y        = 1
  #GLFW_GAMEPAD_AXIS_RIGHT_X       = 2
  #GLFW_GAMEPAD_AXIS_RIGHT_Y       = 3
  #GLFW_GAMEPAD_AXIS_LEFT_TRIGGER  = 4
  #GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER = 5
  #GLFW_GAMEPAD_AXIS_LAST          = #GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER
  
  #GLFW_NO_ERROR              = 0
  #GLFW_NOT_INITIALIZED       = $00010001
  #GLFW_NO_CURRENT_CONTEXT    = $00010002
  #GLFW_INVALID_ENUM          = $00010003
  #GLFW_INVALID_VALUE         = $00010004
  #GLFW_OUT_OF_MEMORY         = $00010005
  #GLFW_API_UNAVAILABLE       = $00010006
  #GLFW_VERSION_UNAVAILABLE   = $00010007
  #GLFW_PLATFORM_ERROR        = $00010008
  #GLFW_FORMAT_UNAVAILABLE      = $00010009
  #GLFW_NO_WINDOW_CONTEXT       = $0001000A
  #GLFW_FOCUSED                 = $00020001
  #GLFW_ICONIFIED               = $00020002
  #GLFW_RESIZABLE               = $00020003
  #GLFW_VISIBLE                 = $00020004
  #GLFW_DECORATED               = $00020005
  #GLFW_AUTO_ICONIFY            = $00020006
  #GLFW_FLOATING                = $00020007
  #GLFW_MAXIMIZED               = $00020008
  #GLFW_CENTER_CURSOR           = $00020009
  #GLFW_TRANSPARENT_FRAMEBUFFER = $0002000A
  #GLFW_HOVERED                 = $0002000B
  #GLFW_FOCUS_ON_SHOW           = $0002000C
  #GLFW_RED_BITS                = $00021001
  #GLFW_GREEN_BITS              = $00021002
  #GLFW_BLUE_BITS               = $00021003
  #GLFW_ALPHA_BITS              = $00021004
  #GLFW_DEPTH_BITS              = $00021005
  #GLFW_STENCIL_BITS            = $00021006
  #GLFW_ACCUM_RED_BITS          = $00021007
  #GLFW_ACCUM_GREEN_BITS        = $00021008
  #GLFW_ACCUM_BLUE_BITS         = $00021009
  #GLFW_ACCUM_ALPHA_BITS        = $0002100A
  #GLFW_AUX_BUFFERS             = $0002100B
  #GLFW_STEREO                  = $0002100C
  #GLFW_SAMPLES                 = $0002100D
  #GLFW_SRGB_CAPABLE            = $0002100E
  #GLFW_REFRESH_RATE            = $0002100F
  #GLFW_DOUBLEBUFFER            = $00021010
  #GLFW_CLIENT_API              = $00022001
  #GLFW_CONTEXT_VERSION_MAJOR   = $00022002
  #GLFW_CONTEXT_VERSION_MINOR   = $00022003
  #GLFW_CONTEXT_REVISION        = $00022004
  #GLFW_CONTEXT_ROBUSTNESS      = $00022005
  #GLFW_OPENGL_FORWARD_COMPAT   = $00022006
  #GLFW_OPENGL_DEBUG_CONTEXT    = $00022007
  #GLFW_OPENGL_PROFILE          = $00022008
  #GLFW_CONTEXT_RELEASE_BEHAVIOR = $00022009
  #GLFW_CONTEXT_NO_ERROR        = $0002200A
  #GLFW_CONTEXT_CREATION_API    = $0002200B
  #GLFW_SCALE_TO_MONITOR        = $0002200C
  #GLFW_COCOA_RETINA_FRAMEBUFFER = $00023001
  #GLFW_COCOA_FRAME_NAME         = $00023002
  #GLFW_COCOA_GRAPHICS_SWITCHING = $00023003
  #GLFW_X11_CLASS_NAME          = $00024001
  #GLFW_X11_INSTANCE_NAME       = $00024002
  
  
  #GLFW_NO_API                  =        0
  #GLFW_OPENGL_API              = $00030001
  #GLFW_OPENGL_ES_API           = $00030002
  
  #GLFW_NO_ROBUSTNESS           =        0
  #GLFW_NO_RESET_NOTIFICATION   = $00031001
  #GLFW_LOSE_CONTEXT_ON_RESET   = $00031002
  
  #GLFW_OPENGL_ANY_PROFILE      =        0
  #GLFW_OPENGL_CORE_PROFILE     = $00032001
  #GLFW_OPENGL_COMPAT_PROFILE   = $00032002
  
  #GLFW_CURSOR                  = $00033001
  #GLFW_STICKY_KEYS             = $00033002
  #GLFW_STICKY_MOUSE_BUTTONS    = $00033003
  #GLFW_LOCK_KEY_MODS           = $00033004
  #GLFW_RAW_MOUSE_MOTION        = $00033005
  
  #GLFW_CURSOR_NORMAL           = $00034001
  #GLFW_CURSOR_HIDDEN           = $00034002
  #GLFW_CURSOR_DISABLED         = $00034003
  
  #GLFW_ANY_RELEASE_BEHAVIOR    =        0
  #GLFW_RELEASE_BEHAVIOR_FLUSH  = $00035001
  #GLFW_RELEASE_BEHAVIOR_NONE   = $00035002
  
  #GLFW_NATIVE_CONTEXT_API      = $00036001
  #GLFW_EGL_CONTEXT_API         = $00036002
  #GLFW_OSMESA_CONTEXT_API      = $00036003
  
  
  #GLFW_ARROW_CURSOR            = $00036001
  #GLFW_IBEAM_CURSOR            = $00036002
  #GLFW_CROSSHAIR_CURSOR        = $00036003
  #GLFW_HAND_CURSOR             = $00036004
  #GLFW_HRESIZE_CURSOR          = $00036005
  #GLFW_VRESIZE_CURSOR          = $00036006
  #GLFW_CONNECTED               = $00040001
  #GLFW_DISCONNECTED            = $00040002
  
  #GLFW_JOYSTICK_HAT_BUTTONS    = $00050001
  
  #GLFW_COCOA_CHDIR_RESOURCES   = $00051001
  #GLFW_COCOA_MENUBAR           = $00051002
  
  #GLFW_DONT_CARE              = -1
  
  Structure GLFWvidmode
    
    Width.l
    Height.l
    RedBits.l
    GreenBits.l
    BlueBits.l
    RefreshRate.l
    
  EndStructure
  
  Structure GLFWgammaramp
    
    *Red
    *Green
    *Blue
    Size.l
    
  EndStructure
  
  Structure GLFWimage
    
    Width.l
    Height.l
    *Pixel
    
  EndStructure
  
  Structure GLFWgamepadstate
    
    Button.a[15]
    Axis.f[6]
    
  EndStructure
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      #LIB_GLFW_FILE_NAME = "D:/glfw-3.3.7.bin.WIN64/lib-vc2022/glfw3dll.lib"
      
    CompilerCase #PB_OS_Linux
      #LIB_GLFW_FILE_NAME = "/usr/lib/x86_64-linux-gnu/libglfw.so.3.3"
      
    CompilerCase #PB_OS_MacOS
      #LIB_GLFW_FILE_NAME = ""
      
  CompilerEndSelect

  ImportC #LIB_GLFW_FILE_NAME
    
    glfwInit.l()
    glfwTerminate()
    glfwInitHint(hint.l, value.l)
    glfwGetVersion(*Major, *Minor, *Revision)
    glfwGetVersionString_() As "glfwGetVersionString"
    glfwGetError.l(Description.p-utf8)
    glfwGetMonitors.i(*Count)
    glfwGetPrimaryMonitor.i()
    glfwGetMonitorPos(*Monitor, *xpos, *ypos)
    glfwGetMonitorWorkarea(*Monitor, *xpos, *ypos, *width, *height)
    glfwGetMonitorPhysicalSize(*Monitor, *WidthMM, *HeightMM)
    glfwGetMonitorContentScale(*Monitor, *xscale, *yscale)
    glfwGetMonitorName_(*Monitor) As "glfwGetMonitorName"
    glfwSetMonitorUserPointer(*Monitor, *Pointer)
    glfwGetMonitorUserPointer.i(*Monitor)
    glfwSetMonitorCallback(*Callback)
    glfwGetVideoModes(*Monitor, *Count)
    glfwGetVideoMode(*Monitor)
    glfwSetGamma(*Monitor, Gamma.f)
    glfwGetGammaRamp.i(*Monitor)
    glfwSetGammaRamp(*Monitor, *Ramp.GLFWgammaramp)
    glfwDefaultWindowHints()
    glfwWindowHint(hint.l, value.l)
    glfwWindowHintString(hint.l, value.p-utf8)
    glfwCreateWindow.i(width.l, height.l, title.p-utf8, *Monitor, *Share)
    glfwDestroyWindow(*Window)
    glfwWindowShouldClose.l(*Window)
    glfwSetWindowShouldClose(*Window, value.l)
    glfwSetWindowTitle(*Window, Title.p-utf8)
    glfwSetWindowIcon(*Window, Count.l, *Images.GLFWimage)
    glfwGetWindowPos(*Window, *xpos, *ypos)
    glfwSetWindowPos(*Window, xpos.l, ypos.l)
    glfwGetWindowSize(*Window, *width, *height)
    glfwSetWindowSizeLimits(*Window, minwidth.l, minheight.l, maxwidth.l, maxheight.l)
    glfwSetWindowAspectRatio(*Window, numer.l, denom.l)
    glfwSetWindowSize(*Window, width.l, height.l)
    glfwGetFramebufferSize(*Window, *width, *height)
    glfwGetWindowFrameSize(*Window, *left, *top, *right, *bottom)
    glfwGetWindowContentScale(*Window, *xscale, *yscale)
    glfwGetWindowOpacity(*Window)
    glfwSetWindowOpacity(*Window, opacity.f)
    glfwIconifyWindow(*Window)
    glfwRestoreWindow(*Window)
    glfwMaximizeWindow(*Window)
    glfwShowWindow(*Window)
    glfwHideWindow(*Window)
    glfwFocusWindow(*Window)
    glfwRequestWindowAttention(*Window)
    glfwGetWindowMonitor.i(*Window)
    glfwSetWindowMonitor(*Window, *Monitor, xpos.l, ypos.l, width.l, height.l, refreshRate.l)
    glfwGetWindowAttrib.l(*Window, attrib.l)
    glfwSetWindowAttrib(*Window, attrib.l, value.l)
    glfwSetWindowUserPointer(*Window, *pointer)
    glfwGetWindowUserPointer.i(*Window)
    glfwSetWindowPosCallback(*Window, *Callback)
    glfwSetWindowSizeCallback(*Window, *Callback)
    glfwSetWindowCloseCallback(*Window, *Callback)
    glfwSetWindowRefreshCallback(*Window, *Callback)
    glfwSetWindowFocusCallback(*Window, *Callback)
    glfwSetWindowIconifyCallback(*Window, *Callback)
    glfwSetWindowMaximizeCallback(*Window, *Callback)
    glfwSetFramebufferSizeCallback(*Window, *Callback)
    glfwSetWindowContentScaleCallback(*Window, *Callback)
    glfwPollEvents()
    glfwWaitEvents()
    glfwWaitEventsTimeout(Timeout.d)
    glfwPostEmptyEvent()
    glfwGetInputMode.l(*Window, Mode.l)
    glfwSetInputMode(*Window, Mode.l, Value.l)
    glfwRawMouseMotionSupported.l()
    glfwGetKeyName_(key.l, scancode.l) As "glfwGetKeyName"
    glfwGetKeyScancode.l(key.l)
    glfwGetKey.l(*Window, key.l)
    glfwGetMouseButton.l(*Window, Button.l)
    glfwGetCursorPos(*Window, *xpos, *ypos)
    glfwSetCursorPos(*Window, xpos.d, ypos.d)
    glfwCreateCursor.i(*Image.GLFWimage, xhot.l, yhot.l)
    glfwCreateStandardCursor.i(shape.l)
    glfwDestroyCursor(*Cursor)
    glfwSetCursor(*Window, *Cursor)
    glfwSetKeyCallback(*Window, *Callback)
    glfwSetCharCallback(*Window, *Callback)
    glfwSetCharModsCallback(*Window, *Callback)
    glfwSetMouseButtonCallback(*Window, *Callback)
    glfwSetCursorPosCallback(*Window, *Callback)
    glfwSetCursorEnterCallback(*Window, *Callback)
    glfwSetScrollCallback(*Window, *Callback)
    glfwSetDropCallback(*Window, *Callback)
    glfwJoystickPresent.l(jid.l)
    glfwGetJoystickAxes.i(jid.l, *Count)
    glfwGetJoystickButtons.i(jid.l, *Count)
    glfwGetJoystickHats.i(jid.l, *Count)
    glfwGetJoystickName_(jid.l) As "glfwGetJoystickName"
    glfwGetJoystickGUID_(jid.l) As "glfwGetJoystickGUID"
    glfwSetJoystickUserPointer(jid.l, *Pointer)
    glfwGetJoystickUserPointer.i(jid.l)
    glfwJoystickIsGamepad.l(jid.l)
    glfwSetJoystickCallback(*Callback)
    glfwUpdateGamepadMappings(String.p-utf8)
    glfwGetGamepadName_(jid.l) As "glfwGetGamepadName"
    glfwGetGamepadState(jid.l, *State.GLFWgamepadstate)
    glfwSetClipboardString(*Window, String.p-utf8)
    glfwGetClipboardString_(*Window) As "glfwGetClipboardString"
    glfwGetTime.d()
    glfwSetTime(time.d)
    glfwGetTimerValue.q()
    glfwGetTimerFrequency.q()
    glfwMakeContextCurrent(*Window)
    glfwGetCurrentContext.i()
    glfwSwapBuffers(*Window)
    glfwSwapInterval(Interval.l)
    glfwExtensionSupported.i(Extension.p-utf8)
    glfwGetProcAddress.i(procname.p-utf8)
    glfwVulkanSupported.l()
    glfwGetRequiredInstanceExtensions.i(*Count)
    glfwGetInstanceProcAddress(*Instance, procname.p-utf8)
    glfwGetPhysicalDevicePresentationSupport.l(*Instance, *device, queuefamily.l)
    glfwCreateWindowSurface(*Instance, *Window, *Allocator, *Surface)
    
  EndImport
  
  Declare.s glfwGetVersionString()
  Declare.s glfwGetMonitorName(*Monitor)
  Declare.s glfwGetKeyName(key.l, scancode.l)
  Declare.s glfwGetJoystickName(jid.l)
  Declare.s glfwGetJoystickGUID(jid.l)
  Declare.s glfwGetGamepadName(jid.l)
  Declare.s glfwGetClipboardString(*Window)
  
EndDeclareModule

Module GLFW
  
  Procedure.s glfwGetVersionString()
    
    ProcedureReturn PeekS(glfwGetVersionString_(), -1, #PB_Ascii)
  EndProcedure
  
  Procedure.s glfwGetMonitorName(*Monitor)
  
    ProcedureReturn PeekS(glfwGetMonitorName_(*Monitor), -1, #PB_UTF8)
  EndProcedure
  
  Procedure.s glfwGetKeyName(key.l, scancode.l)
  
    ProcedureReturn PeekS(glfwGetKeyName_(key, scancode), -1, #PB_UTF8)
  EndProcedure
  
  Procedure.s glfwGetJoystickName(jid.l)
  
    ProcedureReturn PeekS(glfwGetJoystickName_(jid), -1, #PB_UTF8)
  EndProcedure
  
  Procedure.s glfwGetJoystickGUID(jid.l)
  
    ProcedureReturn PeekS(glfwGetJoystickGUID_(jid), -1, #PB_UTF8)
  EndProcedure
  
  Procedure.s glfwGetGamepadName(jid.l)
  
    ProcedureReturn PeekS(glfwGetGamepadName_(jid), -1, #PB_UTF8)
  EndProcedure
  
  Procedure.s glfwGetClipboardString(*Window)
  
    ProcedureReturn PeekS(glfwGetClipboardString_(*Window), -1, #PB_UTF8)
  EndProcedure
  
EndModule

DeclareModule GLEW
  
  #GLEW_OK = 0
  #GLEW_NOERROR = 0
  #GLEW_ERROR_NO_GL_VERSION = 1
  #GLEW_ERROR_GL_VERSION_10_ONLY = 2
  #GLEW_ERROR_GLX_VERSION_11_ONLY = 3
  #GLEW_ERROR_NO_GLX_DISPLAY = 4
  #GLEW_VERSION = 1
  #GLEW_VERSION_MAJOR = 2
  #GLEW_VERSION_MINOR = 3
  #GLEW_VERSION_MICRO = 4
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      #LIB_GLEW_FILE_NAME = ""
      
    CompilerCase #PB_OS_Linux
      #LIB_GLEW_FILE_NAME = "-lGLEW"
      
    CompilerCase #PB_OS_MacOS
      #LIB_GLEW_FILE_NAME = ""
      
  CompilerEndSelect
  
  ImportC #LIB_GLEW_FILE_NAME
    
    glewInit.l()
    glewIsSupported.i(Name.p-ascii)
    glewGetExtension.i(Name.p-ascii)
    glewGetErrorString_(Error.l) As "glewGetErrorString"
    glewGetString_(Name.l) As "glewGetString"
    
  EndImport 
  
  Declare.s glewGetErrorString(Error.l)
  Declare.s glewGetString(Name.l)
  
EndDeclareModule

Module GLEW
  
  Procedure.s glewGetErrorString(Error.l)
    
    ProcedureReturn PeekS(glewGetErrorString_(Error), -1, #PB_Ascii)
  EndProcedure
  
  Procedure.s glewGetString(Name.l)
    
    ProcedureReturn PeekS(glewGetString_(Name), -1, #PB_Ascii)
  EndProcedure
  
EndModule

DeclareModule GL20
  
  ImportC GLEW::#LIB_GLEW_FILE_NAME
    
    glClear(Mask.l)
    
  EndImport
  
EndDeclareModule 

Module GL20
  
EndModule

CompilerIf #PB_Compiler_IsMainFile
  
  If GLFW::glfwInit() <> 1
    End -1
  EndIf
  
    GLFW::glfwWindowHint(GLFW::#GLFW_CONTEXT_VERSION_MAJOR, 4)
    GLFW::glfwWindowHint(GLFW::#GLFW_CONTEXT_VERSION_MINOR, 0)
    GLFW::glfwWindowHint(GLFW::#GLFW_OPENGL_PROFILE, GLFW::#GLFW_OPENGL_ANY_PROFILE)
  
    GLFW::glfwWindowHint(GLFW::#GLFW_CLIENT_API, GLFW::#GLFW_OPENGL_API)
    
  *Window = GLFW::glfwCreateWindow(1600, 900, "Hello World", #Null, #Null)
  
  If *Window = #Null
    GLFW::glfwTerminate()
    End -1
  EndIf
  
  GLFW::glfwMakeContextCurrent(*Window)
  
  Error.l = GLEW::glewInit()
  
  If Error <> GLEW::#GLEW_NOERROR
    Debug "GLEW::glewInit() Failed !"
  Else
    Debug "GLEW::glewInit() OK !"
  EndIf
  
  Debug GLEW::glewGetErrorString(Error)
  Debug GLEW::glewGetString(GLEW::#GLEW_VERSION)
  
  If GLEW::glewIsSupported("glClear")
    Debug "glClear() is supported ! Cool !" 
  Else
    Debug "glClear() is not supported !" 
  EndIf
  
  If GLEW::glewIsSupported("glBegin")
    Debug "glBegin() is supported ! Cool !" 
  Else
    Debug "glBegin() is not supported !" 
  EndIf
  
  While Not GLFW::glfwWindowShouldClose(*Window)
;     
;     GL20::glClear(#GL_COLOR_BUFFER_BIT)
;     
;     glBegin(#GL_TRIANGLES)
;     glVertex2f(-0.5, -0.5)
;     glVertex2f(0.0, 0.5)
;     glVertex2f(0.5, -0.5)
;     
;     glEnd()
    
    GLFW::glfwSwapBuffers(*Window)
    GLFW::glfwPollEvents()
    
  Wend
  
  GLFW::glfwTerminate()
  End 0
  
CompilerEndIf

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
When I run the code above this is what I get in the Debugger output :
GLEW::glewInit() OK !
No error
2.1.0
glClear() is not supported !
glBegin() is not supported !
So GLFW create a Window with an OpenGL Context.
The GLEW Init function is OK
No error
The version : 2.1.0

But it's impossible to have any OpenGL function. None of them are supported.

I'm testing this code on Debian 11

Thanks in advance for anyone who can help.

Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
User avatar
Mijikai
Addict
Addict
Posts: 1520
Joined: Sun Sep 11, 2016 2:17 pm

Re: GLFW + GLEW not working

Post by Mijikai »

Iirc. glfwGetProcAddress() (or Windows wglGetProcAddress_()) can be used to load new/missing GL functions mby. thats an option.
glClear_() and glBegin_() are legacy functions they are always available.
User avatar
StarBootics
Addict
Addict
Posts: 1006
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

Re: GLFW + GLEW not working

Post by StarBootics »

I'm aware that GLFW has a function called glfwGetProcAddress() but using that function mean that OpenGL function became dependent of GLFW library.

The main reason why I want to use GLEW is to have an independent solution from any other library. That way you can program an OpenGL 3D rendering engine and having it working with a standard PB OpenGLGadget() as well as a fullscreen window created with GLFW for example.

So No it's not an option.

[EDIT]

I was capable to solve the problem by adding some linker options like that :

Code: Select all

CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      #LIB_GLEW_FILE_NAME = ""
      
    CompilerCase #PB_OS_Linux
      #LIB_GLEW_FILE_NAME = "-lGLEW -lGLU -lGL"
      
    CompilerCase #PB_OS_MacOS
      #LIB_GLEW_FILE_NAME = ""

CompilerEndSelect
Now I don't know at this point if this kind of hack will work on Windows for example. In theory, GLEW is supposed to provide all GL functions directly.
When you include the <GL/glew.h> header file you don't need to include <GL/gl.h> .

Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Post Reply