Madness Opublikowano 4 Sierpnia 2014 Udostępnij Opublikowano 4 Sierpnia 2014 Wielokrotnie poległem na łączeniu tych dwóch bibliotek, ale na forum sfml'a udało mi się znaleźć kod który mi w tym pomógł. Po paru poprawkach, aplikacja skompilowała się. Napotkałem jednak dziwaczny problem, pomimo tego że mogę sobie rysować co chce poprzez sfml'a, to wygląda to tak: (Standardowa tekstura 128x128 z ikoną Code::Blocks'a i window.clear(sf::Color::Black)) Kolor tła mogę zmieniać na całej powierzchni, ale rysować niestety tylko na takiej (na dole, po lewej widać czerwony kwadrat to właśnie ten kawałek tekstury). Jakieś pomysły ? #include <wx/wx.h> #include <SFML/Graphics.hpp> #ifdef __WXGTK__ #include <gdk/gdkx.h> #include <gtk/gtk.h> #include <gdk/gdkprivate.h> #include <gtk/gtkwidget.h> #endif class SFMLRenderWindow : public wxControl, public sf::RenderWindow { public: sf::Texture tex; sf::Sprite spr; sf::View view; sf::RenderTexture rt; SFMLRenderWindow(wxWindow * parent, int id) : wxControl(parent,id) { //wxControl(parent,id); #ifdef __WXGTK__ gtk_widget_realize(m_wxwindow); gtk_widget_set_double_buffered(m_wxwindow, false); GdkWindow* Win = gtk_widget_get_window(m_wxwindow); XFlush(GDK_WINDOW_XDISPLAY(Win)); sf::RenderWindow::Create(GDK_WINDOW_XWINDOW(Win)); #else sf::ContextSettings settings; settings.depthBits = 32; settings.antialiasingLevel = 6; sf::RenderWindow::create(GetHandle(),settings); #endif sf::RenderWindow::setSize(sf::Vector2u(800,600)); Bind(wxEVT_PAINT, &SFMLRenderWindow::onPaint, this); Bind(wxEVT_ERASE_BACKGROUND, &SFMLRenderWindow::onEraseBackground, this); Bind(wxEVT_IDLE, &SFMLRenderWindow::onIdle, this); Bind(wxEVT_KEY_DOWN, &SFMLRenderWindow::onKeyDown, this); tex.loadFromFile("cb.bmp"); tex.setRepeated(true); spr.setTexture(tex); // view.setCenter(0,0); // view.setViewport(sf::FloatRect(0.0f,0.0f,1.0f,1.0f)); // rt.create(800,600,true); // rt.clear(); // spr.setTexture(rt.getTexture()); //setView(view); } ~SFMLRenderWindow() {} void onPaint(wxPaintEvent& e) { wxPaintDC(this); sf::RenderWindow::setActive(); //sf::RenderWindow::resetGLStates(); sf::RenderWindow::clear(sf::Color::Black); sf::RenderWindow::draw(spr); spr.move(-0.01f,-0.01f); sf::RenderWindow::display(); } void onEraseBackground(wxEraseEvent& e) { // Do nothing } void onIdle(wxIdleEvent& e) { Refresh(); } void onKeyDown(wxKeyEvent& e) { if (e.GetKeyCode() == WXK_F11) { printf("F11"); } else e.Skip(); } }; // Test application class wxMiniApp : public wxApp { public: virtual bool OnInit(); }; IMPLEMENT_APP(wxMiniApp) bool wxMiniApp::OnInit() { wxFrame* frame = new wxFrame(NULL, -1, "SFML RenderWindow", wxDefaultPosition, wxSize(800, 600)); new SFMLRenderWindow(frame, -1); frame->Show(); return true; } EDIT: Dobra, udało mi się. Odpowiednio pomieszałem kod z tutka dla SFML 1.6 z powyższym i działa jak trzeba. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szavi3r Opublikowano 30 Września 2014 Udostępnij Opublikowano 30 Września 2014 Podpowiesz, jak dokładniej udało Ci się rozwiązać ten problem? Robię coś podobnego i nie wychodzi... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Madness Opublikowano 1 Października 2014 Autor Udostępnij Opublikowano 1 Października 2014 Jak mi komputer wróci z naprawy, podeśle Ci kod :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się