Suche freeglut 3.0.0 als statische *.LIB

Für allgemeine Fragen zur Programmierung mit PureBasic.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Suche freeglut 3.0.0 als statische *.LIB

Beitrag von ccode_new »

Hallo Leute,

so linkt man es unter Linux statisch:

Code: Alles auswählen

;Linux-Wahnwitziger Lib-Test

;So linkt man statisch unter Linux !!! (getestet unter Linux Mint 18.3 Cinnamon)

InitSprite() ;Ist wichtig beim statischen Linken !!!!

#GLUT_KEY_NUM_LOCK = $006D
#GLUT_KEY_BEGIN = $006E
#GLUT_KEY_DELETE = $006F
#GLUT_KEY_SHIFT_L = $0070
#GLUT_KEY_SHIFT_R = $0071
#GLUT_KEY_CTRL_L = $0072
#GLUT_KEY_CTRL_R = $0073
#GLUT_KEY_ALT_L = $0074
#GLUT_KEY_ALT_R = $0075
#GLUT_ACTION_EXIT = 0
#GLUT_ACTION_GLUTMAINLOOP_RETURNS = 1
#GLUT_ACTION_CONTINUE_EXECUTION = 2
#GLUT_CREATE_NEW_CONTEXT = 0
#GLUT_USE_CURRENT_CONTEXT = 1
#GLUT_FORCE_INDIRECT_CONTEXT = 0
#GLUT_ALLOW_DIRECT_CONTEXT = 1
#GLUT_TRY_DIRECT_CONTEXT = 2
#GLUT_FORCE_DIRECT_CONTEXT = 3
#GLUT_INIT_STATE = $007C
#GLUT_ACTION_ON_WINDOW_CLOSE = $01F9
#GLUT_WINDOW_BORDER_WIDTH = $01FA
#GLUT_WINDOW_BORDER_HEIGHT = $01FB
#GLUT_WINDOW_HEADER_HEIGHT = $01FB
#GLUT_VERSION = $01FC
#GLUT_RENDERING_CONTEXT = $01FD
#GLUT_DIRECT_RENDERING = $01FE
#GLUT_FULL_SCREEN = $01FF
#GLUT_SKIP_STALE_MOTION_EVENTS = $0204
#GLUT_AUX = $1000
#GLUT_AUX1 = $1000
#GLUT_AUX2 = $2000
#GLUT_AUX3 = $4000
#GLUT_AUX4 = $8000
#GLUT_INIT_MAJOR_VERSION = $0200
#GLUT_INIT_MINOR_VERSION = $0201
#GLUT_INIT_FLAGS = $0202
#GLUT_INIT_PROFILE = $0203
#GLUT_DEBUG = $0001
#GLUT_FORWARD_COMPATIBLE = $0002
#GLUT_CORE_PROFILE = $0001
#GLUT_COMPATIBILITY_PROFILE = $0002
#GLUT_HAS_MULTI = 1
#GLUT_CAPTIONLESS = $0400
#GLUT_BORDERLESS = $0800
#GLUT_SRGB = $1000
#FREEGLUT_LIB_PRAGMAS = 1
#WIN32_LEAN_AND_MEAN = 1
#FREEGLUT = 1
#GLUT_API_VERSION = 4
#GLUT_XLIB_IMPLEMENTATION = 13
#FREEGLUT_VERSION_2_0 = 1
#GLUT_KEY_F1 = $0001
#GLUT_KEY_F2 = $0002
#GLUT_KEY_F3 = $0003
#GLUT_KEY_F4 = $0004
#GLUT_KEY_F5 = $0005
#GLUT_KEY_F6 = $0006
#GLUT_KEY_F7 = $0007
#GLUT_KEY_F8 = $0008
#GLUT_KEY_F9 = $0009
#GLUT_KEY_F10 = $000A
#GLUT_KEY_F11 = $000B
#GLUT_KEY_F12 = $000C
#GLUT_KEY_LEFT = $0064
#GLUT_KEY_UP = $0065
#GLUT_KEY_RIGHT = $0066
#GLUT_KEY_DOWN = $0067
#GLUT_KEY_PAGE_UP = $0068
#GLUT_KEY_PAGE_DOWN = $0069
#GLUT_KEY_HOME = $006A
#GLUT_KEY_END = $006B
#GLUT_KEY_INSERT = $006C
#GLUT_LEFT_BUTTON = $0000
#GLUT_MIDDLE_BUTTON = $0001
#GLUT_RIGHT_BUTTON = $0002
#GLUT_DOWN = $0000
#GLUT_UP = $0001
#GLUT_LEFT = $0000
#GLUT_ENTERED = $0001
#GLUT_RGB = $0000
#GLUT_RGBA = $0000
#GLUT_INDEX = $0001
#GLUT_SINGLE = $0000
#GLUT_DOUBLE = $0002
#GLUT_ACCUM = $0004
#GLUT_ALPHA = $0008
#GLUT_DEPTH = $0010
#GLUT_STENCIL = $0020
#GLUT_MULTISAMPLE = $0080
#GLUT_STEREO = $0100
#GLUT_LUMINANCE = $0200
#GLUT_MENU_NOT_IN_USE = $0000
#GLUT_MENU_IN_USE = $0001
#GLUT_NOT_VISIBLE = $0000
#GLUT_VISIBLE = $0001
#GLUT_HIDDEN = $0000
#GLUT_FULLY_RETAINED = $0001
#GLUT_PARTIALLY_RETAINED = $0002
#GLUT_FULLY_COVERED = $0003
#GLUT_WINDOW_X = $0064
#GLUT_WINDOW_Y = $0065
#GLUT_WINDOW_WIDTH = $0066
#GLUT_WINDOW_HEIGHT = $0067
#GLUT_WINDOW_BUFFER_SIZE = $0068
#GLUT_WINDOW_STENCIL_SIZE = $0069
#GLUT_WINDOW_DEPTH_SIZE = $006A
#GLUT_WINDOW_RED_SIZE = $006B
#GLUT_WINDOW_GREEN_SIZE = $006C
#GLUT_WINDOW_BLUE_SIZE = $006D
#GLUT_WINDOW_ALPHA_SIZE = $006E
#GLUT_WINDOW_ACCUM_RED_SIZE = $006F
#GLUT_WINDOW_ACCUM_GREEN_SIZE = $0070
#GLUT_WINDOW_ACCUM_BLUE_SIZE = $0071
#GLUT_WINDOW_ACCUM_ALPHA_SIZE = $0072
#GLUT_WINDOW_DOUBLEBUFFER = $0073
#GLUT_WINDOW_RGBA = $0074
#GLUT_WINDOW_PARENT = $0075
#GLUT_WINDOW_NUM_CHILDREN = $0076
#GLUT_WINDOW_COLORMAP_SIZE = $0077
#GLUT_WINDOW_NUM_SAMPLES = $0078
#GLUT_WINDOW_STEREO = $0079
#GLUT_WINDOW_CURSOR = $007A
#GLUT_SCREEN_WIDTH = $00C8
#GLUT_SCREEN_HEIGHT = $00C9
#GLUT_SCREEN_WIDTH_MM = $00CA
#GLUT_SCREEN_HEIGHT_MM = $00CB
#GLUT_MENU_NUM_ITEMS = $012C
#GLUT_DISPLAY_MODE_POSSIBLE = $0190
#GLUT_INIT_WINDOW_X = $01F4
#GLUT_INIT_WINDOW_Y = $01F5
#GLUT_INIT_WINDOW_WIDTH = $01F6
#GLUT_INIT_WINDOW_HEIGHT = $01F7
#GLUT_INIT_DISPLAY_MODE = $01F8
#GLUT_ELAPSED_TIME = $02BC
#GLUT_WINDOW_FORMAT_ID = $007B
#GLUT_HAS_KEYBOARD = $0258
#GLUT_HAS_MOUSE = $0259
#GLUT_HAS_SPACEBALL = $025A
#GLUT_HAS_DIAL_AND_BUTTON_BOX = $025B
#GLUT_HAS_TABLET = $025C
#GLUT_NUM_MOUSE_BUTTONS = $025D
#GLUT_NUM_SPACEBALL_BUTTONS = $025E
#GLUT_NUM_BUTTON_BOX_BUTTONS = $025F
#GLUT_NUM_DIALS = $0260
#GLUT_NUM_TABLET_BUTTONS = $0261
#GLUT_DEVICE_IGNORE_KEY_REPEAT = $0262
#GLUT_DEVICE_KEY_REPEAT = $0263
#GLUT_HAS_JOYSTICK = $0264
#GLUT_OWNS_JOYSTICK = $0265
#GLUT_JOYSTICK_BUTTONS = $0266
#GLUT_JOYSTICK_AXES = $0267
#GLUT_JOYSTICK_POLL_RATE = $0268
#GLUT_OVERLAY_POSSIBLE = $0320
#GLUT_LAYER_IN_USE = $0321
#GLUT_HAS_OVERLAY = $0322
#GLUT_TRANSPARENT_INDEX = $0323
#GLUT_NORMAL_DAMAGED = $0324
#GLUT_OVERLAY_DAMAGED = $0325
#GLUT_VIDEO_RESIZE_POSSIBLE = $0384
#GLUT_VIDEO_RESIZE_IN_USE = $0385
#GLUT_VIDEO_RESIZE_X_DELTA = $0386
#GLUT_VIDEO_RESIZE_Y_DELTA = $0387
#GLUT_VIDEO_RESIZE_WIDTH_DELTA = $0388
#GLUT_VIDEO_RESIZE_HEIGHT_DELTA = $0389
#GLUT_VIDEO_RESIZE_X = $038A
#GLUT_VIDEO_RESIZE_Y = $038B
#GLUT_VIDEO_RESIZE_WIDTH = $038C
#GLUT_VIDEO_RESIZE_HEIGHT = $038D
#GLUT_NORMAL = $0000
#GLUT_OVERLAY = $0001
#GLUT_ACTIVE_SHIFT = $0001
#GLUT_ACTIVE_CTRL = $0002
#GLUT_ACTIVE_ALT = $0004
#GLUT_CURSOR_RIGHT_ARROW = $0000
#GLUT_CURSOR_LEFT_ARROW = $0001
#GLUT_CURSOR_INFO = $0002
#GLUT_CURSOR_DESTROY = $0003
#GLUT_CURSOR_HELP = $0004
#GLUT_CURSOR_CYCLE = $0005
#GLUT_CURSOR_SPRAY = $0006
#GLUT_CURSOR_WAIT = $0007
#GLUT_CURSOR_TEXT = $0008
#GLUT_CURSOR_CROSSHAIR = $0009
#GLUT_CURSOR_UP_DOWN = $000A
#GLUT_CURSOR_LEFT_RIGHT = $000B
#GLUT_CURSOR_TOP_SIDE = $000C
#GLUT_CURSOR_BOTTOM_SIDE = $000D
#GLUT_CURSOR_LEFT_SIDE = $000E
#GLUT_CURSOR_RIGHT_SIDE = $000F
#GLUT_CURSOR_TOP_LEFT_CORNER = $0010
#GLUT_CURSOR_TOP_RIGHT_CORNER = $0011
#GLUT_CURSOR_BOTTOM_RIGHT_CORNER = $0012
#GLUT_CURSOR_BOTTOM_LEFT_CORNER = $0013
#GLUT_CURSOR_INHERIT = $0064
#GLUT_CURSOR_NONE = $0065
#GLUT_CURSOR_FULL_CROSSHAIR = $0066
#GLUT_RED = $0000
#GLUT_GREEN = $0001
#GLUT_BLUE = $0002
#GLUT_KEY_REPEAT_OFF = $0000
#GLUT_KEY_REPEAT_ON = $0001
#GLUT_KEY_REPEAT_DEFAULT = $0002
#GLUT_JOYSTICK_BUTTON_A = $0001
#GLUT_JOYSTICK_BUTTON_B = $0002
#GLUT_JOYSTICK_BUTTON_C = $0004
#GLUT_JOYSTICK_BUTTON_D = $0008
#GLUT_GAME_MODE_ACTIVE = $0000
#GLUT_GAME_MODE_POSSIBLE = $0001
#GLUT_GAME_MODE_WIDTH = $0002
#GLUT_GAME_MODE_HEIGHT = $0003
#GLUT_GAME_MODE_PIXEL_DEPTH = $0004
#GLUT_GAME_MODE_REFRESH_RATE = $0005
#GLUT_GAME_MODE_DISPLAY_CHANGED = $0006

;freeglut hat eine Menge Abhängigkeiten (Daher ist der Sinn eines statischen Link fragwürdig.)

Structure XWindowAttributes
  x.i
  y.i
  width.i
  height.i
  depth.i
  *visual
  *root
  class.i
  bit_gravity.i
  win_gravity.i
  backing_store.i
  backing_planes.i
  backing_pixel.i
  save_under.b
  *colormap
  map_installed.b
  map_state.i
  all_event_masks.i
  your_event_mask.i
  do_not_propagate_mask.i
  override_redirect.b
  *screen
EndStructure

ImportC "-lstdc++" : EndImport

ImportC "-lXi"
  XISelectEvents(*display, *win, *masks, num_masks)
EndImport

ImportC "-lX11"
  XGetWindowAttributes(*display, w, window_attributes_return)
  XOpenDisplay(*display)
  XRootWindow(*display, screen_number)
EndImport

ImportC "-lXxf86vm"
  XF86VidModeGetViewPort(*display, *screen, *x_return, *y_return)  
EndImport

ImportC "-lXrandr"
  XRRConfigSizes(*config, *nsizes)
  XRRGetScreenInfo(*display, win)
EndImport

ImportC "-lGL" : EndImport

ImportC "-lGLU" : EndImport

ImportC "/usr/lib/x86_64-linux-gnu/libGLEW.so.1.13.0" : EndImport

ImportC "-lm"
  _cos() As "cos"
EndImport

; ImportC "-lglut" : EndImport ;Dynamisch Linken!!!

ImportC "libglut.a" ;Statisch linken!!!
  glutCreateWindow(Title.p-ascii)
  glutDisplayFunc(*Proc)                   
  glutIdleFunc(*func)
  glutGetWindow()                           
  glutInit(argc.i,argv.b)                 
  glutInitDisplayMode(Flags.i)             
  glutInitWindowSize(Width.i,Height.i)     
  glutInitWindowPosition(StartX,StartY.i) 
  glutMainLoop()                           
  glutMainLoopEvent()                       
  glutSetOption(Action.i,Option.i)         
  glutSwapBuffers()                         
  glutSetWindowTitle(title.p-ascii) 
  glutReshapeFunc(*Proc)
  glutKeyboardFunc(*Proc)
  glutTimerFunc(refreshMills.f, *Proc, q.i)
  glutPostRedisplay()
EndImport

Procedure.i glBox(X.f,Y.f,W.f,H.f)
  glBegin_(#GL_LINE_LOOP)
  glColor4ub_(255,0,100,250)
  glVertex2f_(X - 2,Y)
  glVertex2f_(X + W,Y)
  glVertex2f_(X + W,Y + H)
  glVertex2f_(X - 1,Y + H)
  glEnd_()   
EndProcedure

Procedure.i Render()
  glClear_(#GL_COLOR_BUFFER_BIT)
  glBox(10,10,100,100)
  glutSwapBuffers()
EndProcedure

Procedure.i Reshape(Width.i,Height.i)
  glViewport_(#Null,#Null,Width,Height)
  glMatrixMode_(#GL_PROJECTION)
  glLoadIdentity_()
  glOrtho_(#Null,Width,Height,#Null,#Null,1)
  glMatrixMode_(#GL_MODELVIEW)
EndProcedure

;-Test

;_cos()

;glGetString_(#GL_EXTENSIONS)

Global Dummy.i

Global *display = XOpenDisplay(#Null)

Global *attr, *focus, xwin, sc

Global xreturn, yreturn, *config, nsize

;Global go = 1

;Das alles müsste man auch irgendwie anpassen. (Beim statischen Link / Beim dynamischen Link einfach ausklammern.)
XGetWindowAttributes(*display,*focus,*attr)
XF86VidModeGetViewPort(*display, #Null, @xreturn, @yreturn)
xwin = XRootWindow(*display, 0)
sc = XRRGetScreenInfo(*display, xwin)
XRRConfigSizes(sc, @nsize)
XISelectEvents(*display, xwin, #Null, 0)

; glutInit(@go, 0)
; glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)
; 
; glutCreateWindow("Cross-compile testing")
; glutMainLoop()

glutInit(@Dummy,@Dummy)
glutInitDisplayMode(#GLUT_DOUBLE|#GLUT_RGBA)
glutInitWindowSize(400,300)
glutInitWindowPosition(50,50)
glutCreateWindow("Test!")
glutDisplayFunc(@Render())
glutIdleFunc(@Render())
glutReshapeFunc(@Reshape())
glutSetOption(#GLUT_ACTION_ON_WINDOW_CLOSE,#GLUT_ACTION_GLUTMAINLOOP_RETURNS)
glutMainLoop()
...Jetzt wäre noch die Windows-Variante interessant.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten