System operacyjny: Linux (Ubuntu, Debian, Kali)
Program VGE Resources pozwala tworzyć i zarządzać zasobami: plikami graficznymi, tekstowymi, dźwiękowymi i binarnymi. Powstał z myślą o tworzeniu gier video, ale sprawdza się także w przypadku aplikacji desktopowych - wszędzie tam gdzie istnieje potrzeba spakowania plików zasobów do plików binarnych.
Do programu dołączona jest biblioteka umożliwiająca łatwe wczytywania zasobów w programach napisanych w C i C++.
Dodatkowo zawiera cztery przykłady jej użycia - pierwszy to aplikacja uruchamiana w terminalu, drugi to program w GTK+ 3.0,
trzeci to program w GTK+ 3.0 wykorzystujący widget GtkGLArea do rysowania obiektów 3d, czwarty to aplikacji wykorzystująca biblioteki Vulkan+XCB.
Na poniższym listingu przedstawiono najkrótsze możliwe użycie biblioteki. Linijki odnoszące się do funkcji ładowania i zwalniania zasobów zapisano drukiem pogrubionym.
#include <stdlib.h>
#include <stdio.h>
#include "../lib/vge-resources/include/vge-resources.h"
int main(int argc, char *argv[]) {
char *buffer;
size_t buffer_size;
if (get_resource_by_name("resources.db", "test.txt", &buffer, &buffer_size, -1) == 0) {
printf("Text from the resources: %s\n", buffer);
printf("Returned size: %lu\n", buffer_size);
printf("strlen of the text: %lu\n", strlen(buffer));
printf("last byte: %d\n", buffer[buffer_size]);
free(buffer);
}
return 0;
}
I poniżej przykład najprostszej aplikacji okienkowej:
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
#include "../lib/vge-resources/include/vge-resources.h"
int main(int argc, char *argv[]) {
gchar *buffer;
gsize buffer_size;
GdkPixbufLoader *loader;
GdkPixbuf *pixbuf;
GtkWidget *window, *scrolled_window;
GtkWidget *image;
gtk_init (&argc, &argv);
if (get_resource_by_name("resources_gtk.db", "mms_img31238.jpg", &buffer, &buffer_size, -1) == 0) {
loader = gdk_pixbuf_loader_new();
gdk_pixbuf_loader_write(loader, buffer, buffer_size, NULL);
pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
free(buffer);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 900, 700);
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
image = gtk_image_new_from_pixbuf(pixbuf);
gtk_container_add(GTK_CONTAINER(window), scrolled_window);
gtk_container_add(GTK_CONTAINER(scrolled_window), image);
gtk_widget_show_all(GTK_WIDGET(window));
g_signal_connect(window, "destroy", gtk_main_quit, NULL);
gtk_main();
}
return 0;
}
Trzecim przykładem załączonym do archiwum z programem jest demonstracja animacji i użycia zasobów w aplikacji napisanej w bibliotece Vulkan. Ze względu na długi kod źródłowy nie zamieszczam go na tej podstronie.