2 puan yazan GN⁺ 2025-10-23 | 1 yorum | WhatsApp'ta paylaş
  • rlsw, OpenGL 1.1 stili bir yazılım renderlayıcısıdır; GPU’nun olmadığı ortamlarda raylib’in çalıştırılmasını sağlayan bir alternatif backend sunar
  • Nokta, çizgi, üçgen, dörtgen gibi çeşitli render modları ve kırpma, doku, çoklu renk/derinlik tamponu gibi geniş özellikleri destekler
  • Doku, raylib’in desteklediği tüm sıkıştırılmamış formatlarda kullanılabilir; filtreleme ve sarmalama ayarları da ayrıntılı biçimde kontrol edilir
  • Matris yığını, derinlik testi, blend, cull face gibi temel 3D grafik özellikleri dahildir; OpenGL fonksiyon bağlama ile uyumluluk en üst düzeye çıkarılır
  • Kod boyutu 5.000 satırdan az LOC olduğundan, performans ve hafiflik açısından diğer yazılım renderlayıcılara kıyasla sadelik ve bütünleşebilirlikte güçlü avantaj sağlar

rlsw: Raylib Yazılım OpenGL Renderlayıcısına Genel Bakış

Tanıtım

  • rlsw, OpenGL 1.1 stili bir yazılım renderlayıcısıdır ve raylib’in rlgl.h içinde sunduğu işlevlerin tamamını yazılımla uygular
  • GPU’nun hiç bulunmadığı cihazlarda bile raylib’in çalıştırılmasını mümkün kılmak için doğrudan bir alternatif backend olarak tasarlanmıştır

Öne Çıkan Özellikler

  • Render işlemi, özel dahili frame buffer üzerinde yapılır; RGB 8, 16, 24bit ve Depth 8/16/24bit dahil çeşitli renk/derinlik modları desteklenir
  • Desteklenen render modları: nokta, çizgi, üçgen, dörtgen
    • Nokta kalınlığı, çizgi genişliği, poligon modu gibi ek render ayarları yapılabilir
    • Tüm render modları kırpma (clipping) desteği sağlar
  • Doku özellikleri: raylib’in desteklediği tüm sıkıştırılmamış formatlar desteklenir
    • Minification/magnification kontrolü
    • Point/bilinear filtreleme
    • S/T koordinatına göre Wrap modu ayrıntılı uygulanır
  • Vertex array doğrudan desteklenir, ham çizim doğrudan yapılabilir
  • Matris yığını (Push/Pop) desteği
  • Diğer özellikler: OpenGL tarzı getter’lar, frame buffer yeniden boyutlandırma, perspektif düzeltme, scissor clipping, derinlik testi, blend, cull face

Kullanım ve Özelleştirme

  • Tek başlık ve tek kaynak yapısıyla gelir; #define RLSW_IMPLEMENTATION ile implementasyon bölümü üretilebilir
  • Derleme öncesi birden çok ince ayar sabitiyle kullanıcı tanımlı özelleştirme desteklenir
    • Örn: frame buffer veya doku maksimum sayısı/boyutu gibi değerler ayarlanabilir

Yapı ve Tipler

  • Birçok OpenGL uyumlu enum ve tip ile dahili yapılar (sw_vertex_t, sw_texture_t vb.) tanımlanır
  • Çoğu OpenGL çağrısı, alternatif kullanım için rlsw işlevleriyle yeniden haritalanır
  • Birden fazla matris, durum ve doku yönetimi gibi iç durum yönetim yapıları sağlamdır

Lisans ve Kullanım

  • MIT lisansı ile ticari ve ticari olmayan kullanım ile ikincil ürün oluşturma serbesttir
  • Performanstan çok hafiflik ve tam yazılım alternatifi doğasına odaklandığından, hızlı entegrasyon ve dağıtıma güçlüdür

Ayrıntılı Özet

Header yapısı ve açıklama

  • rlsw, OpenGL 1.1 işlevlerini fonksiyon düzeyinde neredeyse tamamen yazılımla değiştirir
  • Bu header (rlsw.h) şunları tanımlar
    • değer tipleri, özel enum ve struct
    • makrolarla OpenGL komutlarını rlsw dahili fonksiyonlarına dönüştürür
    • API bildirimleri (başlatma, frame buffer kopyalama/edinme, draw, clear, vertex/texture girdisi vb.)

Önde Gelen Özellikler

  • Dahili olarak birden çok yığın tabanlı matris desteği sağlanır (Projection/ModelView/Texture için ayrı)
  • Render durum yönetimi: Scissor, doku etkinleştirme veya Depth Test gibi durum bitlerini yönetme
  • OpenGL uyumluluk özellikleri: çeşitli getter’lar, durum kopyalama, hata yönetimi
  • Doku işleme: sıkıştırılmamış formatlar, filtreleme/sarmalama modları, bellek kopyalama vb.
  • Temel olarak, çoğu 2D/3D şekil (nokta, çizgi, üçgen, dörtgen) ile renk ve derinlik işleme mümkündür

Özelleştirilebilen ayarlar

  • frame buffer/doku çözünürlüğü ve sayısı, renk/derinlik buffer bit derinliği, matris yığını derinliği, maksimum doku sayısı vb.
  • SW_MAX_CLIPPED_POLYGON_VERTICES gibi gelişmiş kullanıcı ayarları uygulanabilir

Dahili yapıların ana öğeleri

  • sw_context_t: tüm bağlamın tüm durum ve tamponlarını kapsar
  • İçeride vertex buffer, texture array, framebuffer, durum bayrakları gibi bileşenler tek bir çatı altında yönetilir

Avantajlar ve kullanım alanları

  • GPU’siz cihazlar, gömülü sistemler, işletim sistemi bazlı portlama/test/geliştirme otomasyonu gibi senaryolara optimize edilmiştir
  • OpenGL olmadan da raylib tabanlı uygulamalar tamamen yazılımla çalıştırılabilir
  • Hafif mimarisi sayesinde yeni deneme/geliştirme ve standart dışı ortam desteği için çok uygundur

Lisans ve katkıda bulunanlar

  • MIT ile esnek yeniden dağıtım izni
  • 2025–2026: Le Juez Victor, Ramon Santamaria incelemesi

Sonuç

  • rlsw, OpenGL ile neredeyse tamamen uyumlu bir raylib için Pure Software Renderer’dır
  • Tek dosya, hafiflik, genişletilebilirlik ve raylib’in tüm doku formatları desteği açısından, diğer yazılım grafik çözümlerine göre hem entegrasyon eşiği hem de bütünleşebilirlikte üstündür
  • Düşük seviyeli grafikler ve taşınabilirlik odaklı projelerde özellikle değeri yüksektir

1 yorum

 
GN⁺ 2025-10-23
Hacker News görüşü
  • Raylib’in yazarı, herhangi bir harici bağımlılık olmadan yalnızca bir win32 uygulamasıyla tüm raylib programını derleyebildiğini büyük bir sevinçle duyurdu bağlantı
    • Gerçekten çok ilginç bir haber; gömülü bir işlemcide eğlence olsun diye kullanmak üzere LED ekranda bir şeyler render edebilecek bir şey arıyordum, şimdiye kadar bulduklarımın hiçbiri tatmin edici değildi. Doğru anladıysam bunu derleyip yazılımsal render alabileceğim; benim yaklaşık 192x128 piksel boyutumda bu her sistemde yeterince hızlı olur gibi görünüyor, yani artık eğlenceli animasyonlar yapma zamanı.
    • Win32’de zaten oldukça iyi bir OpenGL 1.2 yazılım renderlayıcısı var.
    • Bunu neden özellikle böyle yapmak gerektiğini merak ediyorum.
  • Tsoding’in bu haber hakkındaki görüşünü merak ediyorum.
    • Muhtemelen artık ana akıma girip HN’ye kadar çıktığı için Tsoding ilgisini kaybeder.
  • Bilgisayarların artık o kadar hızlı olması güzel ki, sadece böyle bir OpenGL 1.1 yazılım renderlama kütüphanesiyle bile oldukça iyi 2D oyunlar yapılabiliyor.
    • Çözünürlüğü düşük tutar, sahne karmaşıklığını dikkatle yönetir ve sanat tarzı konusunda net kararlar verirseniz, 20 yıl önceki donanımlarda bile çalışabilecek makul bir 3D oyun yapmak mümkündü. Ben de deneme amaçlı gerçekten oyun yaptım1 2; bunun artık mümkün olduğunu öğrendiğime göre daha “ciddi” ve daha tamamlanmış ikinci bir oyun yapmayı planlıyorum. Bilgisayarların ne kadar hızlandığını hissettiriyor. Raylib haberi de gerçekten çok iyi; ciddi ciddi kullanmayı düşünüyorum.
    • Düzenleme: Bunun yazılımsal render olduğunu fark etmemiştim, ama yine de CPU üzerinde en uygun sprite derinlik sıralama algoritmasını kullanırsam benim oyunum da render edilebilir gibi görünüyor (RollerCoaster Tycoon’daki gibi izometrik piksel art tarzı). 90’lar temalı Metropolis 1998 projesinde antik OpenGL fixed function pipeline kullanmak zorundaydım (neyse ki gl.h dosyasında ek alanları GPU’ya geçirmek için genişletme fonksiyonları olduğunu keşfettim). Grafik framework’ü olarak SFML kullanıyorum ve muhtemelen OpenGL 1.x tabanlı. Daha güncel bir örnek olarak Metropolis 1998 oyunu bu yaklaşımın neler yapabildiğini gösteriyor.
    • Bence yazılımsal renderlama sonuçta gelecektir, ama bir şartla: GPGPU gibi donanım hızlandırmasını agresif biçimde kullanabilmesi gerekir.
    • On yıllar önce bile tamamen yazılımla render edilen tam 3D Unreal Tournament vardı; 2023’te de gayet iyi çalışıyor bağlantı
  • Fabrice Bellard ayrıca OpenGL ile ilgili TinyGL’yi de yazmıştı bağlantı
    • Şaşırtıcı olan şey, TinyGL 0.4.1’in (5 Mart 2022) çıkmış olması ve TinyGL 0.4’ün ilk kez (17 Mart 2002) yayımlanmış olması; “geliştirme planımız yüzyıllara yayılıyor.”
    • O kişi neredeyse her şeyi yapabilen, gerçekten inanılmaz bir rol model.
    • 90’larda bu tür yazılım renderlayıcılarını çok görürdüm; dürüst olmak gerekirse o zamanlar yavaş ve ağırdılar ya da çok fazla artefact üretiyorlardı. Performans için oyunun ve renderlayıcının sıkı biçimde entegre olması gerekiyordu; tarihin ironisi gibi geliyor.
    • Bilgi olarak, C-Chads’in fork’ladığı bir tinygl de var; orijinaline kıyasla çok daha yakın tarihlere kadar bakımı yapıldı ve multithreading gibi çeşitli özellikler eklendi, ancak 2023 sonunda arşivlendi.
  • pikuma.com sayesinde yazılım renderlayıcılarının güzelliğini fark ettim ve kodun büyük kısmını anlayabilmiş olmaktan büyük gurur duyuyorum.
  • “OpenGL 1.1-style implementation on software” açıklamasını görünce, OpenGL 2.0’a (ES olmayan sürüm) kadar uygulamak için kaç satır gerektiğini merak ettim.
    • En az onlarca kat daha fazla olur. Kullanıcı tarafından programlanabilir shader’ları (ARB assembly/GLSL) uygulamak en zor kısım; ayrıca bir GLSL parser ve shader interpreter da gerekir. Multitexturing ve çeşitli texture combiner’lar da eklenmeli. Genel olarak çok düşük bir tahminle bile en az 40 bin satır gerekir diye düşünüyorum. Tabii tüm spesifikasyonu değil de yalnızca minimum kısmı uygularsanız bundan daha az olabilir.
    • Geçmişte gerçekten fixed function donanım için OpenGL API uygulamıştım; 1.5 sürümüne kadar uyguladım ve framebuffer object gibi bazı extension’ları da ekledim. 1.x serisinde gereksiz çok şey var ama uygulaması kolay. 2.x serisi (shader’ların gelişi) yazılım tarafında uygulaması çok zor.
    • Tam satır sayısını bilmiyorum ama PortableGL diye 3.x bir yazılım renderlayıcısı da var; çok hoş ve kurcalaması da eğlenceli bir proje.
  • OpenGL-style ifadesi hakkında
    • Sadece header’a bakarak söylüyorsak tebrikler, bu oldukça iyi bir OpenGL 1.1 yazılım implementasyonu. Elbette tüm spesifikasyonu karşılamıyor ama eski MiniGL sürücülerinde olduğu gibi oyunların çalışmasına yetecek kadar gerekli kısmı uygulamış. Bu proje de benzer şekilde yalnızca Raylib’in OpenGL backend’inin çalışmasına yetecek kadarını uyguluyor. Amaç, harici grafik bağımlılıkları olmadan kullanılabilmesi.
  • Acaba CUDA desteği var mı?
    • Hayır, tamamen CPU renderlaması yapıyor. SIMD bile kullanmıyor; doğrudan tamsayı/kayan nokta tabanlı kod kullanıyor.
  • Bu Nintendo 3DS için biçilmiş kaftan gibi görünüyor.
    • O zaman NES, SNES, Genesis gibi konsollar için oyun yapımında da kullanılıp kullanılamayacağını merak ediyorum.