SimplyOpenGL2DDrawing

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

SimplyOpenGL2DDrawing

Message par Shadow »

Voici un prototype, pour vous montrer mon avancement.
En l'état ça ne vaut pas grand chose, mais j'ai besoin de votre aide pour me dire tous ce qui ne va pas.

Le but va etre de créer un truc genre 2DDrawing en se passant si possible totalement de la bibliothèque 2DDrawing
parce que je veux que ce soit ultra rapide, et que la bibliothèque 2DDrawing et la bibliothèque VectorDrawing ne marche pas avec la carte vidéo !

Note: Et bien ça commence à prendre forme petit à petit.

Code : Tout sélectionner

; Créée par Dieppedalle David, alias Shadow, le 14/03/2022.
; Merci à Falsam pour son aide avec ces exemples et explications qui ont permis de commencer à créer ce module.

; Version: 1.00.01 le 13/03/2022 - Première version minimal de démonstration (Prototype).
; Version: 1.01.00 le 14/03/2022 - Version en chantier de démonstration (Prototype), divers tests pour arriver au résultat voulue, modifié: OpenGL_DrawLine, ajout de: OpenGL_DrawLineXY et OpenGL_DrawSquare.
; Version actuel: 1.02.00 le 20/03/2022 - Version un peu plus aboutie (Prototype), divers tests pour arriver au résultat voulue, corrections diverses, toutes les fonctions sont désormais
;                                         oppérationnels et utile et plusieur gadget OpenGL peuvent être créée et utiliser dans une même application, exemple mis à jour.
; Fonctions actuel pris en charge:
;
;   InitOpenGL(OpenGLGadgetNumber.i, BackgroundColor.i, SmoothShading.b = #False) ; Initialise la prise en charge pour pouvoir utiliser le Gadget OpenGL.
;   OpenGL_StartDrawing(OpenGLGadgetNumber.i) ; Permet de commancer des oppérations de dessins sur le Gadget OpenGL.
;   OpenGL_Clear(OpenGLGadgetNumber.i, Color.i) ; Efface le Gadget OpenGL avec la couleur 24 bit indiqué.
;   OpenGL_DrawLine(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i) ; Déssine une ligne aux coordonées et de taille indiqué dans le Gadget OpenGL.
;   OpenGL_DrawLineXY(OpenGLGadgetNumber.i, X1.i, Y1.i, X2.i, Y2.i, Color.i, Thickness.i) ; Déssine une ligne aux coordonées indiqué dans le Gadget OpenGL.
;   OpenGL_DrawSquare(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i) ; Déssine une forme pleine, carré ou rectangle, aux coordonées et de taille indiqué dans le Gadget OpenGL.
;   OpenGL_DrawBox(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i) ; Déssine un cadre vide aux coordonées et de taille indiqué dans le Gadget OpenGL.
;   OpenGL_StopDrawing(OpenGLGadgetNumber.i) ; Termine les oppérations de déssins sur le Gadget OpenGL.

; Note importante:
; Concept similaire à du 2DDrawing dans le système de fonctions mais n'a rien à voir avec, une seule surface peut être dessiné à la fois ou erreur il y aura.
; Pour le moment ceci n'est qu'un prototype.

DeclareModule SimplyOpenGL2DDrawing
  
  ; Ces deux constantes OpenGL sont utilisées pour la création de textures. Ne modifiez pas leurs valeurs !
  #GL_BGR = $80E0
  #GL_BGRA = $80E1
  
  Declare.b InitOpenGL(OpenGLGadgetNumber.i, BackgroundColor.i, SmoothShading.b = #False) ; Initialise la prise en charge pour pouvoir utiliser le Gadget OpenGL.
  Declare.b OpenGL_StartDrawing(OpenGLGadgetNumber.i) ; Permet de commancer des oppérations de dessins sur le Gadget OpenGL.
  Declare.b OpenGL_Clear(OpenGLGadgetNumber.i, Color.i) ; Efface le Gadget OpenGL avec la couleur 24 bit indiqué.
  Declare.b OpenGL_DrawLine(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i) ; Déssine une ligne aux coordonées et de taille indiqué dans le Gadget OpenGL.
  Declare.b OpenGL_DrawLineXY(OpenGLGadgetNumber.i, X1.i, Y1.i, X2.i, Y2.i, Color.i, Thickness.i) ; Déssine une ligne aux coordonées indiqué dans le Gadget OpenGL.
  Declare.b OpenGL_DrawSquare(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i) ; Déssine une forme pleine, carré ou rectangle, aux coordonées et de taille indiqué dans le Gadget OpenGL.
  Declare.b OpenGL_DrawBox(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i) ; Déssine un cadre vide aux coordonées et de taille indiqué dans le Gadget OpenGL.
  Declare.b OpenGL_StopDrawing(OpenGLGadgetNumber.i) ; Termine les oppérations de déssins sur le Gadget OpenGL.
  
EndDeclareModule

Module SimplyOpenGL2DDrawing
  
  Procedure.b InitOpenGL(OpenGLGadgetNumber.i, BackgroundColor.i, SmoothShading.b = #False)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      ; Pour activer le contexte OpenGL du gadget.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_SetContext, #True)
      
      ; Activation de la transparence.
      glEnable_(#GL_BLEND) ; Active la transparence.
      glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA) ; Pour prendre en compte la transparence.
      
      ; Caméra.
      gluOrtho2D_(0, GadgetWidth(OpenGLGadgetNumber.i), GadgetHeight(OpenGLGadgetNumber.i), 0)   ; Cone de visualisation (Gauche, Droit, Bas, Haut).
      
      ; Couleur d'arriere plan (RGBA Décimales).
      glClearColor_(Red(BackgroundColor.i) / 255, Green(BackgroundColor.i) / 255, Blue(BackgroundColor.i) / 255, 1)
      
      ; Efface l'écran.
      glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
      
      ; Pour actualiser l'affichage.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_FlipBuffers, #True)
      
      ; Pour déactiver le contexte OpenGL du gadget.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_SetContext, #False)
      
      ProcedureReturn #True
      
    Else
      Debug "InitOpenGL: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_StartDrawing(OpenGLGadgetNumber.i) ; Ser a rien ici pour le moment.
    
    If IsGadget(OpenGLGadgetNumber.i)

      ; Pour activer le contexte OpenGL du gadget pour poivoir dessiner dessus.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_SetContext, #True)
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_StartDrawing: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_Clear(OpenGLGadgetNumber.i, Color.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      ; Couleur d'arriere plan (RGB Décimales).
      glClearColor_(Red(Color) / 255, Green(Color) / 255, Blue(Color) / 255, 1)
      
      ; Efface l'ecran avec la couleur du haut.
      glClear_(#GL_COLOR_BUFFER_BIT)
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_Clear: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_DrawLine(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      If Thickness.i < 0
        Thickness.i = 1
      ElseIf Thickness.i > 31 ; Au delà, il y a tronquage de l'epaisseur (31 maxi) de la ligne et donc il y a un décalage.
        Thickness.i = 31
      EndIf
      
      ; Ligne.
      glColor4f_(Red(Color.i) / 255, Green(Color.i) / 255, Blue(Color.i) / 255, Alpha(Color.i) / 255) ; Couleur de la ligne, RGB Décimal.
      glLineWidth_(Thickness.i)                                                                       ; Epaisseur de la ligne.
      
      glBegin_(#GL_LINES)
      glVertex2f_(X.i - 1, Y.i + (Thickness.i / 2) - 1)
      glVertex2f_(X.i - 1 + Width.i, Height.i + (Thickness.i / 2) - 1)
      glEnd_()
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_DrawLine: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_DrawLineXY(OpenGLGadgetNumber.i, X1.i, Y1.i, X2.i, Y2.i, Color.i, Thickness.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      If Thickness.i < 0
        Thickness.i = 1
      ElseIf Thickness.i > 31 ; Au delà, il y a tronquage de l'epaisseur (31 maxi) de la ligne et donc il y a un décalage.
        Thickness.i = 31
      EndIf
      
      ; Ligne.
      glColor4f_(Red(Color.i) / 255, Green(Color.i) / 255, Blue(Color.i) / 255, Alpha(Color.i) / 255) ; Couleur de la ligne, RGB Décimal.
      glLineWidth_(Thickness.i)                                                                       ; Epaisseur de la ligne.
      
      glBegin_(#GL_LINES)
      glVertex2f_(X1.i - 1, Y1.i + (Thickness.i / 2) - 1)
      glVertex2f_(X1.i - 1 + (X2.i - X1.i), Y1.i + (Y2.i - Y1.i) + (Thickness.i / 2) - 1)
      glEnd_()
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_DrawLine: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_DrawSquare(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      glColor4f_(Red(Color.i) / 255, Green(Color.i) / 255, Blue(Color.i) / 255, Alpha(Color.i) / 255) ; Couleur du dessin. RGB Décimal.
      
      glBegin_(#GL_QUADS)                                                                           ; Debut du polygone  
      glVertex2i_(X.i - 1, Y.i - 1)                                                                   ; Point haut gauche
      glVertex2i_(X.i - 1 + Width.i, Y.i - 1)                                                         ; Point haut droit
      glVertex2i_(X.i - 1 + Width.i, Y.i + Height.i - 1)                                              ; Point bas droit
      glVertex2i_(X.i - 1, Y.i + Height.i - 1)                                                        ; Point bas gauche
      glEnd_()     
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_DrawBox: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_DrawBox(OpenGLGadgetNumber.i, X.i, Y.i, Width.i, Height.i, Color.i, Thickness.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      If Thickness.i < 0
        Thickness.i = 1
      ElseIf Thickness.i > 31 ; Au delà, il y a tronquage de l'epaisseur (31 maxi) de la ligne et donc il y a un décalage.
        Thickness.i = 31
      EndIf
      
      ; Ligne.
      glColor4f_(Red(Color.i) / 255, Green(Color.i) / 255, Blue(Color.i) / 255, Alpha(Color.i) / 255) ; Couleur de la ligne, RGB Décimal.
      glLineWidth_(Thickness.i)                                                                       ; Epaisseur de la ligne.
      
      glBegin_(#GL_LINES)
      
      If Thickness.i > 1
        
        glVertex2f_(X.i - 1, Y.i + (Thickness.i / 2) - 1)
        glVertex2f_(X.i - 1 + Width.i, Y.i + (Thickness.i / 2) - 1)
        
        glVertex2f_(X.i - 1 + Width.i - (Thickness.i / 2), Y.i + Thickness.i - 1)
        glVertex2f_(X.i - 1 + Width.i - (Thickness.i / 2), Y.i + Height.i - 1)
        
        glVertex2f_(X.i - 1 + Width.i - Thickness.i, Y.i + Height.i - (Thickness.i / 2) - 1)
        glVertex2f_(X.i - 1, Y.i + Height.i - (Thickness.i / 2) - 1)
        
        glVertex2f_(X.i - 1 + (Thickness.i / 2), Y.i + Thickness.i - 1)
        glVertex2f_(X.i - 1 + (Thickness.i / 2), Y.i + Height.i - Thickness.i - 1)
        
      ElseIf Thickness.i = 1
        
        glVertex2f_(X.i - 1, Y.i + (Thickness.i / 2) - 1)
        glVertex2f_(X.i - 1 + Width.i, Y.i + (Thickness.i / 2) - 1)
        
        glVertex2f_(X.i - 1 + Width.i - (Thickness.i / 2), Y.i + Thickness.i)
        glVertex2f_(X.i - 1 + Width.i - (Thickness.i / 2), Y.i + Height.i)
        
        glVertex2f_(X.i - 1 + Width.i - Thickness.i, Y.i + Height.i - (Thickness.i / 2) - 1)
        glVertex2f_(X.i - 1, Y.i + Height.i - (Thickness.i / 2) - 1)
        
        glVertex2f_(X.i - 1 + (Thickness.i / 2), Y.i + Thickness.i)
        glVertex2f_(X.i - 1 + (Thickness.i / 2), Y.i + Height.i - Thickness.i)
        
      EndIf
      
      glEnd_()
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_DrawLine: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
  Procedure.b OpenGL_StopDrawing(OpenGLGadgetNumber.i)
    
    If IsGadget(OpenGLGadgetNumber.i)
      
      ; Pour afficher le contenu dans le gadget OpenGL.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_FlipBuffers, #True)
      
      ; Pour déactiver le contexte OpenGL du gadget car on a finie de dessiner dessus.
      SetGadgetAttribute(OpenGLGadgetNumber.i, #PB_OpenGL_SetContext, #False)
      
      ProcedureReturn #True
      
    Else
      Debug "OpenGL_StopDrawing: Le Gadget OpenGL n'est pas initialisé !"
      ProcedureReturn #False
      
    EndIf
    
  EndProcedure
  
EndModule
Dernière modification par Shadow le dim. 20/mars/2022 21:57, modifié 2 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Code : Tout sélectionner

; -------- Exemple 1 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

IncludeFile "SimplyOpenGL 2DDrawing.pbi"
UseModule SimplyOpenGL2DDrawing

UsePNGImageDecoder()
UseJPEGImageDecoder()

Enumeration
  #Window
  #OpenGLGadget1
  #OpenGLGadget2
  #OpenGLGadget3
  #OpenGLGadget4
EndEnumeration

Procedure MyDrawingOpenGL(OpenGLGadgetNumber.i)
  
  Static X.i
  
  If X.i < 50
    X.i + 1
  Else
    X.i = 0
  EndIf

  If OpenGL_StartDrawing(OpenGLGadgetNumber.i) ; Permet de commancer des oppérations de dessins sur le Gadget OpenGL.
    OpenGL_Clear(OpenGLGadgetNumber.i, RGB(225, 225, 225)) ; Efface le Gadget OpenGL avec la couleur 24 bit indiqué.
    OpenGL_DrawLine(OpenGLGadgetNumber.i, 10 + X.i, 10, 490, 10, RGBA(255, 175, 0, 150), 31) ; Dessine une ligne, X, Y, Largeur, Hauteur, couleur 32 bit, épaisseur de la ligne (1 - 32 pixel).
    OpenGL_DrawLineXY(OpenGLGadgetNumber.i, 10 + X.i, 10 + 31, 500, 10 + 31, RGBA(220, 0, 0, 150), 31) ; Dessine une ligne, X1, Y1, X2, Y2, couleur 32 bit, épaisseur de la ligne (1 - 32 pixel).
    OpenGL_DrawSquare(OpenGLGadgetNumber.i, 10 + X.i, 10 + 31 + 31, 200, 200, RGBA(0, 75, 0, 150)) ; Dessine un carré pleins, X, Y, Largeur, Hauteur, couleur 32 bit.
    OpenGL_DrawBox(OpenGLGadgetNumber.i, 210 + X.i, 10 + 31 + 31, 200, 200, RGBA(0, 0, 255, 150), 31) ; Dessine un carré vide, X, Y, Largeur, Hauteur, couleur 32 bit, épaisseur de la ligne (1 - 32 pixel).
    OpenGL_StopDrawing(OpenGLGadgetNumber.i) ; Pout terminer les oppérations de dessins sur le gadget.
  EndIf
  
EndProcedure

If OpenWindow(#Window, 0, 0, 1199, 799, "OpenGL Example 1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  If Not OpenGLGadget(#OpenGLGadget1, 1, 1, 598, 398)
    MessageRequester("Erreur...", "   Impossible de créer le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not OpenGLGadget(#OpenGLGadget2, 600, 1, 598, 398)
    MessageRequester("Erreur...", "   Impossible de créer le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not OpenGLGadget(#OpenGLGadget3, 1, 400, 598, 398)
    MessageRequester("Erreur...", "   Impossible de créer le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not OpenGLGadget(#OpenGLGadget4, 600, 400, 598, 398)
    MessageRequester("Erreur...", "   Impossible de créer le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not InitOpenGL(#OpenGLGadget1, RGB(150, 150, 150), #True)
    MessageRequester("Erreur...", "   Impossible d'initiatialiser le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not InitOpenGL(#OpenGLGadget2, RGB(200, 200, 200), #True)
    MessageRequester("Erreur...", "   Impossible d'initiatialiser le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not InitOpenGL(#OpenGLGadget3, RGB(150, 150, 150), #True)
    MessageRequester("Erreur...", "   Impossible d'initiatialiser le gadget OpenGL !", 16)
    End
  EndIf
  
  If Not InitOpenGL(#OpenGLGadget4, RGB(200, 200, 200), #True)
    MessageRequester("Erreur...", "   Impossible d'initiatialiser le gadget OpenGL !", 16)
    End
  EndIf
  
  ; Boucle pour dessoner sur le gadget OpenGL.
  Repeat
    
    ; Boucle des évènements de la fenêtre.
    Repeat
      
      Event = WaitWindowEvent(0)
      
      Select Event
          
        Case #PB_Event_CloseWindow
          Quit.b = #True
          
        Case #PB_Event_Gadget
          
      EndSelect
      
    Until Event = #PB_Event_None ; Quand ya plus d'évènements sur la fenêtre, on passe à la suite, au dessins.
    
    T1.i = ElapsedMilliseconds()
    ; Dessine sur les Gadgets OpenGL.
    MyDrawingOpenGL(#OpenGLGadget1)
    MyDrawingOpenGL(#OpenGLGadget2)
    MyDrawingOpenGL(#OpenGLGadget3)
    MyDrawingOpenGL(#OpenGLGadget4)
    T2.i = ElapsedMilliseconds()
    
    Loop.i + 1
    Time.i = T2.i - T1.i
    TotaleTimeLoop.i + Time.i
    TotaleTime.i + Time.i
    
    If Time.i > 0
      Fps.i = 1000 / Time.i
    EndIf
    
    If TotaleTimeLoop.i >= 1000
      
      TotaleTimeLoop.i = 0
      
      ClearDebugOutput()
      Debug Loop.i
      
      Loop.i = 0
      
    EndIf
    
  Until Quit.b = #True
  
EndIf
End
Dernière modification par Shadow le dim. 20/mars/2022 21:57, modifié 2 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Réservé.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: SimplyOpenGL2DDrawing

Message par Guillot »

intéressant
ça fait longtemps que je me dis qu'l y aurait peut etre moyen de refaire la lib VectorDrawing en opengl
tu prépare le terrain

est ce que quelqu'un sait si on peut récupérer dans une image le canevas du OpenGLGadget ?
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

Salut Guillot,

OpenGL est comme un canevas mais ce qui est géniale c'est que tu peu faire de la 3D avec !
Le Gadget gère tous les évènements comme si c'était un canevas donc c'est très prometteur, c'est pour ça que je me lance dedans !

Oui je prépares le terrain surement, et j'ai envie d'expérimenté à le faire moi même, avec de l'aide, mais moi même.
J'avance, mais sans retour c'est plus long !

Pour le moment j'y connait rien, mais avec ce que on me donne comme aide, je suis en train de réaliser un module
simplissime pour faire de la 2D avec OpenGL en me passant totalement de la bibliothèque 2DDrawing, mais similaire à elle.
Parce que je veux de la rapidité !

Comme je l'es dis, les deux bibliothèque ne semble pas prendre en charge le processeur graphique !
C'est très intéressant comme sujet, et ça m'occupe !

OpenGL, c'est un truc de malade, super compliquer, mais je pense que ça en vaut la peine de comprendre comment ça marche
car comme je l'est dis, c'est comme un gadget canevas, avec tous les évènements pris en charge, c'est ça qui est intéressant !
Et la gestion de la souris (Curseur) est facile comme dans un gadget Canevas !

Je m'attaque pour le moment à de la 2D, après on verras !
Mais je vais avoir besoin de retour et d'aide, comme l'as fais Falsam, c'est aussi grâce à lui que je peux me lancer là dedans !

Pour l'image, dans OpenGL, je ne sais pas, peut etre avec un truc du genre
"#PB_OpenGL_GetContext" ?, mais ya rien dans l'aide pour ça.

Je mettrais régulièrement des mise à jour, pour que tous le monde en profite, c'est un projet intéressant !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: SimplyOpenGL2DDrawing

Message par Ollivier »

@Guillot

on va tenter un code depuis le smartphoune pour donner une piste :

Code : Tout sélectionner

Procedure oglGet(x, y, w, h)
 Define *m = allocateMemory(4 * w * h)
 glReadPixels_(x, y, w, h, #GL_RGBA, #GL_UNSIGNED_BYTE, *m)
 ProcedureReturn *m
EndProcedure
C'est sensé stocker le rendu dans un tampon mémoire.

Par la même, un truc comme ça devrait fonctionner:

Code : Tout sélectionner

Procedure oglGetImage(x, y, w, h)
 Define im = CreateImage(#PB_Any, w, h, 32)
 StartDrawing(ImageOutput(im) )
 *m = DrawingBuffer()
 StopDrawing()
 glReadPixels_(x, y, w, h, #GL_RGBA, #GL_UNSIGNED_BYTE, *m)
 ProcedureReturn im
EndProcedure
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: SimplyOpenGL2DDrawing

Message par threedslider »

@Shadow : Pas mal du tout pour un début de ton projet :mrgreen: (tu apprends vite et tant mieux pour toi !). Pour le moment je peux dire que tes codes fonctionnent bien et garde bien ton projet cela pourrait être intéressant et je pourrais peut être contribuer aussi mais que j'apprends en même temps avec Purebasic ou même les autres pourront y contribuer aussi bien :P
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: SimplyOpenGL2DDrawing

Message par Shadow »

threedslider a écrit : mar. 15/mars/2022 12:05 @Shadow : Pas mal du tout pour un début de ton projet :mrgreen: (tu apprends vite et tant mieux pour toi !). Pour le moment je peux dire que tes codes fonctionnent bien et garde bien ton projet cela pourrait être intéressant et je pourrais peut être contribuer aussi mais que j'apprends en même temps avec Purebasic ou même les autres pourront y contribuer aussi bien :P
T'as qu'a apprendre l'OpenGL, ça me serais bien utile ça ^^
Merci pour le reste !

Pour le moment j'en suis pas satisfais même si ça marche, c'est qu'un prototype rien de plus.
Sans l'aide des copain ça va être hard...

Donc le module c'est peut etre moi mais sans l'aide des autres sur OpenGL, ça vaut rien.

Si personne ne veux aider, ça ira pas super vite !

C'est grâce à Falsam que j'ai pus commencer à faire ce module.
J'attends avec impatience la venue du grand manitou :mrgreen: , ou alors un autre ! :)

C'est un peu un projet communautaire là ce truc !
Si on ne me donne pas d'eau (Aide OpenGL) pour mon moulin (module) je vais pas pouvoir continuer je pense !

Pour le moment c'est pas trop ça, ya pleins de code brouillon des com à la pelle en veux tu en voilà...
J'en appel aux grands manitous au pluriels :lol:
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: SimplyOpenGL2DDrawing

Message par Micoute »

Si seulement j'avais 15 ans de moins, à cette époque j'avais à peine 60 ans et je bricolais encore bien avec PB, je faisais des exercices d'éveils pour mes petit-enfants qui ont bien grandit depuis, ça me permettait de puiser dans les ressources de PB et je suis bien loin d'en avoir fait le tour.

Tout ça pour dire que c'est dommage que toutes ces notions m'échappent peu à peu.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: SimplyOpenGL2DDrawing

Message par Guillot »

@ ollivier :
ça marche !
mais y'a une inversion des couleurs rouge bleu
chapeau bas pour ta capacité à faire du code sans erreur sans pouvoir le tester !

@ shadow :
coté programmation, dans un 1er temps ça ne devrai pas posé de gros probleme, c'est juste une interface
a mon avis, la difficulté se trouve au niveau de la compréhension d'opengl
là faut te trouver un bon site
en tout cas super initiative, ça fait longtemps que je me dis qu'il faudrait refaire la vector lib en opengl !
quand au grand manitou je crois qu'il a d'autres préoccupations !
Répondre