Biblioteka wieloplatformowa hbgl-c

Wątek przeniesiony 2023-11-04 11:25 z C/C++ przez Riddle.

1

hbgl-c to lekka i elastyczna biblioteka do tworzenia gier i nie tylko. Zbudowany na bazie GLFW , ma oferować prostą warstwę abstrakcji w stosunku do OpenGL , umożliwiając programistom skupienie się na tworzeniu treści, zamiast zajmować się zawiłościami OpenGL. W tym projekcie wykorzystano jednoplikowe biblioteki domeny publicznej stb autorstwa Seana Barretta.

https://github.com/dev-harbour/hbgl-c

--Harbour

1
  1. brak wsparcia dla cmake

  2. brak include zawierającego GL_CLAMP_TO_EDGE , na moim msys2 clang i gcc brak GL_CLAMP_TO_EDGE

  3. Puste okno dla wszystkich przykładów :(

    screenshot-20231104113019.png

1

Wypisuję co mi się nie podobało:

  • Z założenia libka do static linking,
    Libka zapisywana pod dir lib/linux/gcc to jakaś szajba.
    lib/liba.a STARCZY

  • Niestety trzeba używać gmake bo makefile nie jest portowny.

  • Brak w readme info jak instalować. Brak wypisanych zależności jasne, ze to jest oczywiste, że trzeba mieć glfw ale moim zdaniem zależności powinny być zawsze podane.
    Zamiast tego ta informacja jest w examples, wtf ?

  • Musiałem dopisywać includy do Twojego INCLUDE w kompilacji.
    Tak to u mnie wyglądało:

    INCLUDE_DIR = /usr/local/include -Iinclude -I/usr/X11R6/include
    

    Jak to np. automatyzować.
    .configure albo np.:

    headsys$ pkg-config --cflags glfw3
    -I/usr/local/include -I/usr/X11R6/include
    
  • Ja bym robił cc po prostu i nie interesował się jaki kto używa kompilator.
    Sprawdzasz czy ktoś może ma clanga w makefile, a potem dajesz mu w examples gcc jako przykład.
    Generalnie kompilowanie wg examples jest niemożliwe, bez sporej porcji dopisywania.
    Np. brakowało:

    headsys$ pkg-config --libs glfw3
    -L/usr/local/lib -lglfw
    

    To build ma za mnie to robić a nie, że ja sam muszę dopisywać..

Skompilowałem dwa przykłady z examples i mi wszystko działa. Ale budowanie masz do d**y i to popraw.

0

mnie zastanawia czy w obecnych czasach warto używać makefile, szczególnie ze to nowy projekt ?

0

Wydaje mi się, że warto pisać aby coś liznąć w make. jest sporo w tym kodu ( nie mówię, aby używać do wszystkiego ), a czasami trzeba coś wewnątrz poprawić jak się ściąga jakieś źródełka do kompilacji. Zresztą cmake też Ci generuje make. Zawsze można podejrzeć co on tam wyczarował.

0

Cześć,

Dziękuję wszystkim za zainteresowanie projektem hbgl-c! Cieszę się, że projekt przyciągnął uwagę społeczności i z przyjemnością odpowiem na wasze pytania.

Struktura katalogów, takich jak ../lib/win/mingw64, została zaprojektowana z myślą o elastyczności i możliwości dostosowania do różnych środowisk. Różnorodność platform i kompilatorów to rzeczywistość, z którą się stykamy, i chcemy zapewnić, że nasza biblioteka będzie jak najbardziej dostępna. Obejmuje to różne wersje Windows, różne systemy Unixowe oraz szeroką gamę kompilatorów, takich jak:

lib/win/bcc
lib/win/bcc64
lib/win/gcc
lib/win/global
lib/win/icc
lib/win/icc64
lib/win/iccia64
lib/win/mingw
lib/win/mingw64
lib/win/msvc
lib/win/msvc64
lib/win/msvcia64

Co więcej, uważam, że Makefile to nadal bardzo skuteczne i proste narzędzie do kompilacji bibliotek i zarządzania projektami w C/C++. Jego prostota i przejrzystość sprawiają, że jest to narzędzie wyjątkowo użyteczne, szczególnie w przypadku mniejszych projektów lub w sytuacjach, gdzie potrzebujemy bezpośredniej kontroli nad procesem kompilacji.

Niemniej jednak, świadomi jesteśmy, że narzędzia takie jak CMake mogą zaoferować większą przenośność i wygodę w konfiguracji, zwłaszcza w przypadku bardziej złożonych projektów. Dlatego też rozważamy rozwój i wsparcie dla CMake w przyszłych wersjach hbgl-c.

Biblioteka hbgl-c jest w dużej mierze eksperymentalnym projektem, który ewoluuje w zależności od potrzeb i opinii użytkowników. Wszelkie sugestie i feedback są niezmiernie cenne i serdecznie zapraszam do dzielenia się swoimi doświadczeniami oraz propozycjami dotyczącymi projektu. Chciałbym również dodać, że długoterminowym celem dla hbgl-c jest stworzenie wydajnego i elastycznego narzędzia do budowy interfejsów użytkownika (GUI).

przykładowy plik CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(hbgl-c)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -O3")
include_directories(include)
file(GLOB SOURCES "src/*.c")
if (WIN32)
    set(DESTDIR "${PROJECT_SOURCE_DIR}/lib/win/mingw64")
else ()
    set(DESTDIR "${PROJECT_SOURCE_DIR}/lib/linux/gcc")
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DESTDIR})
add_library(hbgl STATIC ${SOURCES})
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
if(TARGET glfw) # glfw for some Linux distributions
  set(GLFW_LIBRARIES glfw)
elseif(TARGET glfw3) # glfw3 for others like Windows
  set(GLFW_LIBRARIES glfw3)
else()
  message(FATAL_ERROR "GLFW not found")
endif()
add_subdirectory(examples)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

add_executable(horizontal_image_gallery horizontal_image_gallery.c)
target_link_libraries(horizontal_image_gallery hbgl ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} m)
# itd.

Z poważaniem,
--Rafał Jopek
harbour pl

0

@Harbour: Ja bym zaproponował jakiś przykład cmake z naciskiem na nowe standardy ale akurat nie jestem na swoim komputerze z ulubionymi zakładkami

ustawienia powinny być per target a nie globalnie , czyli bez include_directories
brakuje target_include_directories(hbgl PUBLIC
brakuje target_link_libraries(hbgl PUBLIC

ja bym darzył do takiego użycia biblioteki

add_executable(horizontal_image_gallery horizontal_image_gallery.c)
target_link_libraries(horizontal_image_gallery hbgl) # użycie hbgl ustawia biblioteki i ścieżki (include,lib itp...)

ustawienie na sztywno ścieżek to niedźwiedzia przysługa ,

0

Twoja sugestia jest bardzo słuszna. Używanie target_include_directories i target_link_libraries jest zdecydowanie bardziej zalecane niż ustawianie globalnych ścieżek i bibliotek. Pozwala to na bardziej modułową i elastyczną konfigurację projektu CMake.

cmake_minimum_required(VERSION 3.10)
project(hbgl-c)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -O3")

file(GLOB SOURCES "src/*.c")

add_library(hbgl STATIC ${SOURCES})

set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

# Ustawienie ścieżek include na poziomie celu hbgl
target_include_directories(hbgl PUBLIC include)

# Linkowanie z bibliotekami OpenGL i GLFW na poziomie celu hbgl
target_link_libraries(hbgl PUBLIC ${OPENGL_LIBRARIES} glfw)

if(WIN32)
    set(DESTDIR "${PROJECT_SOURCE_DIR}/lib/win/mingw64")
else()
    set(DESTDIR "${PROJECT_SOURCE_DIR}/lib/linux/gcc")
endif()

# Ustawienie katalogu wyjściowego na poziomie celu hbgl
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DESTDIR})

add_subdirectory(examples)

examples/CMakeLists.txt

add_executable(horizontal_image_gallery_example horizontal_image_gallery.c)
target_link_libraries(horizontal_image_gallery_example hbgl m)

add_executable(image image.c)
target_link_libraries(image hbgl m)

add_executable(image_8x8 image_8x8.c)
target_link_libraries(image_8x8 hbgl m)

add_executable(main main.c)
target_link_libraries(main hbgl m)

add_executable(text text.c)
target_link_libraries(text hbgl m)

add_executable(text_rand text_rand.c)
target_link_libraries(text_rand hbgl m)

add_executable(vertically_image_gallery vertically_image_gallery.c)
target_link_libraries(vertically_image_gallery hbgl m)
0

@Marius.Maximus
Po przeprowadzeniu pomyślnych testów możesz zaktualizować projekt hbgl-c na GitHub.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.