Laboratorium Komputerowe Progmar
Marcin Załęczny

Na stronie używamy cookies. Korzystając z witryny wyrażasz zgodę na ich wykorzystywanie.      Zamknij

VGE Resources

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.

Nowości w wersji: v1.4

  • Usunięty autozapis zasobu po jego transformacji.
  • Dodane okienko dialogowe pozwalające na edycję mapy textur przy pomocy drag & drop poszczególnych tekstur. Istnieje tu także możliwość usuwania tekstur, zmiany ich kolejnościr oraz edycji ich podstawowych właściwości.
  • Poprawiony błąd podczas blitowania obrazków wychodzących poza wymiary canvasu docelowego.
  • Przycisk zapisujący zasób, po wygenerowaniu nowej mapy tekstur oraz jej pliku opisowego json, zapisuje zawartość json w slocie głównym (slot 0) a wygenerowany obrazek z mapą zapisuje w slocie pierwszym (slot 1).

Nowości w wersji: v1.3

  • Dodanie rysowania bitmap z uwzględnieniem transparentnych pikseli.
  • Dodane opcje w pliku opisu json:
    • draw_with_alpha - jeśli równe 0 to do rysowania wywoływana jest funkcja blit_canvas (brak uwzględniania transparentności - wartość domyślna) w przeciwnym razie wywoływana jest funkcja blit_canvas_with_alpha (uwzględniająca transparentność),
    • visible - jeśli równe 1 (domyślnie) to obiekt jest rysowany w przeciwnym razie jest pomijany,
    • offset_y - przesunięcie na osi y (domyślnie 0) podczas rysowania obiektu (jeśli <0 wtedy offset_y linii od góry jest pomijanych).
  • Dodanie funkcji rysującej obramowanie obiektu.
  • Dodanie opcji dla tworzenia maski obiektu.
  • Dodanie opcji do zamiany podanego koloru na przezroczystość.
  • Dodanie wersji snap aplikacji.

Nowości w wersji: v1.2

  • Możliwość podglądu (renderingu) plików modeli Wavefront *.obj i dodanie szeregu opcji wpływających na ten rendering.
  • Opcja automatycznego dodania do zasobów wszystkich plików powiązanych z danym modelem po wskazaniu pliku *.obj (plików materiału i tekstur).
  • Zapamietywanie przez aplikację położenia i rozmiaru okna głównego i przywracanie go po jej uruchomieniu.
  • Zapamiętywanie ostatnio wybranego katalogu i ustawianie go przy kolejnych otwarciach okienka dialogu wyboru plików.
  • Dodana w przykładach aplikacja renderująca obiekt w bibliotekach Gtk i OpenGL.
  • Dodany przykładowy plik zasobów z kilkoma modelami.

Nowości w wersji: v1.1

  • Dodany podgląd wybranej czcionki.
  • Dodana możliwość odtworzenia nieskompresowanych plików *.wav

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.