Dfpsr
Perpustakaan rendering perangkat lunak modern untuk C ++ 14 menggunakan SSE/Neon yang dibuat oleh David Forsgren Piuva. Jika Anda mencari mode arus utama terbaru, lihat di tempat lain. Ini adalah perpustakaan untuk perangkat lunak berkualitas yang dimaksudkan untuk dikembangkan selama beberapa dekade dan bertahan dari cucu Anda dengan pemeliharaan minimal. Sama seperti mengukir warisan Anda menjadi batu, dibutuhkan lebih banyak upaya untuk menguasai keterampilan tetapi memberikan hasil yang lebih kuat dengan tidak mengandalkan perpustakaan yang jauh. Pengalaman pengguna maksimum dan ketergantungan sistem minimum.
Latar belakang pencipta
DXOMark World Record dalam stabilisasi video digital dari industri seluler. Bekerja dengan penglihatan robot kritis keselamatan untuk kontrol lalu lintas bandara sipil. Mengadakan kuliah dalam optimasi di berbagai perusahaan di industri seluler, medis dan game. Bekerja dengan optimisasi pada GPU, CPU, DSP, ISP, FPGA dan ASIC.
Optimalisasi membutuhkan alat yang baik untuk menghemat waktu Anda
Bagian terpenting tentang mengoptimalkan kode adalah memahami baik algoritma tinggi dan keterbatasan perangkat keras yang rendah, karena Anda tidak dapat membiarkan ilmuwan merancang algoritma dan seorang programmer mengoptimalkannya tanpa ruang untuk perubahan assembler tulisan tangan (kesalahan paling umum). Desain algoritma tidak dilakukan sampai Anda memiliki tradeoff yang baik antara kualitas dan kinerja dengan semua optimasi di tempat. Penghematan waktu dengan biaya kualitas di satu tempat dapat dikompensasi dengan meningkatkan kualitas dengan biaya yang lebih rendah di tempat lain untuk meningkatkan kecepatan dan kualitas. Semakin cepat Anda dapat membuat vektorisasi algoritma yang hampir optimal, semakin cepat Anda dapat mengulangi proses desain. Pikirkan tentang apa yang sebenarnya Anda perkiraan. Apakah tujuan Anda untuk menggambar sebanyak mungkin poligon lurus sempurna, atau apakah tujuan untuk memperkirakan bentuk dunia nyata yang kompleks menggunakan teknik apa pun?
Situs web resmi: dawoodoz.com
Seperti apa permainan Anda menggunakan rendering CPU isometrik

Cahaya dinamis real-time dengan bayangan caster berbasis kedalaman dan pemetaan normal pada 453 frame per detik dalam 800x600 piksel yang berjalan pada CPU. Resolusi yang lebih tinggi akan mematahkan gaya retro dan benar -benar terlihat lebih buruk, tetapi ada banyak waktu yang tersisa untuk logika game dan efek tambahan. Dengan model 3D pra-rendering untuk difus, gambar normal dan tinggi, membaca data jauh lebih efisien cache pada CPU modern daripada menggunakan perspektif gratis. Ini juga memungkinkan memiliki lebih banyak segitiga daripada piksel di layar dan melakukan pembaruan pasif geometri statis. Model 3D detail rendah digunakan untuk melemparkan bayangan dinamis.
Rendering 3D tradisional dengan poligon juga didukung

Rendering 3D tidak secepat render 2D atau isometrik pada CPU, tetapi sering mencapai 60 Hz pada tahun 1920x1080 piksel untuk grafik detail rendah. Untuk level detail yang lebih tinggi dan lebih banyak fitur, disarankan untuk menyalin dan memodifikasi pipa rendering untuk membuatnya hardcoded hanya untuk fitur yang Anda inginkan dan kemudian menyederhanakan matematika untuk mesin rendering spesifik Anda, seperti yang dilakukan untuk contoh kotak pasir di mana hanya warna verteks yang diperlukan untuk segitiga kecil tanpa perspektif, sehingga warna dapat dihitung dengan menambah nilai warna daripada interpolating dari depose tanpa perspektif, sehingga warna dapat dihitung dengan menambah nilai warna alih -alih dari depose dari depte dari depte.
Mengapa menggunakan renderer perangkat lunak open-source saat GPU sangat cepat?
- Ketahanan menggunakan renderer perangkat lunak mungkin tidak akan merusak sistem Anda saat membuat kesalahan, tidak seperti API grafis untuk GPU yang rentan terhadap layar biru.
- Determinisme Jika bekerja pada satu komputer, itu mungkin akan bekerja sama di komputer lain dengan perbedaan kecil antara sistem operasi. Namun OpenGL, tidak memiliki fitur nol jika Anda menghapus semua yang memiliki bug dalam implementasi driver apa pun.
- Overhead rendah ketika Anda menginginkan resolusi rendah untuk gaya visual atau penglihatan robot, Anda mungkin juga membuatnya minimal dengan renderer perangkat lunak yang terkait secara statis ketika GPU akan lebih lambat.
- Debugging yang mudah ketika semua data diproses dalam penyaji perangkat lunak, jauh lebih mudah untuk melihat apa yang salah selama debugging.
- Mudah dimodifikasi Tidak ada batasan perangkat keras selain siklus dan memori CPU, sehingga Anda dapat memodifikasi seluruh pipa rendering dengan menyalin dan menempelkan kode.
- Pixel Exact 2D alih -alih membuat solusi aneh di atas poligon, seorang renderer perangkat lunak memungkinkan Anda bekerja dengan seluruh piksel untuk memulai.
Mengapa menggunakan renderer perangkat lunak ini?
- Ketergantungan sistem minimal Segala sesuatu yang terkait dengan API sistem tertentu ditempatkan dalam modul pembungkus terpisah yang mengintegrasikan fitur -fitur minimum minimum yang harus mudah diintegrasikan pada sistem operasi di masa depan. Tidak seperti renderer perangkat lunak lainnya, yang satu ini tidak memerlukan driver grafik, karena Anda bisa mendapatkan kinerja yang sama menggunakan multi-threading dengan mengunggah kanvas pada utas latar belakang ketika sebagian besar core tetap menganggur.
- Tidak ada binari, seluruh perpustakaan secara otomatis dikompilasi dari kode sumber. Bahkan sistem build menyusun sendiri sebelum membangun proyek Anda. Ini memastikan bahwa tidak ada seorang pun di masa depan yang harus membalikkan binari lama abad terbalik ketika mencoba membangun program Anda, dan itu juga membuatnya jauh lebih aman terhadap malware ketika semuanya dapat diperiksa dalam kode yang dapat dibaca.
- Linking statis seluruh perpustakaan ditautkan secara statis dengan program Anda, sama seperti jika Anda telah menulis kode sendiri. Hanya API sistem inti yang telah bertahan selama beberapa dekade diandalkan sebagai dependensi, tidak ada driver GPU, tidak ada lapisan media eksternal. Semuanya, mulai dari cara mengkodekan karakter unicode dan membuat font hingga bagaimana poligon dirapikan terhadap buffer kedalaman akan ada dalam program C ++ yang dikompilasi untuk keandalan dan determinisme maksimum. Sistem build memungkinkan secara statis menghubungkan perpustakaan standar C ++ bila memungkinkan.
- Buat perangkat lunak warisan Anda yang mungkin dapat dilakukan oleh generasi mendatang, menyusun dan berjalan secara asli tanpa perlu emulator atau rekayasa terbalik dari driver grafik berpemilik.
Fitur di perpustakaan ini
- Sistem build C ++ sepenuhnya otomatis Tidak ada lagi daftar file sumber yang panjang dalam proyek Anda. Sistem build yang disertakan akan menemukan header yang disertakan dan nama sumber yang sesuai secara otomatis. Katakan saja untuk merangkak dari Main dan biarkan mengetahui sisanya secara otomatis. Backend yang berbeda untuk perpustakaan ditangani dengan memasukkan header proyek perpustakaan, memberi tahu backend mana yang digunakan untuk setiap platform. Checksum digunakan untuk hanya membangun apa yang telah berubah, jadi tidak perlu membuat pustaka statis untuk bagian kode Anda.
- Gambar 2D Pixel Exact Standard Draw Panggilan untuk Garis, Persegiatan, Salinan Gambar Solid, Gambar Gambar yang Difilter Alpha, Gambar Depth Buffered, dan Stensil Drawing.
- Render 3D kira-kira setara dengan Direct3D 7 dengan pengambilan sampel tekstur bi-linear, mipmapping, lightmaps dan alpha filtering saat digunakan di luar kotak, tetapi dapat dimodifikasi untuk lebih seperti 3D langsung 9 jika Anda menerapkan naungan ke tekstur (dapat menggunakan SIMD dengan multi-threading dan dijadwalkan berdasarkan jarak tampilan).
- Sistem oklusi Kumpulan tugas rendering untuk multi-threading juga berisi kisi oklusi di mana bentuk oklusi dapat ditarik untuk melewatkan gambar segitiga, objek atau seluruh kelompok jika mesin Anda mengimplementasikan fase luas untuk uji pemusnahan dan oklusi. Occlusion yang sepenuhnya dinamis ini kemudian dapat dikombinasikan dengan optimasi statis untuk game tertentu menggunakan informasi tentang daerah mana yang dapat dilihat dari setiap lokasi kamera.
- Kliping jauh opsional karena API grafis ini hanya menggunakan buffer kedalaman titik mengambang untuk perspektif, tidak perlu menormalkan nilai kedalaman untuk representasi berbasis integer. Ini memungkinkan pemilihan jarak klip jauh tak terbatas saat membuat kamera Anda, jika Anda mampu memberikan seluruh adegan sekaligus.
- Lapisan media cross-platform media yang dirancang untuk ketahanan. ALSA dan WinMM Sound backends untuk kontrol penuh atas pencampuran suara, tanpa harus menyebut apa pun sistem spesifik sendiri. Manajemen jendela menggunakan multi-threading untuk mengunggah kanvas, sehingga Anda tidak memerlukan driver grafik GPU dan ketergantungan berat hanya untuk mengunggah hasilnya. Menggunakan jendela tanpa batas untuk layar penuh, sehingga Anda dapat dengan mudah mengakses program lain jika Anda mendapatkan email penting atau pesan instan di latar belakang. Upscaling dilakukan pada CPU untuk bekerja dengan resolusi layar apa pun tanpa mengandalkan driver grafis yang mungkin memberikan piksel interpolasi yang salah atau bahkan tidak ada. Lapisan media yang lebih tua yang dirancang untuk tampilan CTR dapat menyebabkan frekuensi keluar dari kesalahan rentang ketika tidak ada driver grafik yang diinstal dan tampilan tidak menerima pilihan resolusi yang sewenang -wenang. Menggunakan ikon kursor yang tidak terlihat untuk menyembunyikan mouse, sehingga program yang menabrak tidak akan mengambil kursor ketika mencoba membunuh proses.
- Kerangka kerja antarmuka pengguna grafis Muat antarmuka visual ke jendela Anda menggunakan satu baris kode yang membaca file tata letak atau string. Dapatkan pegangan generik ke komponen menggunakan nama atau kombinasi nama dan indeks. Tambahkan acara dengan memasang fungsi lambda ke callback komponen dan jendela.
- Pengatur waktu mendapatkan detik presisi ganda yang berlalu sejak panggilan pertama ke timer, sehingga Anda tidak perlu khawatir tentang bug tengah malam ketika waktu diatur ulang.
- Lapisan abstraksi simd menggunakan simd.h untuk secara otomatis menghasilkan intrinsik SSE, AVX, dan neon yang sangat efisien dari sintaks matematika yang sepenuhnya dapat dibaca. Kode vektor Anda akan terlihat seperti implementasi referensi dan menyusun untuk arsitektur target yang tidak diketahui akan menghasilkan operasi skalar yang masih dapat memberikan dorongan kinerja dengan menulis algoritma Anda dengan operasi dasar yang paling sering didukung secara langsung dalam perangkat keras CPU, mengakses memori yang diselaraskan dengan compile, menjaga jendela instruksi yang dikemas dengan baik dengan sesuatu, dan membuatnya sangat mudah.
- Pointer aman menggunakan SafePointer.h untuk menangkap lebih banyak kesalahan dengan memberi tahu pointer Anda bagian mana dari alokasi yang dapat dikerjakannya. Tidak meninggalkan overhead dalam versi rilis, sehingga Anda selalu dapat mengganti pointer mentah Anda dengan SafePointer dan tahu bahwa Anda akan mendapatkan pesan kesalahan yang informatif dengan nama pointer dan informasi terperinci ketika sesuatu yang buruk terjadi.
- String Gunakan UTF-32 untuk menyimpan karakter dalam memori untuk memastikan bahwa semua algoritma berfungsi dengan karakter non-Latin (kompatibel dengan u "" string literal). Menyimpan ke file default ke UTF-8 (penyimpanan kompak) dengan BOM (secara eksplisit mengatakan format mana yang digunakan) dan ujung baris CR LF (sehingga file teks yang dikodekan di mana saja dapat dibaca di mana-mana). Menggunakan buffer memori bersama secara otomatis untuk memungkinkan pemisahan ke dalam daftar string tanpa membanjiri tumpukan dengan alokasi kecil.
- Buffer semua file disimpan dan dimuat melalui objek buffer. Ini memastikan bahwa semua format file yang Anda desain hanya perlu khawatir tentang cara menyandikan byte, tes regresi akan mudah dengan tidak melibatkan efek samping eksternal dari sistem file, dan file apa pun dapat dibundel ke dalam sendiri dengan menggunakan buffer yang setara dengan fungsi simpan.
- Manajemen File kira-kira setara dengan STD :: Filesystem dari C ++ 17, tetapi berfungsi dengan C ++ 14, menggunakan string yang sama dan tipe readablestring pada semua platform, dan secara otomatis dapat memperbaiki pemisah folder antara / (POSIX) dan (MS-Windows).
- Manajemen proses dapat memulai aplikasi lain dan melacak status mereka, sehingga Anda dapat memanggil aplikasi seperti fungsi yang menulis hasilnya ke file.
Ringkasan lisensi
Perpustakaan ini terutama menggunakan Lisensi Sumber Terbuka ZLIB, tetapi juga menyertakan Pustaka Gambar STB untuk menyimpan dan memuat gambar, yang memiliki lisensi ganda permisif (MIT / Unlicense). Karena pustaka gambar STB dapat digunakan sebagai domain publik, ia tidak memiliki efek hukum pada penggunaan perpustakaan secara keseluruhan di bawah lisensi sumber terbuka ZLIB. Semua kode sumber yang disertakan dengan semua lisensi mereka memungkinkan penggunaan komersial dan non-komersial, termasuk modifikasi kode sumber yang tidak diungkapkan. Jika Anda tidak mendistribusikan kembali kode sumber, maka Anda tidak perlu memberi tahu siapa pun bahwa Anda menggunakan perpustakaan ini, karena dukungan yang tidak tulus tidak memiliki nilai.
Masih beta publik
Tema, GUI, Font, dan API Sound masih dalam pengembangan aktif dan mungkin memiliki perubahan signifikan sebelum versi 1.0 yang stabil siap, karena beberapa kode hanyalah placeholder primitif sampai implementasi lanjutan dapat menggantikannya, dan seseorang harus mencoba untuk benar -benar menggunakan perpustakaan sebelum masalah kegunaan menjadi jelas. Buffer, file, gambar, gambar, filter, string, dan API waktu sudah cukup stabil versi. Anda dapat memilih untuk tetap dengan versi tertentu untuk setiap proyek baru, terus diperbarui dengan perubahan terbaru, atau menunggu versi 1.0 yang stabil.
Bagaimana Anda bisa membantu
- Port ke Macintosh atau Wayland menggunakan prinsip ketergantungan minimal yang sama.
- Uji versi beta ini dan berikan umpan balik tentang desain sebelum versi 1.0 dirilis.
- Buat berbagai jenis mesin game dengan alat open-source.
Perangkat keras CPU yang didukung:
- Intel/AMD menggunakan intrinsik SSE2 dan ekstensi opsional.
- Lengan menggunakan intrinsik neon .
- Arsitektur CPU yang tidak diketahui, tanpa vektorisasi SIMD sebagai solusi mundur.
Platform:
- Linux , diuji pada mint, mate, manjaro, ubuntu, raspberrypi OS, raspbian (buster atau lebih baru). Linux Mint membutuhkan compiler dan header X11, jadi jalankan "sudo apt install g ++" dan "sudo apt install libx11-dev" sebelum dikompilasi. Saat ini mendukung X11 dan Wayland direncanakan untuk versi mendatang.
- Microsoft Windows , tetapi lebih lambat dari di Linux karena Windows memiliki banyak proses latar belakang dan threading yang lebih lambat dan manajemen memori.
Mungkin juga bekerja pada:
- BSD dan Solaris memiliki kode yang menargetkan platform di FILEAPI.CPP untuk mendapatkan folder aplikasi, tetapi ada kemungkinan beberapa aplikasi yang hilang untuk menjalankan skrip build. Sistem yang sesuai POSIX di masa depan seharusnya hanya memiliki beberapa keanehan untuk memilah jika memiliki server X11.
- Big-Endian didukung secara teori jika memungkinkan makro DSR_BIG_ENDIAN secara global, tetapi ini tidak pernah benar-benar diuji karena kesulitan dengan menargetkan sistem lama dengan kompiler modern.
Belum diangkut ke:
- Macintosh tidak lagi menggunakan X11, sehingga akan membutuhkan upaya porting. Macintosh tidak memiliki tautan simbolis ke biner dari proses berjalan, sehingga akan kembali pada direktori saat ini ketika meminta folder aplikasi.
Tidak akan menargetkan:
- Ponsel. Karena perubahan konstan melanggar kompatibilitas ke belakang pada platform seluler akan mengalahkan tujuan menggunakan kerangka kerja yang lama. Mobile platforms require custom C++ compilers, access to signal processors, screen rotation, battery saving, knowing when to display the virtual keyboard, security permissions, forced full-screen... Trying to do both at the same time would end up with design compromises in both ends like Microsoft Windows 8 or Ubuntu's Unity lock screen, so it would be better to just take bits and pieces into a new library built on different design principles.
- Frontends web. Pembungkus seperti itu di perpustakaan ini tidak akan bisa mendapatkan kekuatan intrinsik SIMD untuk mendefinisikan filter gambar Anda sendiri, jadi Anda akan lebih baik menargetkan bahasa peneduh GPU dari browser yang lebih cocok untuk skrip dinamis.