Opengl examples

Everything related to 3D programming
mpz
Enthusiast
Enthusiast
Posts: 494
Joined: Sat Oct 11, 2008 9:07 pm
Location: Germany, Berlin > member German forum

Opengl examples

Post by mpz »

Hello to all,

After a longer programming abstinence (missing it, but i got a new work and had not much time) I have started to update the nehe opengl examples (32/64bit with pb 5.73).

Can someone test these example with linux and Mac? Does it work or what is the problem? Thanks

Greeting Michael

Code: Select all

;NeHe's Blending Tutorial (Lesson 8) 
;http://nehe.gamedev.net 
;https://nehe.gamedev.net/tutorial/blending/16001/
;Credits: Nico Gruener, Dreglor, traumatic, hagibaba
;Author: MPz
;Date: 04 Oct 2021
;Note: up-to-date with PB v5.73 (Windows)

UseJPEGImageDecoder() 

Global hDC.i ;Private GDI Device Context

Global light.b;                                  // Lighting ON / OFF
Global blend.b=1;                                // Blending OFF/ON? ( NEW )
Global lp.b;                                     // L Pressed?
Global fp.b;                                     // F Pressed?
Global bp.b;                                     // B Pressed? ( NEW )

Global xrot.f;                                   // X Rotation
Global yrot.f;                                   // Y Rotation
Global xspeed.f;                                 // X Rotation Speed
Global yspeed.f = 0.1;                                 // Y Rotation Speed
Global z.f=-5.0;                                   // Depth Into The Screen

Global filter.i;                                 // Which Filter To Use
Global Dim Texture.l(3) ;Stores Texture Objects 

Global Dim LightAmbient.f(4)  : LightAmbient(0) = 0.5  : LightAmbient(1) = 0.5  : LightAmbient(2) = 0.5  : LightAmbient(3) = 1.0
Global Dim LightDiffuse.f(4)  : LightDiffuse(0) = 1.0  : LightDiffuse(1) = 1.0  : LightDiffuse(2) = 1.0  : LightDiffuse(3) = 1.0
Global Dim LightPosition.f(4) : LightPosition(0) = 0.0 : LightPosition(1) = 0.0 : LightPosition(2) = 2.0 : LightPosition(3) = 1.0

Procedure ReSizeGLScene(width.l,height.l) ;Resize And Initialize The GL Window

 If height=0 : height=1 : EndIf ;Prevent A Divide By Zero Error
 
 ResizeGadget(0, 1, 1, width, height)
 
 glViewport_(0,0,width,height) ;Reset The Current Viewport
 
 glMatrixMode_(#GL_PROJECTION) ;Select The Projection Matrix
 glLoadIdentity_() ;Reset The Projection Matrix
 
 gluPerspective_(45.0,Abs(width/height),0.1,100.0) ;Calculate The Aspect Ratio Of The Window
 
 glMatrixMode_(#GL_MODELVIEW) ;Select The Modelview Matrix
 glLoadIdentity_() ;Reset The Modelview Matrix
 
EndProcedure

Procedure InitGL() ;All Setup For OpenGL Goes Here

 glEnable_(#GL_TEXTURE_2D);                        // Enable Texture Mapping
 glShadeModel_(#GL_SMOOTH);                        // Enable Smooth Shading
 glClearColor_(0.0, 0.0, 0.0, 0.5);                   // Black Background
 glClearDepth_(1.0);                         // Depth Buffer Setup
 glEnable_(#GL_DEPTH_TEST);                        // Enables Depth Testing
 glDepthFunc_(#GL_LEQUAL);                         // The Type Of Depth Testing To Do
 glHint_(#GL_PERSPECTIVE_CORRECTION_HINT, #GL_NICEST);          // Really Nice Perspective 

 glLightfv_(#GL_LIGHT1, #GL_AMBIENT, LightAmbient());             // Setup The Ambient Light
 glLightfv_(#GL_LIGHT1, #GL_DIFFUSE, LightDiffuse());             // Setup The Diffuse Light
 glLightfv_(#GL_LIGHT1, #GL_POSITION,LightPosition());            // Position The Light
 glEnable_(#GL_LIGHT1)                                   ; 

 glColor4f_(1.0,1.0,1.0,0.5);               // Full Brightness, 50% Alpha ( NEW )
 glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE);       // Blending Function For Translucency Based On Source Alpha                                   ; 
 
 glEnable_(#GL_BLEND);     // Turn Blending On
 glDisable_(#GL_DEPTH_TEST)
 
 ProcedureReturn #True ;Initialization Went OK

EndProcedure

Procedure LoadGLTextures(Names.s)
  
  ;Define.i img = LoadImage(0, Names) ; Load texture with name
  Define.i img = CatchImage(0, ?glass2_jpg_start) ; Memory only for the forum
  
  *pointer = EncodeImage(0, #PB_ImagePlugin_BMP );  
  
  glGenTextures_(3, @Texture(0));                  // Create Three Textures

  ;// Create Nearest Filtered Texture
  glBindTexture_(#GL_TEXTURE_2D, Texture(0));
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MAG_FILTER,#GL_NEAREST); // ( NEW )
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MIN_FILTER,#GL_NEAREST); // ( NEW )
  glTexImage2D_(#GL_TEXTURE_2D, 0, 3,  ImageWidth(0) ,  ImageHeight(0), 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *pointer+54);
  ;// Create Linear Filtered Texture
  glBindTexture_(#GL_TEXTURE_2D, Texture(1));
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MAG_FILTER,#GL_LINEAR);
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MIN_FILTER,#GL_LINEAR);
  glTexImage2D_(#GL_TEXTURE_2D, 0, 3,ImageWidth(0),ImageHeight(0), 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *pointer+54);
  ;// Create MipMapped Texture
  glBindTexture_(#GL_TEXTURE_2D, Texture(2));
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MAG_FILTER,#GL_LINEAR);
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_MIN_FILTER,#GL_LINEAR_MIPMAP_NEAREST); // ( NEW )
  gluBuild2DMipmaps_(#GL_TEXTURE_2D, 3,ImageWidth(0), ImageHeight(0), #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *pointer+54); // ( NEW )
  
  FreeMemory(*pointer)
  FreeImage(0)

EndProcedure

Procedure DrawScene(Gadget)
  
  SetGadgetAttribute(Gadget, #PB_OpenGL_SetContext, #True)
  
  glClear_ (#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  
  glLoadIdentity_();                   // Reset The View
  
  glTranslatef_(0.0,0.0,z);                      // Translate Into/Out Of The Screen By z
 
  glRotatef_(xrot,1.0,0.0,0.0);                     // Rotate On The X Axis By xrot
  glRotatef_(yrot,0.0,1.0,0.0);                     // Rotate On The Y Axis By yrot
  
  glColor4f_(1.0,1.0,1.0,0.5);               // Full Brightness, 50% Alpha ( NEW )
  glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE);       // Blending Function For Translucency Based On Source Alpha 
  
  glBindTexture_(#GL_TEXTURE_2D, Texture(filter));              // Select A Texture Based On filter
  
  glBegin_(#GL_QUADS);                      // Draw A Quad
  
    ;// Front Face
    glNormal3f_( 0.0, 0.0, 1.0);                  // Normal Pointing Towards Viewer
    glTexCoord2f_(0.0, 0.0): glVertex3f_(-1.0, -1.0,  1.0);  // Point 1 (Front)
    glTexCoord2f_(1.0, 0.0): glVertex3f_( 1.0, -1.0,  1.0);  // Point 2 (Front)
    glTexCoord2f_(1.0, 1.0): glVertex3f_( 1.0,  1.0,  1.0);  // Point 3 (Front)
    glTexCoord2f_(0.0, 1.0): glVertex3f_(-1.0,  1.0,  1.0);  // Point 4 (Front)
    ;// Back Face
    glNormal3f_( 0.0, 0.0,-1.0);                  // Normal Pointing Away From Viewer
    glTexCoord2f_(1.0, 0.0): glVertex3f_(-1.0, -1.0, -1.0);  // Point 1 (Back)
    glTexCoord2f_(1.0, 1.0): glVertex3f_(-1.0,  1.0, -1.0);  // Point 2 (Back)
    glTexCoord2f_(0.0, 1.0): glVertex3f_( 1.0,  1.0, -1.0);  // Point 3 (Back)
    glTexCoord2f_(0.0, 0.0): glVertex3f_( 1.0, -1.0, -1.0);  // Point 4 (Back)
    ;// Top Face
    glNormal3f_(0.0, 1.0, 0.0);                  // Normal Pointing Up
    glTexCoord2f_(0.0, 1.0): glVertex3f_(-1.0,  1.0, -1.0);  // Point 1 (Top)
    glTexCoord2f_(0.0, 0.0): glVertex3f_(-1.0,  1.0,  1.0);  // Point 2 (Top)
    glTexCoord2f_(1.0, 0.0): glVertex3f_( 1.0,  1.0,  1.0);  // Point 3 (Top)
    glTexCoord2f_(1.0, 1.0): glVertex3f_( 1.0,  1.0, -1.0);  // Point 4 (Top)
    ;// Bottom Face
    glNormal3f_( 0.0,-1.0, 0.0);                  // Normal Pointing Down
    glTexCoord2f_(1.0, 1.0): glVertex3f_(-1.0, -1.0, -1.0);  // Point 1 (Bottom)
    glTexCoord2f_(0.0, 1.0): glVertex3f_( 1.0, -1.0, -1.0);  // Point 2 (Bottom)
    glTexCoord2f_(0.0, 0.0): glVertex3f_( 1.0, -1.0,  1.0);  // Point 3 (Bottom)
    glTexCoord2f_(1.0, 0.0): glVertex3f_(-1.0, -1.0,  1.0);  // Point 4 (Bottom)
    ;// Right face
    glNormal3f_( 1.0, 0.0, 0.0);                  // Normal Pointing Right
    glTexCoord2f_(1.0, 0.0): glVertex3f_( 1.0, -1.0, -1.0);  // Point 1 (Right)
    glTexCoord2f_(1.0, 1.0): glVertex3f_( 1.0,  1.0, -1.0);  // Point 2 (Right)
    glTexCoord2f_(0.0, 1.0): glVertex3f_( 1.0,  1.0,  1.0);  // Point 3 (Right)
    glTexCoord2f_(0.0, 0.0): glVertex3f_( 1.0, -1.0,  1.0);  // Point 4 (Right)
    ;// Left Face
    glNormal3f_(-1.0, 0.0, 0.0);                  // Normal Pointing Left
    glTexCoord2f_(0.0, 0.0): glVertex3f_(-1.0, -1.0, -1.0);  // Point 1 (Left)
    glTexCoord2f_(1.0, 0.0): glVertex3f_(-1.0, -1.0,  1.0);  // Point 2 (Left)
    glTexCoord2f_(1.0, 1.0): glVertex3f_(-1.0,  1.0,  1.0);  // Point 3 (Left)
    glTexCoord2f_(0.0, 1.0): glVertex3f_(-1.0,  1.0, -1.0);  // Point 4 (Left)
        
  glEnd_();

  xrot+xspeed;                               // Add xspeed To xrot
  yrot+yspeed;                               // Add yspeed To yrot
  
  SetGadgetAttribute(Gadget, #PB_OpenGL_FlipBuffers, #True)
    
EndProcedure

Procedure HandleError (Result, Text$)
  If Result = 0
    MessageRequester("Error", Text$, 0)
    End
  EndIf
EndProcedure

Procedure CreateGLWindow(title.s,WindowWidth.l,WindowHeight.l,bits.l,fullscreenflag.b)
  
  FlatMode = 0         ; Enable Or disable the 'Flat' rendering
  
  If fullscreenflag
    hWnd = OpenWindow(0, 1, 1, WindowWidth, WindowHeight, title, #PB_Window_BorderLess|#PB_Window_Maximize )
  Else  
    hWnd = OpenWindow(0, 1, 1, WindowWidth, WindowHeight, title,#PB_Window_MinimizeGadget |  #PB_Window_MaximizeGadget | #PB_Window_SizeGadget ) 
  EndIf  
  OpenGLGadget(0, 1, 1, WindowWidth, WindowHeight,#PB_OpenGL_Keyboard )
  SetActiveGadget(0) 

  glMatrixMode_(#GL_PROJECTION);                        // Select The Projection Matrix
  glLoadIdentity_();                           // Reset The Projection Matrix

  gluPerspective_(45.0, WindowWidth/WindowHeight, 0.1, 100.0) 

  glMatrixMode_(#GL_MODELVIEW);                     // Select The Modelview Matrix
  glLoadIdentity_();                           // Reset The Modelview Matrix

  ; position viewer
  glMatrixMode_(#GL_MODELVIEW)

  If (FlatMode)
    glShadeModel_(#GL_FLAT) 
  Else
    glShadeModel_(#GL_SMOOTH) 
  EndIf

EndProcedure

CreateGLWindow("OpenGL Lesson 8",640,480,16,0)

InitGL() 

LoadGLTextures("Data/glass.bmp")

Repeat

  Repeat 
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        Quit = 1
      Case #PB_Event_SizeWindow  
        ReSizeGLScene(WindowWidth(0),WindowHeight(0)) ;LoWord=Width, HiWord=Height
      Case #PB_Event_Gadget
        If EventGadget() = 0  
           key = GetGadgetAttribute(0,#PB_OpenGL_Key )
           If key = #PB_Shortcut_Escape ;  Esc key to exit
               End
           ElseIf Key = #PB_Shortcut_PageUp 
               z-0.02;               // If So, Move Into The Screen
           ElseIf Key = #PB_Shortcut_PageDown 
             z+0.02;
           ElseIf Key = #PB_Shortcut_Up
             xspeed-0.01   ;              // If So, Decrease xspeed
           ElseIf Key = #PB_Shortcut_Down
             xspeed+0.01;              // If So, Increase xspeed
           ElseIf Key = #PB_Shortcut_Right
             yspeed+0.01;              // If So, Increase yspeed
           ElseIf Key = #PB_Shortcut_Left
             yspeed-0.01;               // If So, Decrease yspeed
           EndIf  
           
           If Key = #PB_Shortcut_L  And Not lp               ;// L Key Being Pressed Not Held?              ;
             lp=#True                                        ;
             light ! 1;         // Toggle Light TRUE/FALSE
             If light;             // If Not Light
                 glEnable_(#GL_LIGHTING);      // Enable Lighting
             Else;                    // Otherwise
                 glDisable_(#GL_LIGHTING);     // Disable Lighting
             EndIf
           EndIf
           
           If Not key = #PB_Shortcut_L;                 // Has L Key Been Released?
              lp=#False;               // If So, lp Becomes FALSE
           EndIf 
           
           If Key = #PB_Shortcut_F  And Not fp;               // Is F Key Being Pressed?
              fp=#True;                // fp Becomes TRUE
              filter+1;              // filter Value Increases By One
              If filter>2;                // Is Value Greater Than 2?
                 filter=0;           // If So, Set filter To 0
              EndIf
           EndIf
            
           If Key = #PB_Shortcut_F;                 // Has F Key Been Released?
             fp=#False;               // If So, fp Becomes FALSE
           EndIf
              
          If Key = #PB_Shortcut_B   And Not bp;               // Is F Key Being Pressed?                 
            bp=#True;                // fp Becomes TRUE
            blend=Bool(Not blend);         // Toggle Blend TRUE/FALSE 
            If blend             ;             // If Not Light
              glEnable_(#GL_BLEND);     // Turn Blending On
              glDisable_(#GL_DEPTH_TEST);   // Turn Depth Testing Off
            Else                      ;                    // Otherwise
              glDisable_(#GL_BLEND);        // Turn Blending Off
              glEnable_(#GL_DEPTH_TEST);    // Turn Depth Testing On
            EndIf
          EndIf 
          
          If Not Key = #PB_Shortcut_B;                 // Has F Key Been Released?
             bp=#False;               // If So, fp Becomes FALSE
          EndIf 
          
             
       EndIf
        
    EndSelect
  
  Until Event = 0
  
  
  DrawScene(0)
  Delay(1)
Until Quit = 1

DataSection
  glass2_jpg_start:
    ; size : 9035 bytes
    Data.q $464A1000E0FFD8FF,$6000010101004649,$4300DBFF00006000,$0201010201010200,$0302020202020202
    Data.q $0406030303030305,$0707070607050304,$08090B0908070706,$0A0D0A0707080A08,$09070C0C0C0C0B0A
    Data.q $0C0C0B0E0C0D0F0E,$0202014300DBFF0C,$0603030603030302,$0C0C0C0C0807080C,$0C0C0C0C0C0C0C0C
    Data.q $0C0C0C0C0C0C0C0C,$0C0C0C0C0C0C0C0C,$0C0C0C0C0C0C0C0C,$0C0C0C0C0C0C0C0C,$C0FF0C0C0C0C0C0C
    Data.q $0380008000081100,$1103011102002201,$0100001F00C4FF01,$0001010101010105,$0100000000000000
    Data.q $0908070605040302,$0010B500C4FF0B0A,$0503040203030102,$017D010000040405,$2112051104000302
    Data.q $2207615113064131,$2308A19181321471,$24F0D15215C1B142,$17160A0982726233,$29282726251A1918
    Data.q $3A3938373635342A,$4A49484746454443,$5A59585756555453,$6A69686766656463,$7A79787776757473
    Data.q $8A89888786858483,$9998979695949392,$A8A7A6A5A4A3A29A,$B7B6B5B4B3B2AAA9,$C6C5C4C3C2BAB9B8
    Data.q $D5D4D3D2CAC9C8C7,$E3E2E1DAD9D8D7D6,$F1EAE9E8E7E6E5E4,$F9F8F7F6F5F4F3F2,$0300011F00C4FFFA
    Data.q $0101010101010101,$0100000000000001,$0908070605040302,$0011B500C4FF0B0A,$0704030404020102
    Data.q $0077020100040405,$3121050411030201,$1371610751411206,$A191421408813222,$15F052332309C1B1
    Data.q $E13424160AD17262,$27261A191817F125,$39383736352A2928,$494847464544433A,$595857565554534A
    Data.q $696867666564635A,$797877767574736A,$888786858483827A,$9796959493928A89,$A6A5A4A3A29A9998
    Data.q $B5B4B3B2AAA9A8A7,$C4C3C2BAB9B8B7B6,$D3D2CAC9C8C7C6C5,$E2DAD9D8D7D6D5D4,$EAE9E8E7E6E5E4E3
    Data.q $F9F8F7F6F5F4F3F2,$0001030C00DAFFFA,$F4003F0011031102,$1A8B0F350C1F868F,$43339C359D76DAFC
    Data.q $43A5CA2ED72CD76E,$DE8ECB39566DE02A,$FEA77816C37FDDB5,$7FF3BF00FF1F1E82,$5A2AF9CF623FAAF1
    Data.q $D0D100FFA482FD87,$EEEAEAF016DED6D7,$60C371C6B39FCDD2,$7EADD3C7F47170B3,$95C245C670C48A73
    Data.q $DAA6D328E5889F78,$31C6286D93DEAF7C,$C96EF72B7A9BBCBA,$4B43BCC5599C7B36,$BD18EBF2934DD688
    Data.q $E423FAB65D5D7B63,$D000FF14CF62F89F,$FE6FFEF700FFC343,$E87F8A6731FC4735,$3700FFFB00FFE121
    Data.q $B4D7A6B3AF1A00FF,$7E993F8A61C80FDF,$9F8CA71EE3201157,$5A14DF346D39BDCF,$28B233B8ADAA46B3
    Data.q $2BEAEBE3799E1459,$A174B060329E7AF1,$95E5C38C353C679C,$D264F7570E71791C,$757F17CB453E9D52
    Data.q $7191EE8DD374BEF3,$63265C78B2EA33CF,$AA2D14BC3722A642,$BB6E45DF7777A5E8,$A77816C300FF171F
    Data.q $F3BF00FF1F1E82FE,$533C8BE13FAAF17F,$DF00FF0F0F4100FF,$657F497DD5F8BFF9,$677C633224779D26
    Data.q $9769FD35D4200707,$B8F1B4B0630F4FF0,$8C12CE18A9D23939,$A6FA24E32419A5AE,$8BB7D2FC4CF5699A
    Data.q $527155A9A4464F9C,$3F8DD67405A7698B,$533C8BE17F98CF34,$DF00FF0F0F4100FF,$9EC5F01FD5F8BFF9
    Data.q $00FF8787A000FF29,$A29EBE6AFCDFFCEF,$2FCBDFE41CE23FBB,$FF111F23FECF08FC,$FFC37C04F03F3400
    Data.q $7808FA9FE2590C00,$C600FFCD00FFFE7F,$FD4FF12C8600FFA8,$FFE67F00FF3F3C04,$C47F14F5F455E300
    Data.q $7F10F85F96BFC939,$00FE87E63FE263C4,$FF533C8BE17F988F,$F9DF00FF0F0F4100,$299EC5F01FD5F8BF
    Data.q $EF00FF8787A000FF,$8FA29EBE6AFCDFFC,$00FFCBF2373987F8,$D0FC477C8CF80F02,$31FC0FF311C000FF
    Data.q $00FFE121E87F8A67,$A31A00FF3700FFFB,$F010F43FC5B318FE,$00FF9B00FFFD00FF,$B7B5F13C9ED0578D
    Data.q $1DF20AD7F73E7C80,$2041C8B25EA238C2,$E0DC614F92E0B067,$3AF1737CD5B2201F,$6DA2F2BE272CEF79
    Data.q $213953680BDC5B84,$31B6BC9E1137CC47,$DE70E9E239BFD293,$135B0F4759868B49,$2829AF74F6E69A89
    Data.q $77653749DA247FF7,$677CE05400FF6665,$C5886FA60606F118,$64AD7DF92061C250,$363B6937D22717A3
    Data.q $B974776577A56D93,$D000FF14CF62F8AF,$FE6FFEF700FFC343,$1A8600FFC42F5C35,$9A513B1D7E7DC287
    Data.q $676B955BB7A669CE,$9C2A777099A55066,$FF84EFF74A6F0FE5,$D74453D6236F1900,$9D19DE822449D28C
    Data.q $320639A270522C31,$CA41AE0779DC7872,$4B2500FFA7EDDFF9,$3AFA7F54B000FF4F,$CD0359660FBFE16A
    Data.q $935146C928657EB2,$EC34C52FA9FAA0F7,$B338E2C2DA4B53FD,$A184FB79E498E22C,$47D7EC5E70C23928
    Data.q $F969D2347AF46819,$D452C97F16FBD934,$BE868EFE2715EC3F,$E1F2147E37D1F0CE,$1C6B23CF74A8B27D
    Data.q $EC8FF1150FE2CF91,$00FF504B2500FF59,$ABFA1A3AFA9F54B0,$80914C2ED1A4D645,$E79F119CA40CC3CA
    Data.q $B98617E23B5FEFEF,$D7501E0C7B781A87,$564629E288F8B0D6,$A237491EA5E09CE5,$8D9EA44BD793334E
    Data.q $8DA71CFD59C5039F,$4249A9B39F125767,$4D75AB3B3BE95E4D,$B3A46DEE95FA952F,$1E0487484A91A39D
    Data.q $04D5A4299BE0ADD5,$36E09C43308695EB,$A156FAF0C77E4F47,$320A37A0A8973EF1,$674C1F718B2580A4
    Data.q $D016B4F150878AFC,$5752C065EF7176F9,$E2ABDDBE0E7B606C,$C3F81200FFC4A3F8,$43AD157ED8C1AB20
    Data.q $2555AD56A5838917,$A29470CEEE658487,$AA07B773C56DBA93,$D9C35DD6FC3A8EF6,$33C63C698E8D5706
    Data.q $6B3BB73146F34DA7,$FF8A9ED5BD4D9A54,$C932733C94BEDD00,$ECAD308EC9A92AAD,$DA5DA9B122F24F72
    Data.q $7992E49859626647,$18E13B7CACBF9226,$3D357AB8E00CB7F0,$33B7560EC6E9D5A7,$6AD94D4E7469DE4B
    Data.q $E6D9E65FBD6DB2D2,$97C739B6C21CF368,$BF6DBDE8B2DB4D9E,$24CFEC2B8AA2609F,$008AA228008AA228
    Data.q $125F92536FDA7FF1,$33B6B7CA5365B6E9,$6F9F83D825E60329,$A283EE7A4D7D8CDD,$5DB5B1B64673F8DB
    Data.q $8E2D005E23C65AB0,$24C749729201E0A4,$B5D9E019ED0F5C93,$93CC87B554DB1A8D,$79C4584084B3DC4F
    Data.q $6F1C8C07295C4FDC,$CDC7D7E1330D8027,$DA3BB9BE1D3FBC39,$457994E6C7AA5ADE,$73DC9D00890103C8
    Data.q $5516F881D491A79E,$00FFCC3D1EB2609A,$95CA694CBCA926B7,$E6713646B818B549,$7B5BB8ABD5922D7A
    Data.q $49FCB1C93A67FA5F,$5595D3AEFE51AEE1,$4D394DA5D6589584,$EEDEAEC867BC524E,$8DAD947DA9D2265A
    Data.q $9BCE9AF6B6684DFB,$5C8E37F69EED1A7D,$38C9F4B4DB6C0300,$C779B5A38A9E646C,$C3BB78ADC9A959ED
    Data.q $B40D7AB72CAA92F7,$7B9C9467416110CE,$8E9FFB3589775D73,$EDEDD56DED2C111F,$7C1CE38E1198BC99
    Data.q $812468BB7146C8B3,$65FB3B4FC6C940D9,$288A4D2FF169C7DB,$5D444422D2A338D2,$57C00E00304B80AA
    Data.q $77662CF3147161C7,$18A5542A61DAE59D,$5D97F45E714E59BB,$A49F79F1FEBA96DB,$0FF7F0C229570DC3
    Data.q $2B39AF5269E3BA66,$B2E98BE4DA9CC2DD,$BFC3D2B7FBB5D151,$82FD875A2AF9CF62,$D5D3D7D0D100FFA4
    Data.q $4B2500FF59EC0FF3,$3AFA9F54B000FF50,$FEE7F073BF7AFA1A,$637C9C3F52FCCB44,$E487E05F8E9200FF
    Data.q $873F758D17B53F70,$E71ACDB58AF7B35F,$9BB666649BA67AEC,$B87606DCB63C49CB,$6B217CB006F77A2A
    Data.q $97F011EDF7E00BF1,$22F19BB6F1253EC2,$3448FC25832EE3CF,$79B04A0FCFCBF488,$96C2C978B084F8C8
    Data.q $D5504685CB2A4370,$8BF8532F7851FBBD,$7EADD143AB783FFB,$7C681B46566AAAD9,$9073E3C06DCC8FC4
    Data.q $EC3FB3DF2972A7A3,$75D352BBD9BFE0EB,$7EC47A76F6C2138D,$C9EC3CCFB452B744,$835851CEC8B2E882
    Data.q $CD53E020C1539890,$A660DAE37CB559B0,$649494F5A6104EE3,$FB6DE04745F3AAF9,$699F7BB9E2B4CD9C
    Data.q $D60257F9C145BCC0,$B55A135FA7877786,$BA28EA8CCA3E4678,$8CDA7EB2BA399514,$E494D47451CA5121
    Data.q $AFDA6FFB4C6D17A5,$EB88DF34005FD7C3,$E26D9D540F0DAD67,$5ADB8D95DA17C380,$F0A498C76CE6CBFC
    Data.q $1FE27B15AFE7E5E7,$A8E5F83A7CA413ED,$E2AD26F14C9B3C7C,$E6F4D2641268324D,$2CB83686244588BB
    Data.q $299CBDD92686E5A7,$51373CCE0D6DE2FD,$3F9FFD4937F10FF8,$D3BB4967F8D854E1,$75BEB6C52DAE2D7C
    Data.q $089C79FBB25D07A5,$347B5F8A1C038A6D,$7D822F5495A280CE,$F7B69F94FAC1EBE2,$AF3B7CBE2D188FC4
    Data.q $EF2FE67761C7DBDA,$C0F5CE6C989565D9,$B659B0AC7594F761,$520A4AF2089D8973,$9432F6B2DA749B82
    Data.q $76ED294AB497B5F7,$3F701007FDAB7BAD,$229E265E3C555987,$C51046A76245219E,$9F0CCB303546B941
    Data.q $5B38599D7052932B,$DF6C171735C9A89D,$111FE09506B51F88,$2CD738BEC343F6EA,$91B65AC4832833FC
    Data.q $AC4E6EF8A6754BA1,$05335C64040C7397,$FC6254E07D1C540C,$FEA7FD02DEC6F86A,$FF34D7245EAC2D1F
    Data.q $47C7F6963CFC1100,$6DB85A93BE656DD0,$46E2232896226942,$F76B79E09048C836,$5A2DFB477CE08AB1
    Data.q $7CAC7D753C179F69,$DBB58C2F2DFED10B,$D6B5F164D64C679D,$EE6DCC0E9786FD89,$E876C708CE978D20
    Data.q $2FF65448CE332CC0,$E7B45F83EFE24B19,$837EF03DFC1B3FC3,$C3530E7FC0331DE2,$7986B264D5507A37
    Data.q $94EFB3A405435796,$4A8D41701E911460,$B8CCD5E1150809B3,$C64539452C21BC86,$5D6AF7DA26EC7EA2
    Data.q $32D76CF914CD6535,$094F19F7D195DABF,$E1E2677FB8965FF8,$886B2F61D5B05556,$75B506A77233C2C3
    Data.q $85B457BCE7132A25,$1DDE44AE7B7A9326,$ACE0DBF8A600FFF8,$12CFE28FF6F0363E,$563AE953F6F72541
    Data.q $8D1DF605ABD6358F,$7219C72281A0C2AB,$9A8265F3CB0A6C77,$85DFDBE13BED37BA,$78AF6DA14EF12E9E
    Data.q $9DB4D7B765127874,$9124D354DF924D5B,$DD697E7048D22D95,$AAD896EB7E0CA0B6,$02F121F85BC73CCC
    Data.q $D423EC09FEA6D96F,$781C6F437C196F35,$A84358D31A76C2A7,$81916B4C1FB9CB59,$04C1B5C90EC9F791
    Data.q $27F87EF64B1B6ABC,$1B9BC7A7E1C3F07B,$278E373A16FE848F,$D3EB5E05AF34EED0,$16F79E176D7341DD
    Data.q $98177347E603DFD1,$259480F96A9366A1,$AD3989FB1CD53540,$27A549EC8B7B0D3A,$B6C96AAB4FF4B618
    Data.q $8697CE9B8B8ED3AC,$316658B556FD123E,$9BA289A5A8788D93,$8D734E70C2A9EDA7,$512327A7C64DC9FD
    Data.q $AFF1B02B4E5275E7,$781C5F677FAEB9C6,$3CD53FFC1CBFB489,$B082C63A2C6B0C37,$6B7186964B735AEA
    Data.q $0185732C92CC1139,$C4A73600234928C7,$1BBE44F04C1BDA0F,$C49B78162FB46DD3,$A08BB6ED0D97F69A
    Data.q $EDB1C2DDA87F6F69,$92C88C8553CAEF96,$4808B9CA1D60F313,$FE10AFE341F8B4F2,$4B7D3479F4141FCE
    Data.q $F8077F0BD6D6B547,$449F5B83C400FF4A,$41EDE3C5F8BC1185,$BE763B99C8C8C80B,$3FFC885FBDB49C76
    Data.q $E33B7C163F862FE3,$FE461A3F4AF80E6F,$CCF63FFA6A084F0D,$B7D6BE6E5BC4755A,$23AA036ABC2A4F11
    Data.q $744ADE19094E5228,$1E279C555BCE32C7,$BD2F97927CE6D268,$4A4DE9CD5EA8995B,$E5ADAC24271935C9
    Data.q $5DA656E30FEFE056,$9C4A6B15C6194D0C,$E561C3DA79842256,$4AEA20DCB4C4134E,$8470704A2AA9BBAA
    Data.q $41AA91EEFAC92BE5,$D6CE6AA17E9AE8AE,$E2896F9117A495FA,$0CB0B20259635975,$EBF52038826003AC
    Data.q $587F783EFBB77E5C,$B4E4772C6FD169BF,$06E42449C62AD276,$010C00C0C0B88E53,$7DB1445F6F8A7E5D
    Data.q $4B8EB724D4232D49,$405682226964ADA8,$AEC4D8962AB31ACF,$35ABC138924A00EC,$08CDB9E50EAF59F5
    Data.q $D15CB5AD4668CD53,$27D56FACDB6B37D5,$349BF8E03A7FEEE4,$2A11872C11CBDCE1,$1427732AF751CA09
    Data.q $255DA24649722ADF,$3C844FE64ABA67CB,$E0D3A0C11AF8A611,$49BA636419CCFCF2,$0260E0CC1FCB1888
    Data.q $FF69FBEF7CCD004E,$15EC00FFD352C900,$98AF9EBE9A8EFE1F,$FD7F5A2AF93F6D7F,$CC57D3D100FFA382
    Data.q $00FFE1820D07C671,$518A324EA120E1AA,$BAFE7DC95E2D498A,$F1C78B656EE1639F,$E3A45225D531D767
    Data.q $AD96EC26B7492937,$CF623FD0B28BB6EB,$FFA482FD875A2AF9,$0FF3D5D3D7D0D100,$FF504B2500FF59EC
    Data.q $FA1A3AFA9F54B000,$329100FF39BCBA7A,$00FF182F8E1400FF,$1405F921F897A3E4,$E09B4D7C4BFB1357
    Data.q $A75A150FE3F5ECC7,$50215A23D9A27D99,$7F36A35BF12CCD54,$F1363BE7C8C14C85,$58B0D431CCAF8F9C
    Data.q $DF765730FCEBE269,$43EE70C247F6E6E5,$49814F3E4CF3CE8B,$3497DD8DD338AFD5,$3BF6D5BBA2EF4A9A
    Data.q $BC059F89BFE72B6A,$B48EF785E16BF05F,$87D7F1BE3AFE89EF,$0471A10E7FAD46EC,$1273492391C40DFA
    Data.q $984F6D7C2CF61858,$AF79A7C21BED84F0,$0378180FB5D679FC,$F8142F7580AFF042,$9F8EF1208257E283
    Data.q $CA9B156F47DED8A7,$28A4B69D65696B49,$8B9D2466BF00FFAA,$42A129BEE1912FB3,$D2BA9FD24198A1AB
    Data.q $AF27726BCDA5EEF8,$A3FEAB79BAD524B9,$DFFA8719C33CC153,$2975C669E369E20C,$94314A2554ECA7CD
    Data.q $652ECBE122DC759B,$A2488F95EE64ED34,$EC8F3D1AD87E84BC,$D2BE4B535DE371FB,$E85E0B6F5A3F0DB5
    Data.q $DCC8FAB614C333B7,$8082882ABBE6CD7E,$A804F95054843BED,$00FF47EDA7E09356,$56DAD7E91A6F4A0B
    Data.q $DFE5F00DFEEBA693,$BB962DF14CDB1E8A,$BB5BBE4504697767,$E564C42643D66856,$FDD3801B86AD4894
    Data.q $DB3C7C59652FCA6E,$2ABFD6DEE6E5D64A,$032F9D876EC52FBF,$6A8025E26A34E638,$AFF99D7E2FC9A734
    Data.q $8D7282F39E2BDE18,$4D56EE4E9A4A41EA,$DA5FC3CF7845B59E,$7D03E0BFCEF151C7,$69C4DFF0436B1DE0
    Data.q $67EB7B56AD74D323,$B86F03924FA4D477,$3C853CA97CF2C23A,$CB78CC813AD5F9C5,$15AFC4AFD5E2935A
    Data.q $F00FFC8A17E293F8,$82EDF0A688EFE1E3,$926179EA96FD7478,$59491291B9BAA508,$305F082A2484A75D
    Data.q $308C5F6132C6AE9C,$F7F76EDBF90ECB2A,$95B573725B545414,$D72E6D657E6F1BA5,$8B6A158917F081AB
    Data.q $621B6B09C2C38A37,$865369948E2AA71C,$0D1727EAAA72D41D,$D1467FA2ADF96C1C,$E2931EF155FC325F
    Data.q $890FBAB7C2F7D8DF,$D6F2F8F168196F35,$A2EB6DD7D459D3CE,$32E3989467DF6E4B,$98B080CC79CB6534
    Data.q $ACB2F4AAE92B3B2F,$79948D31526763E1,$BABAA5A2F995BA75,$FCF2B9F7B4D1F6D2,$C4D0C21C4EF5E16F
    Data.q $71532BB52AE5AA55,$5C3DFBD8C749A774,$28634D7B39CD286A,$288AC234C9DBC645,$DB1FE62BE4FC64AF
    Data.q $6000FF9F964AFE4F,$F5F4D574F400FFA8,$52C900FF69FBC37C,$8EFE1F15EC00FFD3,$4B13F96FC417BE9A
    Data.q $FF1C3CD5CFFC51FC,$83E49FE03F8E9200,$7FA8A59200FF2CF6,$3D7D0D1DFD4F2AD8,$B554F29FC5FE305F
    Data.q $A1A300FF4905FB0F,$2200FF7378A9A7AF,$51F27F8C0729FE65,$297EB082FC10FCCB,$D7337C337ED3357C
    Data.q $E2990671C9AC257C,$9686BA354DB35F0B,$BB7150A558D695DD,$94C2BB72FBC6B164,$EBADABEAAD89A12C
    Data.q $AFD4BF67D21A3EB6,$C535DF551BFB742D,$1033ABAF3014ABCC,$A1871FC3BE26F700,$354972AB383A0D5F
    Data.q $F47B5B7A5DA7E92B,$D831CC2300FFFCDC,$7A8D932C3786C60C,$D334B5ABB8A98C73,$DA7796B677B7968D
    Data.q $FC31BE099F6B89C7,$229EC40F7823F047,$4F8BB56785BF15F0,$DDED8F0BDBF4D6BC,$6F44DEAECC2EDE42
    Data.q $7E2EC4FC3AB20828,$1E6A25FE3509D26D,$B92DFC67FB7DF82E,$F0552FDDE1716FF8,$6B75ADECAD09C3D7
    Data.q $7B423DDA9E4F9B37,$29549165CB93B664,$2DBB33C66C491D42,$2349A0EE78825E9F,$CA9D3A3214399275
    Data.q $CE57A7C13D08F2C0,$92AA955B0F43B862,$1835B96D728B52E6,$F4E6BDCA75A728C9,$FCCA623F77BAF7D2
    Data.q $356CFBAA5530CE78,$C629947DBC42492E,$E0AC4A45596B3F9D,$65EDCAA568E5F9A2,$46F6F31E3C355CA4
    Data.q $53174DEED9CFF5D4,$321E6A1ADF5BF4D5,$76DEE933D737887F,$5868B52943A4369B,$CB5694F394D192ED
    Data.q $DFC2E7DDDAA8949F,$EBF2F1195ED6EB09,$C4433DE125F811DE,$80BF85E5F0BE169E,$3823EE7B7CBA2CFC
    Data.q $14C1809FC7E9E29E,$A922CB2F5661A3C4,$A5B25200FFAA28EF,$6E6FB2E5E5D262A4,$D74EF2E9F2FA4B5E
    Data.q $D41AE380F4ADE4D4,$6A6E4A4958B54AE7,$DAC6B8C5DDEEE3F4,$567EA5CDCAAAFB28,$D3572FF08F4679AE
    Data.q $348D7B4F37F023FC,$AAAF265AC4CFF0CD,$CA0AC98A67FBC832,$8443F93967997CB0,$F8227CADA35AB907
    Data.q $3ED6281EC7D7F089,$1AC7CF9E143EEB1A,$DA9678A4A7BE9A94,$DAE65EF0F5CA226F,$4046832564F00E58
    Data.q $2DFBE5A9EDFD0240,$AC3DED076BF8D815,$5A4D9BA4A63BA379,$EE74638C93978531,$1100FF99C7DE579B
    Data.q $EAECAD5009E5889B,$94713AA7E7B59F52,$EB8BE6D2BA6AED27,$273B4A4D129A8F1A,$E55ACB7E31E1EF66
    Data.q $3D7525F8A2BDEC97,$97C547C68358EB26,$0BCB77D9826405B7,$431016363B8C313C,$DD9BBB0D045F3236
    Data.q $970B9BBCF2BAA2A8,$F4BD15ADAC0AC3C5,$7C8C773E825F518A,$286D96519E38CE41,$DE47452B2A75C6C9
    Data.q $6523F796B6CDC9AB,$7CAA57144561DED2,$95FC9FB63FCC5748,$E800FF51C1FE3F2D,$D3F687F9EAE9ABE9
    Data.q $D800FFA7A59200FF,$882F7C351DFD3F2A,$9FF9A3F89726F2DF,$7F1C2500FF3978AA,$00FF59EC07C93FC1
    Data.q $9F54B000FF504B25,$FD61BE7AFA1A3AFA,$0AF61F6AA9E43F8B,$524F5F434700FF93,$0F52FCCB44FEE7F0
    Data.q $21F897A3E400FF18,$FE580DBFE3051EF9,$2ABE6929FE1B5FD0,$231DC36FF0537F4D,$427257D6C2DB924E
    Data.q $779A2E298BBBAB75,$0AE9962FD2B4CA48,$4EE2FBB948BA5106,$2BEC977AC2674D42,$3FF11F7EC1C7A2F1
    Data.q $F4EE2DAD05BD7485,$395E6E6CF3A5798D,$0289D1CA92243089,$C1282C9265242813,$78DF3EFB9DF860AF
    Data.q $8B87F032FE04E28B,$3DD2F6C6F8034FB5,$75ADAF682BF6FA36,$F249DB93AA50542B,$F2E45B8C2016CAC8
    Data.q $EC575AB942950097,$165E88CFC0B73DA7,$4A7CADA9CE55F1BE,$8EB066D655EF8AB9,$C6DB314447225935
    Data.q $F9396FB88FC42854,$DCE18C897707B771,$734A4563147154CE,$5C4A6E5E78E76485,$B4B8A8D192929396
    Data.q $92FB7E6A3B2B1BA3,$3C1758F074C2A1F8,$D1B0167851A954C2,$112F5A8DCE69D455,$2D97A242378DD339
    Data.q $172527AD9BAACA4A,$B51FDFD07E642C1D,$BCD378F009BE800F,$3B0AED6B45D7F04D,$E5F29E5283C487D6
    Data.q $E4C2D9DB70049181,$663696912686EE27,$DA9FE39DC6C6E064,$B7F8107E013F56AF,$A4F82386EFF0B548
    Data.q $A95B9E78AB4B91F7,$E57862425B126D34,$C794549EEE8B687B,$D2C92CBBDD2062D3,$2EE21BD77EF69378
    Data.q $F050EBF80B5FE293,$4F8400FF1C7EF485,$B4D4970B3A6D7B57,$67DF5DDA58F626F3,$10C28801CCC3B291
    Data.q $BC09DFC36BDF5601,$8057F071F6E3F06B,$E1CDC3FB2AF11B7C,$7B7459420DEB5B8B,$92BABA20D74D4B6D
    Data.q $4264911B3796F7E3,$770377B763EF43FB,$DDD5BA133FCC581D,$52369C2DDF566E2E,$FD6E799CACE4B576
    Data.q $1E0C7B6FA5D5AED6,$AF982A38F0F4E075,$623857959B4A2C67,$A1E5E7E6D6A9D415,$5E9D8D523A6AF934
    Data.q $FBA58AE611766F67,$87CFC137F15C7C45,$9769026F12AF0A1F,$5087F85CCA0D119F,$30406BDAC2FB9ABF
    Data.q $FBBA45DAD16C6E9B,$9D61C3E1B53C9EF1,$82CFDA8C1AC21B3D,$0B35B974A9DB7BB4,$F26297D97FD76DAB
    Data.q $12AF137CD31DC8C4,$AA2C3A8CCAAA22C3,$3FF84A279EA492A4,$E02BFC017F868FE2,$DB0A6F3511BF877F
    Data.q $D36DDF9756D73668,$3C993B6A1D9BB5AD,$1256CAD739DB3CE9,$E34EDBC6EEC3DA17,$CBC6F037F8A1DBB9
    Data.q $4E47F80F5FC2A7E0,$4478B640D3E6E69A,$9EA449DE49BA0DF7,$50ED2BC9A0702047,$BD370B62090A553E
    Data.q $0BF3A88C23CED391,$26C97E6DACAD34F2,$7EEEC92F6ADE5FDB,$3D9CDAC3334EE26B,$9FD798F5E1325C1A
    Data.q $6A5539A99CB24EC3,$A3A68B128C127552,$4BC9D95FABAD3A05,$F039F66BD9BFE79B,$898F5A8200FFC55F
    Data.q $E3716DBCD2BBB7E7,$95BA36C4D7C6620D,$0CCDD6946FFABCCD,$921F69148C20AB88,$C37F2F52B8C790A4
    Data.q $49F841F63378DE6B,$F1283E441A776AAE,$EE78B5D4797A57CC,$BB06E68445ADB33F,$8418DFA479A22D9D
    Data.q $03488EB4D22C1811,$A7F143F66F786E6B,$8B0F6678A83B3C87,$AB0BB5D5099ED697,$DCD0F6C3CB2EADEB
    Data.q $6C778419B2A400FF,$C0E12E1ACB6C24CF,$7C15CF7B6086F100,$75821F053CD04502,$BC0B00FFEA01BF9B
    Data.q $6CE99638FB8BE1C3,$442E45E671ABA84C,$DC5D8058DDA56DC2,$33C82E3FBE9519F0,$8CBD74709C06269C
    Data.q $24E78593669C4EE3,$5D5D7BCBA59534D7,$8EF6234DF5A62DCA,$6BDE7CB3803BF122,$8F985A18DABFF188
    Data.q $344E0D4BD772496B,$67D494744E42452A,$508255288572D359,$07F89D5FF7937172,$F1BDEC9FF1BEC7F6
    Data.q $D7546778F256C57B,$45A775C964C716BE,$3452AE2EAC4EBA76,$25AA50B863E18E74,$4A90610477DA5756
    Data.q $177FA4E2C7F1CD8B,$0D053C8727257C6C,$7D8774D566348CE7,$AEF3D3E6F0A2E95A,$5B29BC2C3701EBA0
    Data.q $7A6C400EA94B5064,$1F8B4FE327BC8C57,$887FE30FBC8E6FB3,$B4251C7F358BB7BA,$E9DADB3036D76A72
    Data.q $87B2B71849326FAB,$E4F23B24AEE02662,$73F07FAF86D9C8A1,$697F193FB41BBFED,$C7BED226D2C5FE6D
    Data.q $9B792B63DEF97CF6,$7ACE69D3DBB87CF7,$AC5241FC6568F68A,$4E9B767FD4AC2256,$DCABAEB59D7F4F0B
    Data.q $9915DFD657AB5FD5,$7E79892374854771,$8E52515E27E5840E,$1915FBE861496922,$52972AC4937C5138
    Data.q $56BC1E849AAE6C84,$2EE0F782F84CFB9B,$1F8FFBF487AFA893,$9169C2E193367EEA,$9D0F525793B4B85D
    Data.q $77F9E3156ECBAFB8,$FF7A2501DCC81633,$F8009EC783F80A00,$F8A79FF8307CABEB,$AC8917870E517C59
    Data.q $C57DDACE5C0E0F35,$E6CBA48C66F64F93,$B811462539A74409,$9AAEEC9F3A38293F,$DE104F4153CDC28F
    Data.q $06E2F3F67872EA58,$7B952EA9C05AAB95,$63319FA45D22C432,$5238DCEF7227C9F2,$BD6EE1F7F043D7A0
    Data.q $7FE373FCD5497CA7,$9EC61AC7F7785E19,$C358F0E953EA3B9A,$F1560CAB2C92626F,$270766062293B10D
    Data.q $47FCF0CAFB3EB71D,$F368CBB7C512AAF5,$B534793F7B5B0EEB,$D9DA5A5A7797F673,$9467C2D36CE2E558
    Data.q $D75ED61EC694E363,$38497BDA5F67AFD9,$0B462194A4944E3A,$57463B5A6A334A99,$FFD3F687F99A3B8B
    Data.q $2AD800FFA7A59200,$305F3D7D351DFD3F,$00FFB454F27FDAFE,$AEA6A300FF4705FB,$47F12F4DE4BF118F
    Data.q $384AFE73F02A3FF3,$B3D80F927F8200FF,$A96000FFA1964AFE,$C37CF5F43574F43F,$EC3FD452C97F16FB
    Data.q $4E9FBE868EFE2715,$ED4596CA1AE0B15A,$6ACA463CF548491F,$EAECA42F4F677C66,$B257F7EE6BBF712A
    Data.q $1434130A595BB7BB,$0F7DCDADD0DC0CC5,$D75A5DAD2FFBC7B5,$76E43FF87FDFF2E5,$FBADFE679681AF2C
    Data.q $676EFBD99BD7BE2A,$36B7F696DBF24BFC,$29DAF0BEFBDFE497,$55590F67AFA4865F,$7906F9B9AA8B1AA7
    Data.q $577DD90A33CBD494,$DDA367EF374E4E77,$4561F6D2D7CEEADA,$0045511494C75614,$0500FFFBEDAFF315
    Data.q $25BBE11FEC9FF01E,$1AC6938400FFB5BC,$BC852E08342CD9B6,$5F9B3471AFED068D,$38325649956188C9
    Data.q $BF2AFAE39185A0DA,$FF659FA8E000FF18,$ED6F2CFCAFB98700,$BF79A1DB7E40F84F,$DBE58DFD9547FB6A
    Data.q $CC2B7F3EFBECABFD,$1F37CF7C8E7C5EFB,$9870F5F1CFC46B3E,$D9BB519352367A6E,$F00DDEEA07FEFA5E
    Data.q $D4CC86E7F388037E,$928E705539954AA5,$DCEEAC1594E2CAA9,$53AB9E264DDA34BA,$FFD17E61FB731EFE
    Data.q $41AA871EF03CF100,$13BECCA000FFDAA3,$D8F97546566A5BF0,$26B25DC2724793BC,$5B92A01D76013854
    Data.q $F8C30500FF45F8A7,$E35F7870C61FF0B1,$3DB6C33EB57F835F,$CD835F1B6D4FDF45,$6C5B5830F14A9474
    Data.q $933178872244760E,$FD137C53BF99F920,$00FF91660800FF8B,$62BF23FC5FF6DF08,$BED86737FB2FFB87
    Data.q $3CF9CB239F7CB1CB,$63DC2E9FDD6E2FAF,$F8BF5DF07FC7578C,$9F24FCCF8EE17F40,$F82FB6FD9AF07FD9
    Data.q $A1F3CCB7FDCC3C44,$FBEC2B9FB7975FFB,$E7E4DDBB00FFCDBC,$1BBFAC5879559EF7,$2ACA4D715C2CA185
    Data.q $4FAFB52BC92FFCFA,$0BA7F10F27FAA9BB,$F5F02B87476F0EF1,$5AE9E9443EAD5228,$474DC62829A5E80D
    Data.q $CF96D77292553D57,$8C0FB4133F86AFEB,$527DE151FCD201DE,$9DC505A875D05AD7,$0441905C253BB9E5
    Data.q $4606185905565606,$00FFE70381015656,$00FF9F964AFE4FDB,$C2D574F400FFA860,$E1BFB63F04C100FF
    Data.q $3EB53FB500FF6E87,$3FF6E73D0900FFC3,$F76DF2655FF9B7DA,$D33EDA571E779F7D,$1600FFE6992F9F9D
    Data.q $5A2AF93F6DBFEEEA,$D3D100FFA382FD7F,$D8E188A7B8C69357,$0F0E3C8B93B392D7,$9A326220BEE469C8
    Data.q $69F52952178DE733,$70EB76B474697B6D,$F61F6AA9E43F8BFD,$4F5F434700FF930A,$9FF830FC135F8303
    Data.q $E874D4E6D7277CA8,$B965B6766B9AE66C,$296B235B590A6546,$1BFEEBAEF57750CE,$00FFF00FF43FC54F
    Data.q $CFD78E00FF9BF8FD,$EAB30CB8E51697F0,$33FACA5E79EFB698,$FAF971CF059EE3DA,$DCE2A0CA55BEB2CD
    Data.q $67F6343BD5516A92,$FFBD7C2D1C353CD4,$F807FA9FE2A70D00,$68C700FF4DFCFE7F,$03FD4FF1D38600FF
    Data.q $00FF267E00FF3FFC,$BD45D9AD7FE9B5E3,$FFD65F6E279FB69F,$A7BDCF533FF4A100,$F85BAE0F65F687F6
    Data.q $FFEFF2F26B6DFDBC,$3439F1F4A16D6F00,$FF297EDAF03FCC57,$C4EF00FF877FA000,$143F6DF88F76FCDF
    Data.q $F700FFC33FD000FF,$423CBC5E3BFE6FE2,$757F59B9181563C9,$4D8CE226BCE2929F,$526E734AA86BE279
    Data.q $67ABDBDBDD56CB7C,$7EDAF03FCC57D4D3,$00FF877FA000FF29,$6DF88F76FCDFC4EF,$FFC33FD000FF143F
    Data.q $FF573BFE6FE2F700,$E07F69FE261B1100,$58FE23CE41FC3F27,$87F98A7AFA68E07F,$F00FF43FC54F1BFE
    Data.q $8E00FF9BF8FD00FF,$FA9FE2A70D00FFD1,$00FF4DFCFE7FF807,$7F938D8800FF68C7,$398800FF10F0BF34
    Data.q $4F1F0DFC0FCB7FC4,$8B13FCEFB7BFCE57,$F29AEC8687B77FC2,$633B6918BF11FEEB,$1B2C1217B5E0D7B0
    Data.q $233A4FEED1BC3DB7,$9072E7C694056596,$C54F1BFE2F93441A,$F8FD00FFF00FF43F,$0D00FFD18E00FF9B
    Data.q $FE7FF807FA9FE2A7,$119F6BC700FF4DFC,$995BA59B221699C7,$73F891AD67E5F4C5,$28598E19363E59C6
    Data.q $4DF335257507ABD3,$A3354DD3684DD334,$BFB1C300FF0A1F4D,$037E24FEC3D92F6C,$E9F4AF7BF44935D7
    Data.q $4EC8366D347EC29B,$CB982D698E0723DF,$B8C1AE2004CB34B6,$E0BF0800FFF44290,$0FCE783C3E169F87
    Data.q $DB5FF697F16B7C14,$EBAC0DEAA3A8C9B6,$2D669E08914EF9F3,$6CB344C90E81EE0A,$7FD8AF323F633002
    Data.q $7FA000FF297EDAF0,$76FCDFC4EF00FF87,$D000FF143F6DF88F,$FE6FE2F700FFC33F,$DE4F1ACE730C5E3B
    Data.q $8F7E7B977D45499D,$73891F71C4603FF1,$2B5995168E4225A5,$DC76EB1A558AB03A,$F0017DA43BFCD9A3
    Data.q $3AC067F08196E1C7,$BAE8DAA52FFC855F,$07B7B3B3B7008B0E,$CCCC922449924B64,$C4CCCCCE123BB3C4
    Data.q $FF69FB00FFFC24B1,$15EC00FFD352C900,$3F6DF88F9A8EFE1F,$00FFC33FD000FF14,$C42F5C3BFE6FE2F7
    Data.q $7E8DC587FA8900FF,$B7A119CE8651471D,$99A15265645B655B,$4A7FCFE51C3377B2,$AFE5C72DBBB88BCF
    Data.q $6465ADACEEBD8409,$6796790EF0003F7C,$7C576A9A9D79DA9F,$F7B6D5579772D2DC
    Data.b $67,$FF,$D9
  glass2_jpg_end:
EndDataSection

Last edited by mpz on Wed Oct 06, 2021 6:39 pm, edited 3 times in total.
Working on - MP3D Library - PB 5.73 version ready for download
User avatar
StarBootics
Addict
Addict
Posts: 984
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

Re: Opengl examples

Post by StarBootics »

Hello,

Your example don't work on Linux, your LoadGLTextures() procedure use a Windows Only stuff like the BITMAP Structure and GetObject_() instruction.

Furthermore, PIXELFORMATDESCRIPTOR is also a Windows only Structure, as well as GetDC_() instruction. Same goes for the following instructions :

ChoosePixelFormat_()
wglCreateContext_()
wglMakeCurrent_()
GetAsyncKeyState_()

Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Saboteur
Enthusiast
Enthusiast
Posts: 271
Joined: Fri Apr 25, 2003 7:09 pm
Location: (Madrid) Spain
Contact:

Re: Opengl examples

Post by Saboteur »

On Mac don't work either.
[:: PB Registered ::]

Win10 Intel core i5-3330 8GB RAM Nvidia GTX 1050Ti
User avatar
skinkairewalker
Enthusiast
Enthusiast
Posts: 627
Joined: Fri Dec 04, 2015 9:26 pm

Re: Opengl examples

Post by skinkairewalker »

is it possible to make this same example using the Ogre 3d library in purebasic ?
mpz
Enthusiast
Enthusiast
Posts: 494
Joined: Sat Oct 11, 2008 9:07 pm
Location: Germany, Berlin > member German forum

Re: Opengl examples

Post by mpz »

Hi to all,

thanks fro the answer. i have changed the problems in the code (see first message) and solved:

ChoosePixelFormat_()
wglCreateContext_()
wglMakeCurrent_()
GetAsyncKeyState_()

Can you check it again under linux and MAC please?

@skinkairewalker i dont know ogre good enough, perhaps anybody has an answer for you...

Greetings
Michael
Working on - MP3D Library - PB 5.73 version ready for download
User avatar
Caronte3D
Addict
Addict
Posts: 1025
Joined: Fri Jan 22, 2016 5:33 pm
Location: Some Universe

Re: Opengl examples

Post by Caronte3D »

Works nice on Windows 10
dige
Addict
Addict
Posts: 1247
Joined: Wed Apr 30, 2003 8:15 am
Location: Germany
Contact:

Re: Opengl examples

Post by dige »

mpz wrote: Tue Oct 05, 2021 10:05 pm Hello to all, After a longer programming abstinence (missing it, but i got a new work and had not much time)
Welcome back! :D
"Daddy, I'll run faster, then it is not so far..."
Saboteur
Enthusiast
Enthusiast
Posts: 271
Joined: Fri Apr 25, 2003 7:09 pm
Location: (Madrid) Spain
Contact:

Re: Opengl examples

Post by Saboteur »

On Linux works ok, on mac works ok but freeze while resizing window. It must be a mac issue (Catalina OS).
[:: PB Registered ::]

Win10 Intel core i5-3330 8GB RAM Nvidia GTX 1050Ti
mpz
Enthusiast
Enthusiast
Posts: 494
Joined: Sat Oct 11, 2008 9:07 pm
Location: Germany, Berlin > member German forum

Re: Opengl examples

Post by mpz »

Hello,

Thanks for the answer, now i will translate all examples of
http://nehe.gamedev.net
in this kind
Greetings
Working on - MP3D Library - PB 5.73 version ready for download
mpz
Enthusiast
Enthusiast
Posts: 494
Joined: Sat Oct 11, 2008 9:07 pm
Location: Germany, Berlin > member German forum

Re: Opengl examples

Post by mpz »

Hello Again,

i have a problem and need help. i use the following Shader code from pj with Windows 10 on different PCs. The code doesnt work on a PC with gigabyte board (i7 cpu) and a Intel® HD-Grafik 530. i got a black screen and no error messages. Does anybody
know a solution?

Ogre shader works fine, web opengl works fine and dx9 shader too. Any idea ?!?

pj Shader testcode PB 5.73(x86/x64) Windows (only one shader for testing)

Code: Select all

;/ GLSL example to test new OpenGLGadget - PJ 06/2014.

EnableExplicit

Enumeration ;/ Window
  #Window_Main
EndEnumeration
Enumeration ;/ Gadget
  #Gad_OpenGL
  #Gad_Editor
  #Gad_ShaderSelector_Combo
EndEnumeration

Structure System
  Width.i
  Height.i
  Shader_Width.i
  Shader_Height.i
  Event.i
  Exit.i
  MouseX.i
  MouseY.i
  
  App_CurrentTime.i
  App_StartTime.i
  Editor_LastText.s
  
  Shader_Vertex_Text.s
  Shader_Fragment_Text.s
  Shader_Vertex.i
  Shader_Fragment.i
  Shader_Program.i
  
  Shader_Uniform_Time.i
  Shader_Uniform_Resolution.i
  Shader_Uniform_Mouse.i
  Shader_Uniform_SurfacePosition.i
  
  FPS_Timer.i
  Frames.i
  FPS.i
EndStructure

Global System.System

Procedure Init_Main()
  Protected MyLoop.i
  
  System\Width.i = 1024
  System\Height = 480
  System\Shader_Width = 640
  System\Shader_Height = 480
  
  OpenWindow(#Window_Main,0,0,System\Width,System\Height,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenGLGadget(#Gad_OpenGL,0,0,System\Shader_Width,System\Shader_Height,#PB_OpenGL_Keyboard)
  ComboBoxGadget(#Gad_ShaderSelector_Combo,System\Shader_Width+4,2,System\Width - (System\Shader_Width+8),24)
  For MyLoop = 1 To 42
    AddGadgetItem(#Gad_ShaderSelector_Combo,-1,"Shader: "+Str(MyLoop))
  Next
  
  SetGadgetState(#Gad_ShaderSelector_Combo,0)
  EditorGadget(#Gad_Editor,System\Shader_Width+4,30,System\Width - (System\Shader_Width+8),System\Height-30)
  
  System\App_StartTime = ElapsedMilliseconds()
  
  System\Shader_Vertex_Text = "#version 460"+Chr(10)
  System\Shader_Vertex_Text + "in vec3 position;"+Chr(10)
  System\Shader_Vertex_Text + "in vec2 surfacePosAttrib;"+Chr(10)
  System\Shader_Vertex_Text + "out vec2 surfacePosition;"+Chr(10)
  System\Shader_Vertex_Text + "	void main() {"+Chr(10)
  System\Shader_Vertex_Text + "		surfacePosition = surfacePosAttrib;"+Chr(10)
  System\Shader_Vertex_Text + "		gl_Position = vec4( position, 1.0 );"+Chr(10)
  System\Shader_Vertex_Text + "	};"+Chr(10)
  
EndProcedure


Init_Main()

;{ Opengl shader setup & routines

#GL_VERTEX_SHADER = $8B31
#GL_FRAGMENT_SHADER = $8B30

Prototype glCreateShader(type.l)
Prototype glCreateProgram()
Prototype glCompileShader(shader.l)
Prototype glLinkProgram(shader.l)
Prototype glUseProgram(shader.l)
Prototype glAttachShader(Program.l, shader.l)
Prototype glShaderSource(shader.l, numOfStrings.l, *strings, *lenOfStrings) : 
;Prototype.i glGetUniformLocation(Program.i, name.s)
Prototype glGetUniformLocation(Program.i, name.p-ascii)
Prototype glUniform1i(location.i, v0.i)
Prototype glUniform2i(location.i, v0.i, v1.i)
Prototype glUniform1f(location.i, v0.f)
Prototype glUniform2f(location.i, v0.f, v1.f)
Prototype glGetShaderInfoLog(shader.i, bufSize.l, *length_l, *infoLog)

Global glCreateShader.glCreateShader = wglGetProcAddress_("glCreateShader")
Global glCreateProgram.glCreateProgram = wglGetProcAddress_("glCreateProgram")
Global glCompileShader.glCompileShader = wglGetProcAddress_("glCompileShader")
Global glLinkProgram.glLinkProgram = wglGetProcAddress_("glLinkProgram")
Global glUseProgram.glUseProgram = wglGetProcAddress_("glUseProgram")
Global glAttachShader.glAttachShader = wglGetProcAddress_("glAttachShader")
Global glShaderSource.glShaderSource = wglGetProcAddress_("glShaderSource")
Global glGetUniformLocation.glGetUniformLocation = wglGetProcAddress_("glGetUniformLocation")
Global glUniform1i.glUniform1i = wglGetProcAddress_("glUniform1i")
Global glUniform2i.glUniform2i = wglGetProcAddress_("glUniform2i")
Global glUniform1f.glUniform1f = wglGetProcAddress_("glUniform1f")
Global glUniform2f.glUniform2f = wglGetProcAddress_("glUniform2f")
Global glGetShaderInfoLog.glGetShaderInfoLog = wglGetProcAddress_("glGetShaderInfoLog")

Procedure Shader_Compile_Link_Use(Vertex.s,Fragment.s,Use.i=1)
  Protected VertShader.i, FragShader.i, *TxtPointer, Program.i
  Protected Textlength.i, Mytext.s = Space(1024)
  
  ;/ Compile Vertex shader
  VertShader.i = glCreateShader(#GL_VERTEX_SHADER)
  *TxtPointer = Ascii(Vertex)
  ;*TxtPointer = @Vertex
  glShaderSource(VertShader, 1, @*TxtPointer, #Null)
  glCompileShader(VertShader)
  Debug "Vert: "+VertShader
  glGetShaderInfoLog(VertShader,1023,@Textlength,@Mytext)
  Debug PeekS(@Mytext,1023,#PB_Ascii)
  ;Debug MyText
  ;/ Compile Fragment Shader
  FragShader.i = glCreateShader(#GL_FRAGMENT_SHADER)
  *TxtPointer = Ascii(Fragment)
  ;*TxtPointer = @Fragment
  glShaderSource(FragShader, 1, @*TxtPointer, #Null)
  glCompileShader(FragShader)
  Debug "Frag: "+FragShader
  glGetShaderInfoLog(FragShader,1023,@Textlength,@Mytext)
  Debug PeekS(@Mytext,1023,#PB_Ascii)
  ;Debug MyText
  
  ;/ Create Shader Program
  Program = glCreateProgram()
  glAttachShader(Program,VertShader)
  Debug "Attached Vert Shader"
  glAttachShader(Program,FragShader)
  Debug "Attached Frag Shader"
  glLinkProgram(Program)
  Debug "Link program"
  
  If Use = 1
    glUseProgram(Program)
  EndIf
  
  ProcedureReturn Program  
EndProcedure
;}

Procedure Shader_Set(Fragment.i)
  If System\Shader_Program <> 0 ;/ delete the previous shaders
    glUseProgram(0);
  EndIf
  
  Select Fragment
    Case 0
      System\Shader_Fragment_Text = "#version 460"+Chr(10)
      System\Shader_Fragment_Text + "uniform float time;"+Chr(10)
      System\Shader_Fragment_Text + "uniform vec2 resolution;"+Chr(10)
      ;System\Shader_Fragment_Text + "out vec4 myOutputColor;"+Chr(10)
      System\Shader_Fragment_Text + ""+Chr(10)
      System\Shader_Fragment_Text + "void main( void ) {"+Chr(10)
      System\Shader_Fragment_Text + "	vec2 p = ( gl_FragCoord.xy / resolution.xy ) - 0.2;"+Chr(10)
      System\Shader_Fragment_Text + "	float sx = 0.3 * (p.x + 0.8) * sin( 3.0 * p.x - 1. * time);"+Chr(10)
      System\Shader_Fragment_Text + "	float dy = 4./ ( 123. * abs(p.y - sx));"+Chr(10)
      System\Shader_Fragment_Text + "	dy += 1./ (160. * length(p - vec2(p.x, 0.)));"+Chr(10)
      System\Shader_Fragment_Text + "	gl_FragColor = vec4( (p.x + 0.1) * dy, 0.3 * dy, dy, 2.1 );"+Chr(10)
      ;System\Shader_Fragment_Text + "	myOutputColor = vec4( (p.x + 0.1) * dy, 0.3 * dy, dy, 2.1 );"+Chr(10)
      System\Shader_Fragment_Text + "}"+Chr(10)
    Case 1
      
  EndSelect
  
  System\Shader_Program = Shader_Compile_Link_Use(System\Shader_Vertex_Text,System\Shader_Fragment_Text)
  If System\Shader_Program = 0
    MessageRequester("Unsupported Device?","No Shader Support Available",#PB_MessageRequester_Ok)
    End
  EndIf
  
  ;/ store shader uniform locations
  Debug "Shader: "+System\Shader_Program
  System\Shader_Uniform_Time = glGetUniformLocation(System\Shader_Program, "time")
  System\Shader_Uniform_Mouse = glGetUniformLocation(System\Shader_Program, "mouse")
  System\Shader_Uniform_Resolution = glGetUniformLocation(System\Shader_Program, "resolution")
  System\Shader_Uniform_SurfacePosition.i = glGetUniformLocation(System\Shader_Program, "surfacePosition")
  Debug "Time location: "+System\Shader_Uniform_Time
  Debug "Mouse location: "+System\Shader_Uniform_Mouse
  Debug "Res location: "+System\Shader_Uniform_Resolution
  Debug "SurfacePos location: "+System\Shader_Uniform_SurfacePosition
  
  SetGadgetText(#Gad_Editor,System\Shader_Fragment_Text)
EndProcedure

Shader_Set(0)

Procedure Render()
  ;/ set shader Uniform values
  glUniform2f(System\Shader_Uniform_Resolution,System\Shader_Width,System\Shader_Height)
  glUniform1f(System\Shader_Uniform_Time,(System\App_CurrentTime-System\App_StartTime) / 1000.0)
  glUniform2i(System\Shader_Uniform_SurfacePosition.i,1.0,1.0)
  
  glBegin_(#GL_QUADS)
    glVertex2f_(-1,-1) 
    glVertex2f_( 1,-1) 
    glVertex2f_( 1, 1) 
    glVertex2f_(-1, 1) 
  glEnd_()           
  
  System\Frames + 1
  If System\App_CurrentTime > System\FPS_Timer
    System\FPS = System\Frames
    System\Frames = 0
    System\FPS_Timer = System\App_CurrentTime  + 1000
    SetWindowTitle(#Window_Main,"GLSL Testing - PJ 07/06/2014 - FPS: "+Str(System\FPS))
  EndIf
  
  SetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_FlipBuffers,1)
  
EndProcedure

Repeat
  Repeat
    System\Event = WindowEvent()
    Select System\Event
      Case #PB_Event_CloseWindow
        System\Exit = #True
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Gad_ShaderSelector_Combo
            Select EventType()
              Case #PB_EventType_Change
                Debug "Set to: "+GetGadgetState(#Gad_ShaderSelector_Combo)
                Shader_Set(GetGadgetState(#Gad_ShaderSelector_Combo))
            EndSelect
          Case #Gad_OpenGL
            Select EventType()
              Case #PB_EventType_MouseMove
                System\MouseX = GetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_MouseX)
                System\MouseY = GetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_MouseY)
                glUniform2f(System\Shader_Uniform_Mouse,System\MouseX / System\Shader_Width,(System\Shader_Height-System\MouseY) / System\Shader_Height)
            EndSelect
        EndSelect
    EndSelect
    
  Until System\Event = 0
  
  System\App_CurrentTime = ElapsedMilliseconds()
  
  Render()
  
Until System\Exit 

Working on - MP3D Library - PB 5.73 version ready for download
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 280
Joined: Thu Jul 09, 2015 9:07 am

Re: Opengl examples

Post by pf shadoko »

I am on intel HD 5600
I have the message : incorrect GLSL version: 460

to make it work I have to switch to version 440
and replace the vertex shader by :

System\Shader_Vertex_Text = "#version 440"+Chr(10)
System\Shader_Vertex_Text + "in vec3 position;"+Chr(10)
System\Shader_Vertex_Text + " void main() {"+Chr(10)
System\Shader_Vertex_Text + " gl_Position = vec4( position, 1.0 );"+Chr(10)
System\Shader_Vertex_Text + " };"+Chr(10)
mpz
Enthusiast
Enthusiast
Posts: 494
Joined: Sat Oct 11, 2008 9:07 pm
Location: Germany, Berlin > member German forum

Re: Opengl examples

Post by mpz »

Hello "pf sadoko",

thank you very much for this great solution. Now everything works fine with this opengl Shader....

The graficcard show the #GL_SHADING_LANGUAGE_VERSION with this piece of code

Greetings
MPz

here a little piece of code to look on the function of your grafic card for all os systems

Code: Select all

; German forum: http://www.purebasic.fr/german/viewtopic.php?t=45&postdays=0&postorder=asc&start=10
; Author: DarkDragon (updated for PB 4.00 by Andre)
; Date: 10. September 2004
; OS: Windows
; Demo: No
; actulized mpz dec 21, working on PB 5.73 win/linux and mac possible

; Ermitteln der OpenGL-Version

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS

  ImportC "/System/Library/Frameworks/OpenGL.framework/OpenGL"
    glGetString(name.i) As "_glGetString"
  EndImport

CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
  
  ImportC "/usr/lib/x86_64-linux-gnu/libGL.so"
    glGetString(name.i) ; string
  EndImport

CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows
  
  Import "OpenGL32.lib"
    glGetString(type.l)
  EndImport
  
CompilerEndIf


#WindowWidth = 1
#WindowHeight = 1
#WindowFlags = #PB_Window_Invisible
#GL_SHADING_LANGUAGE_VERSION = $8B8C 
Global hWnd.l, Event

If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, "", #WindowFlags)
  OpenGLGadget(0, 1, 1, WindowWidth(0) , WindowHeight(0))
  ;MessageRequester("OpenGL-Version", PeekS(glGetString_(#GL_VERSION),-1,#PB_Ascii))
  Debug "----------------"
  Debug PeekS(glGetString(#GL_VENDOR),-1,#PB_Ascii)
  Debug PeekS(glGetString(#GL_RENDERER),-1,#PB_Ascii)
  Debug PeekS(glGetString(#GL_VERSION),-1,#PB_Ascii)
  Debug PeekS(glGetString(#GL_SHADING_LANGUAGE_VERSION),-1,#PB_Ascii)
  Debug "----------------"
  Debug PeekS(glGetString(#GL_EXTENSIONS),-1,#PB_Ascii)
EndIf
Working on - MP3D Library - PB 5.73 version ready for download
Post Reply