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

Contribuez Discussion :

Plugin OpenGL 64-bit


Sujet :

Contribuez

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut Plugin OpenGL 64-bit
    Bonjour.

    Ceci est un effet MATRIX OpenGL VS2022, dont l'original 32-bit a été codé en 2009 par Jürgen Huhn et moi-même pour le player audio BassBox basé sur Bass.dll.

    Les plugins OpenGL BassBox, sont de petites DLLs qui ont toutes le même point d'entrée, la fonction BBProc qui passe une structure contenant toutes les informations nécessaires pour échanger avec le programme appelant.

    Code : 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
    const int BBP_RENDER       = 1;       // Render the scene.
    const int BBP_CREATE       = 2;       // Retrieve Title, Name, Version, Render mode.
    const int BBP_INIT         = 3;       // Init the OpenGL.
    const int BBP_SIZE         = 4;       // The size of the control has changed.
    const int BBP_KEYBOARD     = 5;       // All keyborad message.
    const int BBP_MOUSE        = 6;       // All mouse messages.
    const int BBP_DESTROY      = 7;       // Free Up resources.
    const int BBP_NEWSOUND     = 8;       // We are playing a new sound file.
     
    const int BBP_GDIPLUS      = 0;       // GDImage GDIPLUS compatible mode.
    const int BBP_OPENGL       = 1;       // OpenGL mode.
    const int BBP_DIRECTX      = 2;       // DirectX mode (for future extension).
     
    const int BBP_SUCCESS      = 0;
    const int BBP_ERROR        = -1;
     
    typedef struct {
        UINT msg;                   // The plugin's message (see above constant list).
        HWND parent;                // The parent window handle.
        HDC dc;                     // The parent window DC (while in play mode).
        HGLRC rc;                   // The parent OpenGL RC (while in play mode).
        WORD lpeak;                 // The left audio channel peak value (while in play mode).
        WORD rpeak;                 // The right audio channel peak value (while in play mode).
        char title[32];             // Plugin's name or title.
        char author[64];            // Plugin's author name.
        DWORD version;              // LOWRD major, HIWRD minor.
        long renderto;              // BBP_GDIPLUS, BBP_OPENGL, BBP_DIRECTX.
        long backargb;              // Default ARGB color background.
        float* fftdata;             // dword pointer to the FFT() as single array.
        WORD fftsize;               // Size of the FFT array.
     
        UINT winmsg;                // True Windows message.
        WPARAM wparam;              // wParam
        LPARAM lparam;              // lParam
     
        short* wimdata;             // dword pointer to the wave MM_WIM_DATA.
        QWORD medialength;          // Media length.
        QWORD mediapos;             // Media pos.
     
        char reserved[50];          // Reserved for future extension.
    } BBPLUGIN;
    Les plugins sont conçus pour créer des effets visuels synchronisés sur un flux audio.

    Le projet MATRIX ci-joint est capable d'appeler n'importe quel plugin BassBox 64-bit.
    Il utilise, par défaut, une bande son de type "demoscene" pour solliciter au maximum l'amplitude du signal audio.
    Vous pouvez également jouer une musique de votre choix par tirer-déplacer depuis l'explorateur Windows.

    Le curseur horizontal, situé en bas de fenêtre, permet d'ajuster le volume sonore et d'interrompre/reprendre le flux audio.

    L'archive contient 2 projets :
    - bbp_matrix.7z (le code source du plugin)
    - Matrix.7z (le code source qui utilise le plugin bbp_matrix.dll)

    L'utilisation de GDImage et WinLIFT permet d'utiliser des controles graphiques composés, qui sont superposés directement sur la fenêtre OpenGL.
    Ce qui simplifie énormément la création d'interface OpenGL complexe combinant 2D et 3D.
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Août 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2024
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour Patrice

    Est-ce que vous avez d'autres plugins pour 64-bit ?
    Car ceux téléchargés avec le projet BassBox64 publié sur ce forum ne fonctionnent qu'en 32-bit.
    Encore merci pour vos contributions.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut
    Bonjour Bernard

    Je travaille actuellement sur les versions 64-bit, mais vous pouvez d'ores et déjà utiliser ceux de mon player multimédia MBox64 disponible sur www.objreader.com qui se trouve ici.

    Concernant le code source OpenGL des plugins je ne suis pas sûr de le poster sur ce forum, car je n'ai eu aucun retour des membres de cette communauté.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut
    Voici une nouvelle version qui comporte 12 plugins différents.

    Nom : plugin64.jpg
Affichages : 93
Taille : 117,8 Ko

    Pour changer de plugin, cliquer sur les flèches qui apparaissent sur les bords, lors du déplacement de la souris.

    Le tirer-déplacer depuis l'explorateur permet de tester les effets avec une musique de votre choix.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 210
    Points : 853
    Points
    853
    Par défaut
    pas trop fan du plugin "Fahrenheit 451" (je n'ai ni lu le livre, ni vu les adaptations)
    trop rapide je dirais
    c'est une barre de feu au gaz qui brûle en tournant ?
    perso, j'aurais préféré mieux voir les flammes (ou qu'elles restent plus longtemps visibles, là ça monte et descend trop rapidement)

    les autres plugins 👍

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut
    Xelland

    Merci pour votre retour, concernant les plugins certains sont plus réactifs que d'autres, et le rendu dépend surtout de la musique jouée.
    J'ai un plugin qui ressemble à la flamme d'une bougie, au besoin je peux le poster ici, si vous souhaitez le tester.

    Nom : candle.jpg
Affichages : 67
Taille : 294,4 Ko

    Il est basé sur le même principe que Fahrenheit avec un rendu adapté à l'éclairage d'une bougie.

  7. #7
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 210
    Points : 853
    Points
    853
    Par défaut
    Citation Envoyé par Patrice Terrier Voir le message
    Xelland

    Merci pour votre retour, concernant les plugins certains sont plus réactifs que d'autres, et le rendu dépend surtout de la musique jouée.
    je vois ça
    j'ai testé avec plusieurs musiques et en effet, le rendu change

    les plugins impulse, laser beam, oscilloscope, popup, vortex, cubic dream et bubble sont ceux qui réagissent le mieux à toutes sortes de musique


    pour the ring, j'ai l'anneau qui reste blanc pour les musiques suivantes :


    pour fahrenheit, le plugin est spécial pour les musiques suivantes (les musiques sont spéciales aussi ) :

    on perd presque l'effet flamme !
    en général, la flamme ne fait pas assez flamme, ça fait un peu trop stroboscope avec une fréquence trop rapide (avis perso)

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut
    Oui, pour The Ring je pense avoir corrigé le problème.
    Par la même occasion j'ai ajouté bbp_Candle.dll qui créé l'effet de bougie.

    Vous devez remplacer le contenu de \BBplugin par celui contenu dans l'archive.

    Si vous maitrisez OpenGL, le code source de tous les plugins est disponible sur mon forum privé (car c'est trop gros pour poster ici tous les projet VS 2022 des différentes DLLs).
    De cette façon vous pourrez modifier le code pour l'adapter selon vos besoins ou préférences.
    Voici comment faire pour vous enregistrer.

    J'ai ajouté en pièce jointe quelques fichiers .mod de ma collection perso, chez moi ils rendent très bien avec Fahrenheit.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 210
    Points : 853
    Points
    853
    Par défaut
    Citation Envoyé par Patrice Terrier
    Oui, pour The Ring je pense avoir corrigé le problème.
    c'est mieux 👍

    pour les morceaux pré-cités :
    avant correction : tout le temps blanc
    après correction : ça commence en couleur et ça redevient blanc dans certains cas (je reviendrais poster dès que je trouve les conditions de survenance)


    Citation Envoyé par Patrice Terrier
    Par la même occasion j'ai ajouté bbp_Candle.dll qui créé l'effet de bougie.
    non concluant
    je pense que ma carte graphique ne supporte pas une fonction OpenGL (ou un bug ?)
    car je devine la bougie à gauche : j'ai un rectangle blanc pour la bougie et un rectangle blanc pour la flamme
    le reste de l'écran, c'est une sorte de halo jaune-vert-violet

    ma CG supporte OpenGL 3.3, mais pas au-dessus (peut-être la cause ?)
    je vais tester sur un autre poste un peu plus récent

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 553
    Points : 968
    Points
    968
    Par défaut
    Normalement le code devrait être compatible OpenGL 2.0+

    Sur mes configurations nVidia, l'effet de bougie est très réaliste.

    Vérifiez que vous avez bien les textures correspondantes dans votre dossier \BBplugin\Texture
    à savoir :
    BKG_Candle.jpg
    Candle.png
    Flame.png


    Plugin64.exe utilise un context WGL pour la création de la fenêtre (dans GDImage64.dll)

    Code : 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
    HWND WGL_CreateWindow (IN DWORD dwExStyle, IN DWORD dwStyle,
                           IN long x, IN long y, IN long nWidth, IN long nHeight,
                           IN HWND hWndParent, IN HMENU CtrlID) { // dllexport
     
        HWND hWnd = 0;
     
        HWND hTemp = CreateWindowEx(dwExStyle, GLImageClassName, $NULL, dwStyle, 0, 0, 0, 0, hWndParent, CtrlID, zInstance(), NULL);
        if (hTemp) {
            HDC glDC = (HDC) ZI_GetProperty(hTemp, ZI_GLDC);
            HGLRC glRC = (HGLRC) ZI_GetProperty(hTemp, ZI_GLRC);
     
            PIXELFORMATDESCRIPTOR pfd = { 0 };
     
            pfd.nSize              = sizeof(pfd);
            pfd.nVersion           = 1;
            pfd.dwFlags            = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_SUPPORT_GDI | PFD_SUPPORT_COMPOSITION;
            pfd.iPixelType         = PFD_TYPE_RGBA;
            pfd.cColorBits         = 32;
            pfd.cAlphaBits         = 1;
            pfd.cDepthBits         = 24; // 16;
            pfd.iLayerType         = PFD_MAIN_PLANE;
     
            InitMultisample(glDC, &pfd);
     
            if (gI.arbMultisampleFormat) {
                WCHAR szWindowClass[] = L"GL_CHARTCTRL";
                WNDCLASSEX wcx = {0};
                wcx.cbSize = sizeof(wcx);
                long IsInitialized = GetClassInfoEx(zInstance(), szWindowClass, &wcx);
                if (!IsInitialized) {
                    wcx.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_OWNDC;
                    wcx.lpfnWndProc   = GL_WindowProc;
                    wcx.cbClsExtra    = 0;
                    wcx.cbWndExtra    = Extend_cbWndExtra * sizeof(LONG_PTR);
                    wcx.hInstance     = zInstance();
                    wcx.hIcon         = NULL;
                    wcx.hCursor       = LoadCursor(NULL, IDC_ARROW);
                    wcx.hbrBackground = NULL;
                    wcx.lpszMenuName  = NULL;
                    wcx.lpszClassName = szWindowClass;
                    wcx.hIconSm       = NULL;
                    if (RegisterClassEx(&wcx)) { IsInitialized = TRUE; }
                }
     
                if (IsInitialized) {
                    hWnd = CreateWindowEx(dwExStyle,
                                          szWindowClass,// Make it an OpenGL control
                                          $NULL,         // Currently not used
                                          dwStyle,       // window style
                                          x,             // initial x position
                                          y,             // initial y position
                                          nWidth,        // Calculate Window Width
                                          nHeight,       // Calculate Window Height
                                          hWndParent,    // parent window handle
                                          CtrlID,        // ControlID
                                          zInstance(),   // program instance handle
                                          NULL);         // creation parameters
                    if (hWnd) {
                        glDC = GetDC(hWnd);
                        if (SetPixelFormat(glDC, gI.arbMultisampleFormat, &pfd)) {
                            DestroyWindow(hTemp);
                            glRC = wglCreateContext(glDC);
                            wglMakeCurrent(glDC, glRC);
                            ZI_SetProperty(hWnd, ZI_GLDC, (LONG_PTR) glDC);
                            ZI_SetProperty(hWnd, ZI_GLRC, (LONG_PTR) glRC);
                        } else {
                            DestroyWindow(hWnd);
                            MoveWindow(hTemp, x, y, nWidth, nHeight, 0);
                            hWnd = hTemp;
                        }
                    }
                }
            } else {
                MoveWindow(hTemp, x, y, nWidth, nHeight, 0);
                hWnd = hTemp;
            }
        }
        return hWnd;
    }

  11. #11
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 210
    Points : 853
    Points
    853
    Par défaut
    Citation Envoyé par Patrice Terrier Voir le message
    Vérifiez que vous avez bien les textures correspondantes dans votre dossier \BBplugin\Texture
    à savoir :
    BKG_Candle.jpg
    Candle.png
    Flame.png
    c'était ça
    merci

    maintenant, on voit mieux la bougie 👍

Discussions similaires

  1. [XL-2013] [64 bit] Excel VBA & OpenGL
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 19/06/2013, 21h23
  2. Réponses: 1
    Dernier message: 08/01/2010, 14h28
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31
  5. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48

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