Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - dl

Pages: [1]
1
Ah ok je vais essayer comme ça.
merci bien

2
Bonjour,

Je n'ai pas trouvé comment récupérer les chunk audio lus par une sf::Music.
Je code une application qui dessine en fonction de la musique.
Depuis un sf::SoundBuffer, on a accès directement aux données.
Avec un sf::SoundRecorder, on redéfinit la méthode OnProcessSamples.
Il y a peut-être une astuce qui m'échappe, mais en tout cas il me semble que ça serait bien pratique d'avoir l'équivalent dans la classe sf::Music.

Merci
damien

3
Okay,

ça marche en insérant la définition de la table d'événements dans le wxSFMLCanvas.cpp :
Citer
BEGIN_EVENT_TABLE(wxSFMLCanvas, wxControl)
    EVT_IDLE(wxSFMLCanvas::OnIdle)
    EVT_PAINT(wxSFMLCanvas::OnPaint)
END_EVENT_TABLE()

Merci pour ces réponses rapides et efficaces !!

4
Ah oui en effet. Merci !

Cependant les problèmes continuent :

Citer
obj/Debug/MainFrame.o:(.rodata._ZTV8MyCanvas[vtable for MyCanvas]+0x2c)||undefined reference to `wxSFMLCanvas::GetEventTable() const'|
obj/Debug/MainFrame.o:(.rodata._ZTV8MyCanvas[vtable for MyCanvas]+0x30)||undefined reference to `wxSFMLCanvas::GetEventHashTable() const'|
obj/Debug/wxSFMLCanvas.o:(.rodata._ZTV12wxSFMLCanvas[vtable for wxSFMLCanvas]+0x2c)||undefined reference to `wxSFMLCanvas::GetEventTable() const'|
obj/Debug/wxSFMLCanvas.o:(.rodata._ZTV12wxSFMLCanvas[vtable for wxSFMLCanvas]+0x30)||undefined reference to `wxSFMLCanvas::GetEventHashTable() const'|
obj/Debug/wxSFMLCanvas.o:(.rodata._ZTV12wxSFMLCanvas[vtable for wxSFMLCanvas]+0x284)||undefined reference to `wxSFMLCanvas::OnUpdate()'|
||=== Build finished: 5 errors, 0 warnings (0 minutes, 7 seconds) ===|

si je commente DECLARE_EVENT_TABLE() dans la classe wxSFMLCanvas, le programme s'exécute, mais rien ne se dessine.

y a-t-il un remède ?


5
Bonjour tout le monde,

Je me casse la tête sur un pb pour lequel je ne trouve pas de solution sur un forum, et qui par conséquent vaut peut-être le coup d'être exposé.

J'essaie d'utiliser une sf::RenderWindow dans une interface wxWidgets. Pour ça, j'ai suivi le tuto proposé là: http://www.sfml-dev.org/tutorials/1.6/graphics-wxwidgets-fr.php.
N'étant pas très fort en compilation, je bloque sur le message d'erreur:
Citer
/home/damien/Bureau/cpp/test-wx/wxSFMLCanvas.cpp||In member function ‘void wxSFMLCanvas::OnPaint(wxPaintEvent&)’:|
/home/damien/Bureau/cpp/test-wx/wxSFMLCanvas.cpp|53|error: invalid use of incomplete type ‘struct Display’|
/usr/include/X11/Xlib.h|263|error: forward declaration of ‘struct Display’|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 2 seconds) ===|

Je compile avec Code::Blocks sous Debian. J'utilise la SFML 2.0 et wxWidget 2.8.

Si quelqu'un a une idée... mes cheveux lui rendront grâce avant que je me les arrache...

Voici mes fichiers éventuellement problématiques, réalisés en faisant des copiers-collers depuis le tuto:

wxSFMLCanvas.h
============
Citer
#ifndef WXSFMLCANVAS_H
#define WXSFMLCANVAS_H

#include <SFML/Graphics.hpp>
#include <wx/wx.h>

class wxSFMLCanvas : public wxControl, public sf::RenderWindow
{
public :

    wxSFMLCanvas(wxWindow* Parent = NULL, wxWindowID Id = -1, const wxPoint& Position = wxDefaultPosition,
                 const wxSize& Size = wxDefaultSize, long Style = 0);

    virtual ~wxSFMLCanvas();

private :

    DECLARE_EVENT_TABLE()

    virtual void OnUpdate();

    void OnIdle(wxIdleEvent&);

    void OnPaint(wxPaintEvent&);

    void OnEraseBackground(wxEraseEvent&);
};

#endif // WXSFMLCANVAS_H

wxSFMLCanvas.cpp
==============
Citer
#include "wxSFMLCanvas.h"

#ifdef __WXGTK__
    #include <gdk/gdkx.h>
    #include <gtk/gtk.h>
    #include <wx/gtk/win_gtk.h>
#endif

wxSFMLCanvas::wxSFMLCanvas(wxWindow* Parent, wxWindowID Id, const wxPoint& Position, const wxSize& Size, long Style) :
wxControl(Parent, Id, Position, Size, Style)
{
    #ifdef __WXGTK__

        // La version GTK requiert d'aller plus profondément pour trouver
        // l'identificateur X11 du contrôle
        gtk_widget_realize(m_wxwindow);
        gtk_widget_set_double_buffered(m_wxwindow, false);
        GdkWindow* Win = GTK_PIZZA(m_wxwindow)->bin_window;
        XFlush(GDK_WINDOW_XDISPLAY(Win));
        sf::RenderWindow::create(GDK_WINDOW_XWINDOW(Win));

    #else

        // Testé sous Windows XP seulement (devrait fonctionner sous X11 et
        // les autres versions de Windows - aucune idée concernant MacOS)
        sf::RenderWindow::Create(GetHandle());

    #endif
}

wxSFMLCanvas::~wxSFMLCanvas()
{
    //dtor
}

void wxSFMLCanvas::OnIdle(wxIdleEvent&)
{
    // On génère un rafraîchissement du contrôle, afin d'assurer un framerate maximum
    // La fonction Refresh est définie dans wxControl, et génère (entre autres) un évènement paint pour rafraîchir le contrôle.
    Refresh();
}

void wxSFMLCanvas::OnPaint(wxPaintEvent&)
{
    // On prépare le contrôle à être dessiné (verrouillage de la zone graphique)
    wxPaintDC Dc(this);

    // On laisse la classe dérivée se mettre à jour et dessiner dans le contrôle
    OnUpdate();

    // On affiche tout ça à l'écran
    Display();
}

Pages: [1]
anything