Очень простой пример GtkGLArea с использованием Glade - PullRequest
0 голосов
/ 09 ноября 2018

Я не могу найти очень простой пример рисования GtkGLArea, который рисует линии и прямоугольники.Все примеры, которые я нахожу, слишком сложны, не написаны на C и невозможны для компиляции (из-за устаревших библиотек / пакетов).Мне удалось успешно скомпилировать glarea (https://github.com/ebassi/glarea-example),, однако слишком сложно понять, как это работает. Может ли кто-нибудь закончить приведенный ниже код, поэтому программа рисует простую линию или прямоугольник?

Я подготовилочень простой проект, который содержит окно с GtkGLArea.

PS Мне известно о Каире, но он слишком медленный для моей цели. Использование только 20% процессоров для рисования простой сетки не подходит.

Этот простой проект содержит 3 файла:

compile.sh

#!/bin/bash
# Šis ir Testa programmas kompilēšanas un palaišanas skripts

echo "Program started to compile"
gcc `pkg-config --cflags gtk+-3.0 gio-2.0 epoxy` -rdynamic -o './Test.run' './Test.c' `pkg-config --libs gtk+-3.0 gio-2.0 epoxy`
echo ""

echo "Program should start now"
'./Test.run'
echo ""

echo "End of script"

GUI_design.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="window_main">
    <property name="can_focus">False</property>
    <property name="default_width">1920</property>
    <property name="default_height">1080</property>
    <signal name="destroy" handler="on_window_main_destroy" swapped="no"/>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkDrawingArea">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
      </object>
    </child>
  </object>
</interface>

Test.c

#include <gtk/gtk.h>

#include <epoxy/gl.h> //This will be needed for OpenGL

int main(int argc, char *argv[])
{
    GtkBuilder      *builder; 
    GtkWidget       *window;

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "GUI_design.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
    gtk_builder_connect_signals(builder, NULL);

    g_object_unref(builder);

    gtk_widget_show(window);                
    gtk_main();

    return 0;
}

// called when window is closed
void on_window_main_destroy()
{
    gtk_main_quit();
}

Чтобы скомпилировать и запустить программу, поместите все 3 файла в одну папку и запустите compile.sh

...