我想一起使用GTK +和SFML 2.0。我創建了一個簡單的窗口來測試,但效果不佳。精靈模糊。下面是描述問題的屏幕截圖。 /編輯: 該窗口僅渲染紋理的第一個像素。GTK和SFML 2模糊的精靈
它應該是這樣的:
代碼:
#include <gtk/gtk.h>
#include <SFML/Graphics.hpp>
#include <gdk/gdkwin32.h>
sf::RenderWindow Win;
sf::Sprite tile[ MAP_SIZE ][ MAP_SIZE ];
void on_expose(GtkWidget * widget, gpointer data)
{
MapView * view =(MapView *) data;
sf::Event event;
while(Win.pollEvent(event))
{
if(event.type == sf::Event::Closed)
Win.close();
view->updateEvents(& event, Win);
}
Win.clear(sf::Color::White);
view->render(tile, Win);
Win.display();
gtk_widget_queue_draw(widget);
}
int main(int argc, char ** argv)
{
sf::Texture tex; // Testing texture
if(!tex.loadFromFile("gfx/7.png"))
std::cout << "Unable to load texture!\n";
for(int i = 0; i < MAP_SIZE; ++i)
for(int j = 0; j < MAP_SIZE; ++j)
tile[ j ][ i ].setTexture(tex); // Default texture, a.k.a MAP_NONE
MapView view(tile, sf::Vector2f(0, 0));
gtk_init(& argc, & argv);
GtkWidget * window;
GtkWidget * area;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
area = gtk_drawing_area_new();
gtk_container_add(GTK_CONTAINER(window), area);
GdkEventMask mask;
mask = GDK_ALL_EVENTS_MASK;
gtk_widget_add_events(area, mask);
gtk_widget_set_can_focus(area, true);
gtk_widget_set_size_request(area, 16 * 25, 16 * 25); // Preview size.
gtk_widget_realize(area);
gtk_widget_set_double_buffered(area, false);
Win.create(sf::WindowHandle(GDK_WINDOW_HWND(area->window))); // Windows-only solution
Win.setFramerateLimit(30);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(area, "expose-event", G_CALLBACK(on_expose), & view);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
您能否提供顯示您所描述問題的屏幕截圖?你提到「精靈模糊」,但在你的屏幕截圖中根本沒有任何精靈。另外,我建議您將代碼示例減少到重現此問題所需的最少量代碼。這個'MapView'類不需要。 –
如果您生成一個只將單個圖像繪製到「RenderTarget」的例子,該怎麼辦?這樣我們可以繼續專注於SFML + GTK問題... –