Я не могу найти очень простой пример рисования 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