je suis sous seven 64 avec pb570LTS 64
avec un carte graphique intégrée
il fonctionne aussi sur mon XP32 familial PB_570Lts
sinon je comprend pas

car se sont les fonctions de la doc PB eh ben en voilà un mystère

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
Code : Tout sélectionner
glRasterPos2f_(0.35, 0.73)
glPrint("RGBA(" + Rouge + ", " + Vert+ ", " + Bleu + ", " + Alpha + ")" + Space(20)) ; Ajout autant d'espace que de caractere Print GL Text To The Screen
glRasterPos2f_(0.53, 0.73)
glPrint("Aide touche Espace oui/non" + Space(28)) ; Ajout autant d'espace que de caractere Print GL Text To The Screen
Code : Tout sélectionner
glOrtho_(-2,10,-2,10,-2,10) ; position du texte
Dernier code avec Opengl_texte_tableau() decommenté : ca marche enfin (mais peut etre pas chez zorro. Attendons son retour pour en conclure à un bug)kernadec a écrit :Ah aaaggrrcode précédent mis à jour
avec ce code dans la procédure OpenglText()
active la procédure commentée ; Opengl_texte_tableau()
Code : Tout sélectionner
EnableExplicit
Global Scene, ww = 800, wh = 600
Global Font0, Font1
; Plan de l'application
Declare Start()
Declare Render()
Declare Exit()
Start()
; Texte affiché sur une image RGBA
Procedure glDrawtext(x.f, y.f, Text.s, Font, Color = $FFEEF5FF)
Protected Tmp = CreateImage(#PB_Any, 1, 1, 32, #PB_Image_Transparent)
Protected iw, ih ; Largeur auteur de l'image
Protected DrawingBuffer ; Pointeur de données de l'image
Protected TextureID = 0 ; Il restera unique
; Préparation de l'image format RGBA au dimension du texte
; Déterminer les dimensions du texte à afficher (iw & ih)
StartDrawing(ImageOutput(tmp))
DrawingFont(FontID(Font))
iw = TextWidth(Text)
ih = TextHeight(Text)
StopDrawing()
; On connait maintenant les dimensions du texte (iw & ih)
; Création de l'image
ResizeImage(tmp, iw, ih)
StartDrawing(ImageOutput(tmp))
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawingFont(FontID(Font))
DrawText(0, 0, Text, Color, RGBA(0, 0, 0, 0))
DrawingBuffer = DrawingBuffer() ;Récupération adresse mémoire de l'image
StopDrawing()
; Préparation de la texture OpenGL
glEnable_(#GL_TEXTURE_2D)
; Selection de la texture
glBindTexture_(#GL_TEXTURE_2D, TextureID)
; Méthode de placage
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
; Création de la texture
glTexImage2D_(#GL_TEXTURE_2D, 0, 4, iw, ih, 0, #GL_BGRA_EXT, #GL_UNSIGNED_BYTE, DrawingBuffer)
; La texture est prete. On a plus besoin de l'image
FreeImage(tmp)
; Modelisation texture
glMatrixMode_(#GL_TEXTURE)
glLoadIdentity_()
glPushMatrix_()
; Le coin 0,0 étnt en bas à droite de l'image, Flip vertical de la texture
glScalef_(1, -1, 0)
; Modelisation de la texture
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
glPushMatrix_()
; Reset couleur
glColor4f_(255, 255, 255, 255)
; Dessin
glBegin_(#GL_QUADS)
; Coin haut gauche
glTexCoord2f_(0, 0) : glVertex2i_(x, y)
; Coin haut droit
glTexCoord2f_(1, 0) : glVertex2i_(x + iw, y)
; Coin bas droit
glTexCoord2f_(1, 1) : glVertex2i_(x + iw, y + ih)
; Coin bas gauche
glTexCoord2f_(0, 1) : glVertex2i_(x, y + ih)
glEnd_()
glPopMatrix_()
glDisable_(#GL_TEXTURE_2D)
EndProcedure
;-
Procedure Start()
; Chargement des fonts d'affichage du texte
Font0 = LoadFont(#PB_Any, "Arial", 25)
Font1 = LoadFont(#PB_Any, "Arial", 15)
OpenWindow(#PB_Any, 0, 0, ww, wh, "OpenGL : Création d'une scene", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
; Fenetre openGl
Scene = OpenGLGadget(#PB_Any, 0, 0, ww, wh, #PB_OpenGL_Keyboard)
; Activation textures et transparence
glEnable_(#GL_BLEND)
glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA)
; Couleur d'arrière plan
; Chaque composant RGBA est divisé par 255
glClearColor_(0.5, 0.5, 0.5, 1.0)
; Sélectionner la pile des matrices de projection
glMatrixMode_(#GL_PROJECTION)
; Ré-initialise la matrice de projection
; et assure ainsi qu’une seule projection soit effectuée.
glLoadIdentity_()
; glOrtho_(gauche, droit, bas, haut, proche, loin);
glOrtho_(0, ww, wh, 0, -1, 1)
glDisable_(#GL_DEPTH_TEST)
glMatrixMode_(#GL_MODELVIEW);
glLoadIdentity_()
; Déclencheur
BindEvent(#PB_Event_CloseWindow, @Exit())
; Boucle de rendu visuel
Render()
EndProcedure
; Visualisation du résultat
Procedure Render()
Static N
Repeat
; Efface le frame buffer et le Z-buffer
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
; Un peu de polygone pour SPH ;)
glColor4f_(1, 0, 0, 1)
glBegin_(#GL_POLYGON)
glVertex2f_(300, 10)
glVertex2f_(500, 10)
glVertex2f_(400, 200)
glEnd_()
; Affichage d'un titre
glDrawtext(10, 10, "Texte sur un OpenGLGadget", Font0, RGBA(255, 255, 255, 255))
; Dessin d'un compteur
glDrawtext(10, 100, "Compteur", Font1, RGBA(255, 255, 255, 255))
glDrawtext(130, 100, Str(N), Font1, RGBA(227, 139, 226, 255))
; Compteur + 1
N + 1
; FlipBuffers
SetGadgetAttribute(Scene, #PB_OpenGL_FlipBuffers, #True)
Until WindowEvent() = #PB_Event_CloseWindow
EndProcedure
Procedure Exit()
End
EndProcedure
Code : Tout sélectionner
glOrtho_(0, ww, wh, 0, -1, 1)
Code : Tout sélectionner
gluOrtho2D_(0, ww, wh, 0)