MLX42 adalah pustaka grafis berjendela minimal yang berkinerja tinggi, mudah digunakan, lintas platform, untuk membuat aplikasi grafis tanpa harus bekerja secara langsung dengan kerangka jendela asli dari sistem operasi tertentu.
Ini menyediakan alat primitif untuk menggambar tekstur ke jendela serta memodifikasinya saat runtime saat tekstur tersebut ditampilkan di jendela.
Penting
Terkadang sepertinya tidak ada pembaruan yang dilakukan dalam waktu lama. Hal ini diharapkan, proyek/lib dianggap selesai dan memerlukan sedikit pembaruan. Perbaikan bug masih dijamin dan proyek masih dipelihara secara aktif.
MLX42 hadir dengan sejumlah besar fitur yang membuat penggunaannya benar-benar menyenangkan dan bukannya sebuah tugas.
Jalankan di WindowsXP nenek Anda, di debian paman Anda, atau di MacOS hipster! Apa pun platformnya, jika MLX42 dapat membangunnya, MLX42 akan berjalan pada sistem windowing aslinya.
Ini memungkinkan Anda mengerjakan proyek Anda, apa pun mesin yang digunakan.
MLX42 peduli dengan dokumentasi yang baik, setiap fungsi, penggunaan, dan bahkan beberapa cara kerja internal didokumentasikan! Tidak perlu lagi menebak-nebak dan mencari tahu bagaimana sesuatu berfungsi atau seharusnya bekerja.
Itu dibangun di atas OpenGL dan menggunakan rendering batch untuk mempercepat proses rendering dibandingkan dengan perpustakaan lain.
Proyek ini dikelola secara aktif oleh Codam serta mahasiswa dari 42 Network. Hal ini memberikan siswa kesempatan langsung untuk mempelajari lebih lanjut tentang perpustakaan itu sendiri serta memperbaiki potensi bug daripada hanya menerimanya.
MLX42 memperkenalkan kompatibilitas dengan Emscripten, memungkinkan MLX42 berjalan di browser web melalui WebAssembly. Modifikasi ini dimungkinkan berkat @PepeLevi, terima kasih atas kontribusi dan kontribusinya.
Secara keseluruhan pembangunan proyek ini adalah sebagai berikut untuk SEMUA sistem. Selama CMake bisa memahaminya.
Jika sistem Anda tidak menginstal glfw, cmake akan mendeteksi ini dan mengunduhnya untuk Anda. Anda kemudian dapat menjalankan sudo make install
di direktori _deps
glfw. Jika Anda menggunakan Komputer 42 (MacOS, Linux), mintalah sysadmin favorit Anda untuk menginstalnya. Hal yang sama berlaku untuk CMake atau dependensi lain yang mungkin Anda perlukan untuk sistem Anda.
Namun jika Anda tidak dapat melakukan keduanya, CMake masih dapat mengambil GLFW dan membangunnya. Anda kemudian dapat menautkannya secara statis dari folder _deps
.
Catatan
Untuk Codam, GLFW sudah terinstall di Mac.
Catatan
Selama tahap penautan, tanda untuk menghubungkan GLFW dapat berupa: -lglfw3 atau -lglfw tergantung pada sistem Anda.
Kompilasi program Anda dengan perpustakaan:
Laba!
Untuk membangun perpustakaan sepenuhnya dan menginstalnya ke sistem Anda, jalankan perintah berikut:
cmake -B build && cmake --build build --parallel --config (Debug | Release | RelWithDebInfo | MinSizeRel) --target install
Secara default, Windows akan menempatkan lib yang diinstal ke dalam: C:Program Files (x86)mlx42
dan untuk MacOS/Linux akan ditempatkan ke dalam /usr/local/lib
dan /usr/local/include
.
MLX42 hadir dengan beberapa pengujian unit untuk memastikan integritas perpustakaan, untuk membangunnya jalankan perintah berikut:
cmake -DBUILD_TESTS=ON -B build && cmake --build build --parallel
Kemudian jalankan saja dengan:
ctest --output-on-failure --test-dir build
git clone https://github.com/codam-coding-college/MLX42.git
cd MLX42
cmake -B build # build here refers to the outputfolder.
cmake --build build -j4 # or do make -C build -j4
File perpustakaan keluaran disebut libmlx42.a
dan terletak di folder build
yang Anda tentukan.
Anda dapat meneruskan opsi build ke cmake, misalnya: cmake -DDEBUG=1 -DGLFW_FETCH=0...
. Misalnya, ini memungkinkan Anda membangunnya dalam mode DEBUG atau mengubah perilaku apa pun pada waktu pembuatan.
Anda dapat menemukan contoh makefile dalam dokumentasi di sini.
Jika sistem Anda tidak memiliki GLFW atau CMake, sangat disarankan Anda menggunakan brew untuk menginstal dependensi yang hilang tersebut.
Untuk 42 Kampus Anda dapat menggunakan: 42Homebrew
Jika tidak, dengan minuman rumahan:
brew install glfw
brew install cmake
Jika Anda menggunakan Apple Silicon (chip M1 atau lebih baru), perhatikan bahwa jalur penginstalan Homebrew berbeda. Anda mungkin ingin memperbarui file konfigurasi shell Anda. Untuk pengguna Zsh (shell default pada versi MacOS yang lebih baru):
nano ~ /.zshrc
export LIBRARY_PATH=/opt/homebrew/lib
Mulai ulang sesi shell Anda atau mulai ulang terminal Anda agar perubahan diterapkan.
Untuk MacOS Anda perlu menggunakan flag berikut untuk mengkompilasi program Anda dengan perpustakaan untuk menghubungkan program dengan kerangka kerja yang benar:
-framework Cocoa -framework OpenGL -framework IOKit
Biasanya jika Anda baru saja menginstal/membuat glfw
dari sumber atau sudah menginstalnya, kompilasinya akan menjadi:
gcc main.c ... libmlx42.a -Iinclude -lglfw
# Homebrew
gcc main.c ... libmlx42.a -Iinclude -lglfw -L " /opt/homebrew/Cellar/glfw/3.3.8/lib/ "
# 42Homebrew
gcc main.c ... libmlx42.a -Iinclude -lglfw -L " /Users/ $( USER ) /.brew/opt/glfw/lib/ "
Saat menjalankan program Anda di MacOS mungkin ada keluhan, karena dengan Mac Anda harus berpikir berbeda. Jika ada peringatan keamanan atau MacOS yang memberi tahu Anda bahwa pembuat/pengembangnya tidak dapat diverifikasi, buka Settings > Security & Privacy
.
Akan ada pop-up di bagian bawah yang memberi tahu Anda bahwa suatu aplikasi mencoba dijalankan, klik opsi untuk membiarkannya berjalan.
Untuk Debian seperti (Ubuntu, Mint, Pop OS...):
sudo apt update
sudo apt install build-essential libx11-dev libglfw3-dev libglfw3 xorg-dev
Untuk Arch-linux (Manjaro, Endeavour, Garuda):
sudo pacman -S glfw-x11
ATAU (jika Anda menggunakan sway/wlroots compositor atau wayland compositor lainnya)
sudo pacman -S glfw-wayland
Unduh dan buat MLX42
Kompilasi program Anda dengan perpustakaan:
gcc main.c ... libmlx42.a -Iinclude -ldl -lglfw -pthread -lm
Penting
Sebelum memulai semua langkah ini, baca ini
.zshrc
atau .bashrc
: export DISPLAY= $( ip route list default | awk ' {print $3} ' ) :0
export LIBGL_ALWAYS_INDIRECT=0
(Jika perintah ekspor DISPLAY gagal, lihat posting StackOverflow ini untuk alternatifnya)
Unduh dan instal aplikasi XServer dengan konfigurasi yang diperluas (XMing tidak memenuhi syarat) VcXsrv berfungsi: https://sourceforge.net/projects/vcxsrv/
Buka Windows Defender Firewall, dan ikuti langkah-langkah berikut:
Native opengl
Disable access control
Penting
Ketahuilah bahwa Visual Studio (2022) diperlukan untuk ini. Berkembang di Windows bisa membuat frustasi.
Kami sangat menyarankan Anda cukup menggunakan WSL2 untuk membuat ini semudah mungkin. Namun jika Anda bersikeras untuk membangun windows secara asli maka yang Anda perlukan dalam hal dependensi adalah:
Setelah Anda menginstal semua dependensi dengan benar, CMake
akan menghasilkan file proyek visual studio. Cukup buat dan setelah Anda memiliki file .lib
pindahkan ke proyek Anda yang sebenarnya dan instal seperti yang Anda lakukan dengan perpustakaan lainnya.
Untuk berjaga-jaga, inilah video yang menunjukkan kepada Anda bagaimana hal ini dapat dilakukan. Mudahnya, video ini juga membahas bagaimana Anda dapat menautkan glfw
.
Tentu saja terserah Anda untuk memastikan bahwa kode yang Anda tulis bersifat portabel. Hal-hal yang ada di Unix
belum tentu ada di Win32
.
// -----------------------------------------------------------------------------
// Codam Coding College, Amsterdam @ 2022-2023 by W2Wizard.
// See README in the root project for more information.
// -----------------------------------------------------------------------------
#include
#include
#include
#include
#define WIDTH 512
#define HEIGHT 512
static mlx_image_t * image ;
// -----------------------------------------------------------------------------
int32_t ft_pixel ( int32_t r , int32_t g , int32_t b , int32_t a )
{
return ( r << 24 | g << 16 | b << 8 | a );
}
void ft_randomize ( void * param )
{
( void ) param ;
for ( uint32_t i = 0 ; i < image -> width ; ++ i )
{
for ( uint32_t y = 0 ; y < image -> height ; ++ y )
{
uint32_t color = ft_pixel (
rand () % 0xFF , // R
rand () % 0xFF , // G
rand () % 0xFF , // B
rand () % 0xFF // A
);
mlx_put_pixel ( image , i , y , color );
}
}
}
void ft_hook ( void * param )
{
mlx_t * mlx = param ;
if ( mlx_is_key_down ( mlx , MLX_KEY_ESCAPE ))
mlx_close_window ( mlx );
if ( mlx_is_key_down ( mlx , MLX_KEY_UP ))
image -> instances [ 0 ]. y -= 5 ;
if ( mlx_is_key_down ( mlx , MLX_KEY_DOWN ))
image -> instances [ 0 ]. y += 5 ;
if ( mlx_is_key_down ( mlx , MLX_KEY_LEFT ))
image -> instances [ 0 ]. x -= 5 ;
if ( mlx_is_key_down ( mlx , MLX_KEY_RIGHT ))
image -> instances [ 0 ]. x += 5 ;
}
// -----------------------------------------------------------------------------
int32_t main ( void )
{
mlx_t * mlx ;
// Gotta error check this stuff
if (!( mlx = mlx_init ( WIDTH , HEIGHT , "MLX42" , true)))
{
puts ( mlx_strerror ( mlx_errno ));
return ( EXIT_FAILURE );
}
if (!( image = mlx_new_image ( mlx , 128 , 128 )))
{
mlx_close_window ( mlx );
puts ( mlx_strerror ( mlx_errno ));
return ( EXIT_FAILURE );
}
if ( mlx_image_to_window ( mlx , image , 0 , 0 ) == -1 )
{
mlx_close_window ( mlx );
puts ( mlx_strerror ( mlx_errno ));
return ( EXIT_FAILURE );
}
mlx_loop_hook ( mlx , ft_randomize , mlx );
mlx_loop_hook ( mlx , ft_hook , mlx );
mlx_loop ( mlx );
mlx_terminate ( mlx );
return ( EXIT_SUCCESS );
}