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

API graphiques Discussion :

Demande d'explication sur du code GLFW


Sujet :

API graphiques

  1. #1
    Membre averti
    Homme Profil pro
    Licence Info Maths
    Inscrit en
    Décembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Licence Info Maths

    Informations forums :
    Inscription : Décembre 2019
    Messages : 12
    Par défaut Demande d'explication sur du code GLFW
    Bonjour,
    j'aurai voulu avoir quelques explications concernant ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void initWindow() {
        glfwInit();
     
        glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
     
        window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
        glfwSetWindowUserPointer(window, this);
        glfwSetFramebufferSizeCallback(window, framebufferResizeCallback);
    }
     
    static void framebufferResizeCallback(GLFWwindow* window, int width, int height) {
        auto app = reinterpret_cast<HelloTriangleApplication*>(glfwGetWindowUserPointer(window));
        app->framebufferResized = true;
    }
    C'est celui du tutoriel vulkan dispo ici : https://vulkan-tutorial.com/code/16_...recreation.cpp

    Principalement concernant "glfwSetWindowUserPointer(window, this);" , le tutoriel indique :
    Nous devons utiliser une fonction statique car GLFW ne sait pas correctement appeler une fonction membre d'une classe avec this.

    Nous récupérons une référence à la GLFWwindow dans la fonction de rappel que nous fournissons. De plus nous pouvons paramétrer un pointeur de notre choix qui sera accessible à toutes nos fonctions de rappel. Nous pouvons y mettre la classe elle-même.
    Mais du coup je ne comprend pas leurs explications.

    Et enfin, "auto app = reinterpret_cast<HelloTriangleApplication*>(glfwGetWindowUserPointer(window));" qui m'est incompréhensible .

    Par avance, merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 164
    Billets dans le blog
    4
    Par défaut
    Salut,

    GLFW est une API C et fonctionne avec des callbacks branchées sur les évènements, et permet de passer un pointeur à celles-ci.
    Ces fonctions callback ont des signatures comme void function(params) alors que les fonctions membres en C++ ont une signature du genre void Class::function(params).
    Une fonction callback dans une classe doit être static pour avoir une signature qui match.
    Quand la callback est enregistrée, on utilise l'instance comme pointeur qui sera transmis. Et dans les callback on cast ce pointeur générique void* en instance de la classe attendue. Et cette opération se fait via un simple reinterpret_cast.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Licence Info Maths
    Inscrit en
    Décembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Licence Info Maths

    Informations forums :
    Inscription : Décembre 2019
    Messages : 12
    Par défaut
    Je comprend pas exactement ce que font les deux fontions glfwSet et GetWindowUserPointer();

    Set
    This function sets the user-defined pointer of the specified window. The current value is retained until the window is destroyed. The initial value is NULL.
    Get
    This function returns the current value of the user-defined pointer of the specified window. The initial value is NULL.
    Qu'entendent-t-ils par user-defined pointer et initial value ?

    Merci pour ta réponse en tout cas

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 164
    Billets dans le blog
    4
    Par défaut
    Une simple traduction fait l'affaire...
    GLFW te permet de lier un pointeur à une fenêtre. Et bien sûr de la récupérer. La valeur par défaut est NULL.
    Histoire de pouvoir relier ton code au code de la lib.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    Licence Info Maths
    Inscrit en
    Décembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Licence Info Maths

    Informations forums :
    Inscription : Décembre 2019
    Messages : 12
    Par défaut
    Je débute, je ne savais pas si il y avait quelque chose que je ne comprenais pas. Je préfèrais être fixé.

    Cependant "this" est le pointeur de l'objet dans lequel on se trouve si j'ai bien compris. Du coup glfwSetWindowUserPointer(window, this) donne a window le même pointeur que celui de HelloTriangleApplication app non ?

    Je comprend pas vraiment l'utilité du coup de : auto app = reinterpret_cast<HelloTriangleApplication*>(glfwGetWindowUserPointer(window));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Demande d'explication sur ce code
    Par lilp1 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/06/2009, 17h58
  2. demande d'explication sur un code
    Par Zilfi63 dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/06/2009, 18h05
  3. [MySQL] demande d'explication sur un code
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/05/2008, 23h17
  4. demande d'explication sur du code
    Par olaxius dans le forum wxPython
    Réponses: 2
    Dernier message: 17/01/2008, 09h40

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