2 poin oleh GN⁺ 2025-10-23 | 1 komentar | Bagikan ke WhatsApp
  • rlsw adalah renderer perangkat lunak bergaya OpenGL 1.1 yang menyediakan backend alternatif untuk menjalankan raylib di lingkungan tanpa GPU
  • Menyediakan dukungan fitur luas seperti point, line, triangle, quad dan lain-lain, termasuk clipping, tekstur, dan buffer warna/kedalaman ganda
  • Tekstur mendukung semua format tak terkompresi yang didukung raylib, serta kontrol halus untuk pengaturan filtering dan wrapping
  • Menyertakan fitur grafis 3D utama seperti matrix stack, depth test, blend, culling dan memaksimalkan kompatibilitas melalui OpenGL function binding
  • Dengan ukuran di bawah 5000 baris, menonjol karena kesederhanaan dan integrasi dibanding renderer perangkat lunak lain dalam hal performa dan ringan

rlsw: Ikhtisar Renderer OpenGL Perangkat Lunak Raylib

Pengantar

  • rlsw adalah pustaka yang mengimplementasikan seluruh fitur yang disediakan oleh rlgl.h di raylib secara penuh dalam perangkat lunak
  • Dirancang sebagai backend pengganti langsung agar raylib dapat dijalankan bahkan pada perangkat yang sama sekali tidak memiliki GPU

Fitur Utama

  • Melakukan rendering pada framebuffer internal kustom, mendukung berbagai mode warna/kedalaman (RGB 8, 16, 24bit, Depth 8/16/24bit)
  • Mode rendering yang didukung: point, line, triangle, quad
    • Dapat mengatur detail rendering tambahan seperti ketebalan point, lebar line, dan mode polygon
    • Semua mode rendering mendukung clipping
  • Fitur tekstur: mendukung semua format tidak terkompresi yang didukung raylib
    • Pemeriksaan minification/magnification
    • Filtering point/bilinear
    • Penerapan mode wrap per koordinat S/T secara terperinci
  • Mendukung array vertex langsung, dan memungkinkan menggambar primitif langsung
  • Dukungan matrix stack (Push/Pop)
  • Fitur lain: getter bergaya OpenGL, resize framebuffer, koreksi perspektif, scissor clipping, depth test, blend, culling

Penggunaan dan Kustomisasi

  • Berstruktur header & source tunggal, dan implementasi dapat dibuat melalui #define RLSW_IMPLEMENTATION
  • Mendukung kustomisasi bebas pengguna dengan beberapa konstanta mikro sebelum build
    • Contoh: dapat mengatur jumlah/ukuran maksimum framebuffer atau tekstur

Struktur dan Tipe

  • Mendefinisikan beberapa enum dan tipe yang kompatibel dengan OpenGL, serta struct internal khusus (sw_vertex_t, sw_texture_t, dan lain-lain)
  • Sebagian besar pemanggilan OpenGL dipetakan ulang menjadi fungsi rlsw untuk digunakan sebagai pengganti
  • Struktur manajemen state internal yang kuat untuk berbagai matrix, state, dan manajemen tekstur

Lisensi dan Pemanfaatan

  • Lisensi MIT memungkinkan penggunaan komersial dan non-komersial serta pembuatan karya turunan secara bebas
  • Menekankan berat pada ringan, penggantian penuh berbasis software dibanding optimasi performa, sehingga kuat dalam integrasi dan distribusi yang sederhana

Ringkasan Detail

Struktur dan Penjelasan Header

  • rlsw hampir menggantikan hampir semua fitur OpenGL 1.1 secara software per-fungsi
  • Header ini (rlsw.h) mendefinisikan:
    • jenis nilai, enum dan struct kustom
    • penggantian perintah OpenGL ke fungsi internal rlsw melalui macro
    • deklarasi API (inisialisasi, salin/ambil framebuffer, draw, clear, input vertex/tekstur, dll)

Fitur Utama

  • Secara internal, mendukung beberapa matrix berbasis stack (khusus Projection/ModelView/Texture)
  • Manajemen state render: manipulasi bit state seperti Scissor, aktivasi tekstur, atau Depth Test
  • Fitur kompatibilitas dengan OpenGL: berbagai getter, penyalinan state, penanganan error
  • Penanganan tekstur: format tidak terkompresi, mode filter/wrap, salin memori, dll
  • Secara default dapat memproses sebagian besar bentuk 2D/3D (point, line, triangle, quad) serta pengolahan warna dan kedalaman

Nilai yang Dapat Dikustomisasi

  • Resolusi dan jumlah framebuffer/tekstur, lebar bit buffer warna/kedalaman, kedalaman stack matrix, jumlah tekstur maksimum, dan lain-lain
  • Penyesuaian tingkat lanjut seperti nilai SW_MAX_CLIPPED_POLYGON_VERTICES didukung

Elemen Utama Struktur Internal

  • sw_context_t: mencakup semua state dan buffer pada seluruh konteks
  • Secara internal mengelola secara terpadu vertex buffer, texture array, framebuffer, serta flag state

Kelebihan dan Kasus Penggunaan

  • Dioptimalkan untuk perangkat tanpa GPU, lingkungan embedded, dan porting/test/otomatisasi pengembangan per-OS
  • Aplikasi berbasis raylib dapat berjalan sepenuhnya secara perangkat lunak tanpa OpenGL
  • Struktur ringan sangat menguntungkan untuk eksperimen/pengembangan baru dan dukungan lingkungan non-standar

Lisensi dan Kontributor

  • Redistribusi fleksibel dengan lisensi MIT
  • Ditinjau oleh Le Juez Victor, Ramon Santamaria (2025–2026)

Kesimpulan

  • rlsw adalah Pure Software Renderer untuk raylib yang hampir sepenuhnya kompatibel dengan OpenGL
  • Berkas tunggal, ringan, dapat diperluas, dan dukungan seluruh format tekstur raylib membuatnya lebih ramah integrasi dan memiliki hambatan masuk yang lebih rendah dibanding solusi grafis perangkat lunak lain
  • Sangat bernilai untuk proyek dengan fokus pada grafis tingkat rendah dan portabilitas

1 komentar

 
GN⁺ 2025-10-23
Komentar Hacker News
  • Ini adalah kabar yang diumumkan dengan sangat gembira oleh penulis Raylib bahwa seluruh program raylib kini bisa dikompilasi hanya dengan aplikasi win32 tanpa dependensi eksternal apa pun tautan
    • Sangat menarik, saya sedang mencari sesuatu yang bisa merender ke layar LED untuk iseng dipakai pada prosesor embedded, dan semua yang saya temukan sejauh ini kurang memuaskan, kalau saya memahaminya dengan benar, sepertinya ini bisa dikompilasi untuk melakukan software rendering, dan untuk ukuran sekitar 192x128 piksel milik saya, sepertinya akan cukup cepat di sistem apa pun, jadi sekarang saatnya membuat animasi yang seru
    • Win32 sudah punya software renderer OpenGL 1.2 yang lumayan bagus
    • Saya penasaran kenapa harus melakukan ini
  • Saya penasaran dengan pendapat Tsoding tentang kabar ini
    • Mungkin sekarang karena ini sudah jadi arus utama dan bahkan masuk HN, Tsoding akan kehilangan minat
  • Keren bahwa komputer sekarang sudah begitu cepat sehingga bahkan hanya dengan library OpenGL 1.1 software rendering seperti ini pun kita bisa membuat game 2D yang cukup bagus
    • Kalau resolusinya dijaga tetap rendah, kompleksitas scene dikelola dengan cermat, dan ada keputusan tegas soal gaya seni, ternyata game 3D yang masuk akal pun bisa dibuat agar berjalan di perangkat keras 20 tahun lalu, saya benar-benar membuat game sebagai eksperimen 1 2, dan sekarang setelah tahu ini memungkinkan, saya berencana membuat game kedua yang lebih "serius" dan lebih rapi, memang terasa sekali bahwa performa komputer sudah jauh meningkat, dan kabar tentang Raylib ini juga sangat keren jadi saya benar-benar mempertimbangkan untuk memakainya
    • Suntingan: saya tidak sadar bahwa ini adalah software rendering, tetapi tetap saja, sepertinya game saya juga bisa dirender jika hanya memakai algoritma pengurutan kedalaman sprite yang optimal di CPU (gaya isometric pixel art seperti RollerCoaster Tycoon), untuk proyek Metropolis 1998 yang berlatar 90-an saya harus memakai fixed function pipeline OpenGL kuno (untungnya saya menemukan bahwa lewat file gl.h saya bisa mengirim field tambahan ke GPU sebagai fungsi ekstensi), saya memakai SFML sebagai framework grafis dan kemungkinan besar berbasis OpenGL 1.x, sebagai contoh modern, game Metropolis 1998 menunjukkan apa yang bisa dilakukan pendekatan seperti ini
    • Saya rasa software rendering pada akhirnya adalah masa depan, dengan syarat bisa memanfaatkan akselerasi perangkat keras secara agresif seperti GPGPU
    • Dulu sudah ada Unreal Tournament 3D penuh yang dirender dengan software beberapa dekade lalu, dan pada 2023 pun masih berjalan dengan baik tautan
  • Fabrice Bellard juga pernah menulis TinyGL terkait OpenGL tautan
    • Yang mengejutkan adalah TinyGL 0.4.1 dirilis pada (5 Maret 2022), sementara TinyGL 0.4 pertama kali dirilis pada (17 Maret 2002), "rencana pengembangan kami berjalan selama berabad-abad"
    • Orang itu benar-benar panutan yang luar biasa, nyaris semua hal bisa dia kerjakan
    • Saya sering melihat software renderer seperti ini pada tahun 90-an, dan sejujurnya saat itu kurang bagus karena lambat, berat, atau banyak artefak, untuk performa yang baik memang perlu integrasi erat antara game dan renderer, terasa ironis melihat sejarahnya
    • Sebagai referensi, ada juga tinygl hasil fork dari C-Chads, yang dirawat jauh lebih lama daripada versi asli dan menambahkan berbagai fitur seperti multithreading, meski diarsipkan pada akhir 2023
  • Berkat pikuma.com saya jadi memahami keindahan software renderer, dan saya sangat bangga karena bisa mengerti sebagian besar kodenya
  • Setelah melihat deskripsi "OpenGL 1.1-style implementation on software", saya jadi penasaran berapa banyak baris yang dibutuhkan untuk mengimplementasikan hingga OpenGL 2.0 (versi non-ES)
    • Setidaknya akan jadi puluhan kali lebih banyak, implementasi shader yang dapat diprogram pengguna (ARB assembly/GLSL) adalah bagian tersulit, dan juga perlu parser GLSL serta interpreter shader, selain itu harus menambahkan multitexturing dan berbagai texture combiner, secara keseluruhan bahkan dengan perkiraan sangat rendah pun saya rasa butuh 40 ribu baris, tentu kalau tidak mengimplementasikan seluruh spesifikasi dan hanya minimum saja bisa lebih sedikit dari itu
    • Saya pernah benar-benar mengimplementasikan API OpenGL untuk perangkat keras fixed function, mencapai versi 1.5 dan juga menerapkan beberapa ekstensi seperti framebuffer object, lini 1.x memang punya banyak bagian yang tidak perlu tetapi mudah diimplementasikan, sedangkan lini 2.x (masuknya shader) sangat sulit diimplementasikan dalam software
    • Saya tidak tahu jumlah baris pastinya, tetapi ada juga software renderer 3.x bernama PortableGL, proyek yang sangat keren dan juga menyenangkan untuk diutak-atik
  • Tentang istilah OpenGL-style
    • Kalau bicara hanya dari header-nya, selamat, ini implementasi software OpenGL 1.1 yang cukup bagus, tentu tidak memenuhi seluruh spesifikasi, tetapi bentuknya seperti driver MiniGL lama yang hanya mengimplementasikan bagian yang diperlukan agar game bisa berjalan, proyek ini juga mirip karena hanya mengimplementasikan secukupnya agar backend OpenGL milik Raylib dapat berjalan, tujuannya agar bisa dipakai tanpa dependensi grafis eksternal
  • Saya penasaran apakah ini mendukung CUDA
    • Tidak, ini murni rendering di CPU, bahkan tidak memakai SIMD, hanya menggunakan kode integer/floating-point secara langsung
  • Ini sepertinya sangat cocok untuk Nintendo 3DS
    • Jadi saya penasaran apakah ini juga bisa dimanfaatkan untuk membuat game konsol seperti NES, SNES, dan Genesis