IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Question sur l'utilisation d'un objet framebuffer


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    programmeur
    Inscrit en
    Septembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : programmeur

    Informations forums :
    Inscription : Septembre 2019
    Messages : 1
    Par défaut Question sur l'utilisation d'un objet framebuffer
    Bonjour,
    excusez s'il vous plaît mon mauvais français.
    J'ai téléchargé à partir de la page "https://arkham46.developpez.com/articles/office/vbaopenglext/?page=page_4" l'exemple d'OpenGL pour les shaders en VB6 et adapté et étendu à mes besoins. Cela fonctionne à merveille.
    Mais j'ai un problème avec le framebuffer.
    Je crée un framebuffer avec la fonction suivante:

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub InitFBO()
     glGenFramebuffersEXT 1, fbo
      glBindFramebufferEXT GL_FRAMEBUFFER_EXT, fbo
      glGenRenderbuffersEXT 1, depthbuffer
      glBindRenderbufferEXT GL_RENDERBUFFER_EXT, depthbuffer
      glRenderbufferStorageEXT GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, 512, 512
      glFramebufferRenderbufferEXT GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer
     
      glGenTextures 1, tex
      glBindTexture GL_TEXTURE_2D, tex
      glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
      glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
      glTexImage2D GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, ByVal 0
      glFramebufferTexture2DEXT GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0
      Debug.Print CheckFBO()
      glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
    End Sub
     
    Private Function CheckFBO() As String
     
    Dim FBOerror As Long
      FBOerror = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
    Select Case FBOerror
    Case GL_FRAMEBUFFER_COMPLETE_EXT
          CheckFBO = "good"
    Case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
          CheckFBO = "Incomplete attachment"
    Case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT
        CheckFBO = "Missing attachment"
    Case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
          CheckFBO = "Incomplete dimensions"
    Case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
          CheckFBO = "Incomplete formats"
    Case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
           CheckFBO = "Incomplete draw buffer"
    Case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
          CheckFBO = "Incomplete read buffer"
    Case GL_FRAMEBUFFER_UNSUPPORTED_EXT
           CheckFBO = "Framebufferobjects unsupported"
    Case Else
                 CheckFBO = "poor"
    End Select
    End Function

    La fonction retourne "good", donc tout va bien.
    Ensuite, je veux dessiner dans le framebuffer la texture "tex" avec un shader, puis utiliser "tex" comme texture pour le second shader. Mais ça ne marche pas. Seule une image noire est affichée. Voici le code:

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    ' Rendu de la scène
    Public Sub Render()
    Dim u_Time As Long
    Dim u_Resolution As Long
    Dim geradezeit As Long
    Dim differenzLong As Long
    Dim differenzSingle As Single
    Dim teststring As String
    Dim u_Channel0 As Long
     
     
    glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
     
    glBindFramebufferEXT GL_FRAMEBUFFER_EXT, fbo 'bind
      glPushAttrib GL_VIEWPORT_BIT
      glViewport 0, 0, 512, 512
     
    glUseProgram BufferAProg
      glRectf -1#, -1#, 1#, 1#
      glClearColor 1, 0, 0, 0
     
     
     
    teststring = "u_Time"
    teststring = StrConv(teststring, vbFromUnicode)
    u_Time = glGetUniformLocation(BufferAProg, StrPtr(teststring))
    geradezeit = GetTickCount
    differenzLong = geradezeit - Startzeit
    differenzSingle = CSng(differenzLong / 1000)
    If iTime >= 0 Then
    glUniform1f u_Time, differenzSingle
    End If
     
    teststring = "u_Resolution"
    teststring = StrConv(teststring, vbFromUnicode)
    iResolution = glGetUniformLocation(BufferAProg, StrPtr(teststring))
    If u_Resolution >= 0 Then
    glUniform3f u_Resolution, CSng(512), CSng(512), CSng(1)  '640/360
    End If
     
    glUseProgram 0&
    glPopAttrib
     
     
      glBindFramebufferEXT GL_FRAMEBUFFER_EXT, 0
     
    glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
     
      glPushAttrib GL_VIEWPORT_BIT
      glViewport 0, 0, 512, 512
     
    glUseProgram GrundProg
      glRectf -1#, -1#, 1#, 1#
     
    teststring = "u_Time"
    teststring = StrConv(teststring, vbFromUnicode)
    u_Time = glGetUniformLocation(GrundProg, StrPtr(teststring))
    geradezeit = GetTickCount
    differenzLong = geradezeit - Startzeit
    differenzSingle = CSng(differenzLong / 1000)
    If iTime >= 0 Then
    glUniform1f u_Time, differenzSingle
    End If
     
    teststring = "u_Resolution"
    teststring = StrConv(teststring, vbFromUnicode)
    u_Resolution = glGetUniformLocation(GrundProg, StrPtr(teststring))
    If iResolution >= 0 Then
    glUniform3f u_Resolution, CSng(512), CSng(512), CSng(1)  '640/360
    End If
    teststring = "u_Channel0"
    teststring = StrConv(teststring, vbFromUnicode)
    u_Channel0 = glGetUniformLocation(GrundProg, StrPtr(teststring))
    If u_Channel0 >= 0 Then
     
    glUniform1i u_Channel0, 0
    glActiveTexture GL_TEXTURE0
    glBindTexture GL_TEXTURE_2D, tex
     
    End If
     
    glUseProgram 0&
    glPopAttrib
     
    End Sub

    Lorsque j'utilise les shaders individuels sans framebuffer, ils fonctionnent correctement et les autres textures des fichiers sont affichées correctement. Est-ce que quelqu'un peut m'aider sur le saut ??
    Je suis débutant sous OpenGL et je ne connais pas grand chose. Je serais reconnaissant pour toute aide.

    Alfred

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Dans votre second code, je ne vois pas de code pour déssiner, ne serait-ce qu'un carré/texture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Question sur l'utilisation de wget
    Par berry dans le forum Réseau
    Réponses: 7
    Dernier message: 24/05/2007, 22h46
  2. question sur l'utilisation d'une listBox
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 17h57
  3. Question sur l'utilisation du mot réservé static
    Par flash2590 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 00h20
  4. [Framework] Questions sur l'utilisation de spring
    Par mlequim dans le forum Spring
    Réponses: 10
    Dernier message: 01/02/2006, 15h27
  5. Réponses: 2
    Dernier message: 17/03/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo