Comme il me semble que mon code précédent ne fonctionne pas sur toutes les machines

Donc voilà, j'ai revu ma copie pour afficher les textes sur l' OpenGLGadget
en adaptant les procédures d' "appelPI" dans mon précédent code
ce code tourne bien chez moi, mais comme mes ordis ne font pas référence, donc, bonne chance chez vous

j' espère que ce code fonctionnera sur beaucoup de configurations Windows

Cordialement
ps: j'ajoute ce lien : https://cpp.hotexamples.com/fr/ car sur celui-ci
en utilisant la recherche pour OpengGL
ce qui est intéressant, c'est que les codes C++ sont proche de la syntaxe PB pour l' OpenGLGadget()
donc facile a transposer

Code : Tout sélectionner
EnableExplicit
Enumeration
#Windows
#Openglgadget
EndEnumeration
#fond = 0 ; couleur de fond de la fenetre
#ligne = 20 ; Taille format saut de ligne avec Drawtext
#DecaleText_X = 300 ; valeur de la position X du texte sur OpengelGadget
#DecaleText_Y = 28 ; valeur de la position Y du texte sur OpengelGadget
#DecaleTitre_X = 400 ; valeur de la position X du Titre sur la Fenetre 0
#DecaleTitre_Y = 12 ; valeur de la position Y du texte sur la Fenetre 0
Global Event.i, EventMenu.i, Rouge.i, Vert.i, Bleu.i, Alpha.i, i.i, menux.s, n.i, quit.i, KeyPause.i, KeySortie.i, fond.i
Global Dim keys.b(256) ; Array Used For The Keyboard Routine
Global base.l ; Base Display List For The Font Set
Global Dim paragraph$(30) ; Array menu
;{;-- ; Déclaration des Procédures
;-- Déclaration des procédures
Declare Pause_Key(KeyPause.i)
Declare Standby_to_See()
;};--
ExamineDesktops() ; taille ecran
OpenWindow(#Windows, 0, 0, DesktopWidth(0),DesktopHeight(0), "", #PB_Window_Maximize|#PB_Window_BorderLess)
SetWindowColor(#Windows, #Black)
OpenGLGadget(#Openglgadget, 0, 0, DesktopWidth(0),DesktopHeight(0), #PB_OpenGL_Keyboard)
; OpenGLGadget(#Openglgadget, 0, 28, DesktopWidth(0),DesktopHeight(0)-28, #PB_OpenGL_Keyboard) ; Option de decalage Y de 28 pixels pour la fenetre OpenGL utilisé avec procédure Titre()
#ANTIALIASED_QUALITY=4 ; for CreateFont_()
AddKeyboardShortcut(#Windows, #PB_Shortcut_Escape, 27) ; 27 = Valeur Touche Escape
AddKeyboardShortcut(#Windows, #PB_Shortcut_Space, 32) ; 32 = Valeur Touche Espace
AddKeyboardShortcut(#Windows, #PB_Shortcut_W, 119) ; 119 = Valeur Touche w
Restore Menu_Polygone_fr:
While menux <> "-8888" ; Chargement datas liste des commandes menu polygones
n = n + 1
Read.s menux : paragraph$(n) = menux
If paragraph$(n) = "-8888"
paragraph$(n) = ""
EndIf
Wend
Procedure BuildFont(nomfont.s,height.l,bold.l,italic.b,symbol.l) ; Build Our Bitmap Font
; Procédure appelPI forum english
Protected hDC ; BuildFont("Courier New",24,1,0,0) ;Build The Font
Protected font.l ; Windows Font ID
Protected oldfont.l ; Used For Good House Keeping
If bold : bold=#FW_BOLD : Else : bold=#FW_NORMAL : EndIf ; font weight
If symbol : symbol=#SYMBOL_CHARSET : Else : symbol=#ANSI_CHARSET : EndIf ;character set
base = glGenLists_(96) ; Storage For 96 Characters
font = CreateFont_(-height,0,0,0,bold,italic,#False,#False,symbol,#OUT_TT_PRECIS,#CLIP_DEFAULT_PRECIS,#ANTIALIASED_QUALITY,#FF_DONTCARE | #DEFAULT_PITCH,nomfont)
hDC = GetDC_(WindowID(#Windows))
oldfont=SelectObject_(hDC, font) ; Selects The Font We Want
wglUseFontBitmaps_(hDC, 32, 96, base) ; Builds 96 Characters Starting At Character 32
SelectObject_(hDC, oldfont) ; reselect the old font again
DeleteObject_(font) ; Delete The Font
EndProcedure
Procedure KillFont() ; Delete The Font List
; Procéduere appelPI forum english
glDeleteLists_(base,96) ; Delete All 96 Characters
EndProcedure
Procedure glPrint(text.s) ; Custom GL "Print" Routine
; Procéduere appelPI forum english
If text="" ; If There's No Text
ProcedureReturn #False ; Do Nothing
EndIf
glPushAttrib_(#GL_LIST_BIT) ; Pushes The Display List Bits
glListBase_(base-32) ; Sets The Base Character to 32
glCallLists_(Len(text),#GL_UNSIGNED_BYTE,text) ; Draws The Display List Text
glPopAttrib_() ; Pops The Display List Bits
EndProcedure
Procedure Opengl_texte_tableau(mode_affichage.l)
If mode_affichage = 0 ; mose affichage = 0 = OpenGL / 1 = Windows
glTranslatef_(0, 0, - 0.5)
glColor4f_(1, 1, 1, 1)
For i= 1 To 21
glRasterPos2f_(0.75 , 1.46 - (0.05 * i))
glColor4f_(1, 1, 1, 1)
glPrint(paragraph$(i) + Space(42)) ; Ajouter autant d'espace que de caracteres Print GL Text To The Screen
Next i
SetGadgetAttribute(#OpenGLGadget, #PB_OpenGL_FlipBuffers, #True) ; pour affichage du menu sous OpenGL
Delay(25)
Else
StartDrawing(WindowOutput(#Windows))
; Box(WindowWidth(0) - #DecaleText_X, WindowX(0) + #DecaleText_Y-1, 265, #ligne * 21 , RGBA(0,0,0,1)) ; effface menu texte ebarre espace test : #red
For i = 0 To 20
DrawText(WindowWidth(#Windows) - #DecaleText_X, WindowX(#Windows) + #DecaleText_Y - #ligne + #ligne * i ,paragraph$(i) , #White , RGBA(0,0,0,1))
Next i
StopDrawing()
EndIf
EndProcedure
Procedure opengltext()
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glOrtho_(-2,2,-2,2,-2,2) ; position du texte
gluPerspective_(75.0, 1, 0.1, 100.0) ; essential to see the text
glMatrixMode_(#GL_MODELVIEW) ;
;----------------------------------------------
glLoadIdentity_()
glTranslatef_(0, 0, - 0.5)
glColor4f_(0, 1, 0, 1)
glRasterPos2f_(0.20, 0.73) ; position x,y ecran
glPrint("RGBA(" + Rouge + ", " + Vert+ ", " + Bleu + ", " + Alpha + ")" + Space(20)) ; Ajouter autant d'espace que de caracteres Print GL Text To The Screen
glRasterPos2f_(0.35, 0.73) ; position x,y ecran
glPrint("Menu Aide : OpenGL = Espace / Windows = W : oui/non" + Space(50)) ; Ajouter autant d'espace que de caracteres Print GL Text To The Screen
glPopMatrix_()
Delay(10)
EndProcedure
;########################################################################
BuildFont("Courier New",16,1,0,0) ; Vers Procedure Build The Font écriture en mode opengl
SetActiveGadget(#OpenGLGadget) ; focus OpenglGadget
quit = 0
Repeat
event = WindowEvent()
opengltext() ; affichage bande titre mode texte sous OpenGL
SetGadgetAttribute(#OpenGLGadget, #PB_OpenGL_FlipBuffers, #True) ; Flip de mise à jour qui redessine l'écran de l' OpenGLGadget
opengltext()
Standby_to_See()
Until quit
KillFont()
End
Procedure Pause_Key(KeyPause.i)
Protected Event, eventmenu
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
EventMenu = EventMenu()
Select EventMenu
Case 27 ; Touche Escape
End
Case 32 ; Touche Espace
KeySortie = 32 ; stock valeur touche pour comparaison à venir
If KeyPause = KeySortie ; Test OK si c' est la meme Touche
Quit = #True
EndIf
KeySortie = 0
Case 119 ; Touche w
KeySortie = 119 ; stock valeur touche pour comparaison à venir
If KeyPause = KeySortie ; Test OK si c' est la meme Touche
Quit = #True
EndIf
KeySortie = 0
EndSelect
EndSelect
Until Quit Or Event = #PB_Event_CloseWindow
Quit = #False
KeySortie = 0
EndProcedure
Procedure Standby_to_See()
Protected Event, eventmenu
Quit = #False
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
EventMenu = EventMenu()
Select EventMenu
Case 27 ; Touche Escape
End
Case 32 ; Touche Espace
Opengl_texte_tableau(0)
KeyPause = 32 ; stock valeur touche pour comparaison à venir
Pause_Key(KeyPause)
Quit = #True
KeyPause = 0
Case 119 ; Touche w
Opengl_texte_tableau(1)
KeyPause = 119 ; stock valeur touche pour comparaison à venir
Pause_Key(KeyPause)
Quit = #True
KeyPause = 0
SetGadgetAttribute(#OpenGLGadget, #PB_OpenGL_FlipBuffers, #True) ; Flip de mise à jour qui redessine l'écran de l' OpenGLGadget
;Delay(2)
EndSelect
EndSelect
Until Quit Or Event = #PB_Event_CloseWindow
Quit = #False
KeyPause = 0
EndProcedure
DataSection
Menu_Polygone_fr:
Data.s "' 1 >< 2 ' = Rouge + 0.01 / Rouge - 0.01"
Data.s "' 3 >< 4 ' = Vert + 0.01 / Vert - 0.01"
Data.s "' 5 >< 6 ' = Bleu + 0.01 / Bleu - 0.01"
Data.s "' + >< - ' = Alpha + 0.01 / Alpha - 0.01"
Data.s "' 7 ' = Rouge 0.5 "
Data.s "' 8 ' = Vert 0.5 "
Data.s "' 9 ' = Bleu 0.5 "
Data.s "' * >< / ' = Alpha / NO Alpha"
Data.s "' p ' = Piquer Couleur sur image de Fond"
Data.s "' h ' = Active/Desactive dernier 'Triangle'"
Data.s "' m ' = Model ON/OFF"
Data.s "' k ' = Kill le dernier Polygone"
Data.s "' i ' = Afficher l'image de fond"
Data.s "' c ' = Continuer sur un Model"
Data.s "' z ' = Zoom ON/OFF"
Data.s "' a ' = Tout mettre en Alpha ON/OFF"
Data.s "' F1 ' = Couleur précédente en memoire"
Data.s "' F2 ' = Couleur suivante en memoire"
Data.s "' F3 ' = Model précédent"
Data.s "' F4 ' = Model suivant"
Data.s "' F5 ' = Sauve les polygones"
Data.s "-8888"
EndDataSection