6

Welcome to the "Building a Simple Engine" tutorial series! This series marks a transition from the foundational Vulkan concepts covered in the previous chapters to a more structured approach focused on building a reusable rendering engine.

A New Learning Approach

While the previous tutorial series focused on introducing individual Vulkan concepts step by step, this series takes a different approach:

This series targets readers who have completed the Vulkan Tutorial and feel comfortable with the fundamentals. We’ll emphasize architectural concepts and design patterns over exhaustive API permutations, so you develop an engine mindset rather than a collection of snippets. Expect to do more independent work: fill in smaller gaps, experiment, and lean on the Vulkan Guide, Samples, and Specification as primary references. If a topic feels too advanced, revisit the original tutorial and return when ready.

What to Expect

The "Building a Simple Engine" series is designed as a starting point for your journey into engine development, not a finishing point. We’ll cover:

  1. Engine Architecture - How to structure your code for flexibility, maintainability, and extensibility.

  2. Resource Management - More sophisticated approaches to handling models, textures, and other assets.

  3. Rendering Techniques - Implementation of modern rendering approaches within an engine framework.

  4. Performance Considerations - How to design your engine with performance in mind.

  5. Publication Considerations - How to prepare your application for distribution in a professional environment, including packaging, deployment, and platform-specific considerations.

Throughout this series, we encourage you to experiment, extend the provided examples, and even challenge some of our design decisions. The best way to learn engine development is by doing, and sometimes by making (and learning from) mistakes.

Throughout our engine implementation, we’re using vk::raii dynamic rendering and C20 modules. The vk::raii namespace provides Resource Acquisition Is Initialization (RAII) wrappers for Vulkan objects, which helps with resource management and makes the code cleaner. Dynamic rendering simplifies the rendering process by eliminating the need for explicit render passes and framebuffers. C20 modules improve code organization, compilation times, and encapsulation compared to traditional header files.

128
submitted 1 week ago by JRepin@lemmy.ml to c/linux@lemmy.ml

This is the 1.6 release that is API and ABI compatible with previous 1.4.x releases. This release contains some of the bigger changes that happened since the 1.4 release last year, including:

  • An LDAC decoder was added for bluetooth.
  • SpanDSP for bluetooth packet loss concealment.
  • Safe parsing and building of PODs in shared memory.
  • Added support for metadata features. This is used to signal that the sync_timeline metadata supports the RELEASE operation.
  • Node commands and events can contain extra user data.
  • Support for more compressed format helper functions to create and parse formats.
  • Support for compile time max channels. The max channels was increased to 128.
  • Support for audio channel layouts was added. This makes it possible to set "audio.layout" = "5.1" instead of the more verbose audio.position = [ FL, FR, FC, LFE, SL, SR ]
  • Support for Capability Params was added. This can be used to negotiate capabilities on a link before format and buffer negotiation takes place.
  • More HDR colortypes are added.
  • Loops now have locking with priority inversion. Most code was adapted to use the faster locks instead of epoll/eventfd to update shared state.
  • Channel position are parsed from EDID data.
  • Channel maps are now set on ALSA.
  • The resampler now supports configurable window functions such as blackman and kaiser windows. The phases are now also calculated with fixed point math, which makes it more accurate.
  • Many bluetooth updates and improvements.
  • The filter-graph has an ffmpeg and ONNX plugin. The ffmpeg plugin can run an audio AVFilterGraph. The ONNX plugin can run some models such as the silero VAD.
  • Many AVB updates. Work is ongoing to merge the Milan protocol.
  • Support for v0 clients was removed.
  • The jack-tunnel module can now autoconnect ports.
  • ROC support multitrack layouts now.
  • Many RTP updates.
  • rlimits can now be set in the config file.
  • Thread reset on fork can now be configured. JACK clients expect this to be disabled.
  • node.exclusive is now enforced.
  • node.reliable enables reliable transport.
  • pw-cat supports sysex and midiclip as well as some more uncompressed formats. Options were added to set the container and codec formats as well as list the supported containers, codecs, layouts and channel names.
  • Documentation updates.
31
submitted 2 weeks ago* (last edited 2 weeks ago) by JRepin@lemmy.ml to c/technology@lemmy.ml

cross-posted from: https://lemmy.ml/post/43288310

In KDE Plasma 6.6 Spectacle can read texts from screenshots, a new on-screen keybord is available for testing, a first-time wizard was added, current theme can be saved as a new global theme, emoji selector got a new easier skin tone selection, you can now connect to a Wi-Fi network via a QR code, application sound volume can be changed by scrolling over a taskbar button via mouse, and there is much more.

128
submitted 2 weeks ago* (last edited 2 weeks ago) by JRepin@lemmy.ml to c/opensource@lemmy.ml

cross-posted from: https://lemmy.ml/post/43288310

In KDE Plasma 6.6 Spectacle can read texts from screenshots, a new on-screen keybord is available for testing, a first-time wizard was added, current theme can be saved as a new global theme, emoji selector got a new easier skin tone selection, you can now connect to a Wi-Fi network via a QR code, application sound volume can be changed by scrolling over a taskbar button via mouse, and there is much more.

260
submitted 2 weeks ago* (last edited 2 weeks ago) by JRepin@lemmy.ml to c/linux@lemmy.ml

cross-posted from: https://lemmy.ml/post/43288310

In KDE Plasma 6.6 Spectacle can read texts from screenshots, a new on-screen keybord is available for testing, a first-time wizard was added, current theme can be saved as a new global theme, emoji selector got a new easier skin tone selection, you can now connect to a Wi-Fi network via a QR code, application sound volume can be changed by scrolling over a taskbar button via mouse, and there is much more.

45
submitted 2 weeks ago* (last edited 2 weeks ago) by JRepin@lemmy.ml to c/kde@lemmy.ml

In KDE Plasma 6.6 Spectacle can read texts from screenshots, a new on-screen keybord is available for testing, a first-time wizard was added, current theme can be saved as a new global theme, emoji selector got a new easier skin tone selection, you can now connect to a Wi-Fi network via a QR code, application sound volume can be changed by scrolling over a taskbar button via mouse, and there is much more.

6
submitted 1 month ago by JRepin@lemmy.ml to c/riscv@lemmy.ml

SpacemiT Key Stone K3 series chips adopt RISC-V isomorphic fusion computing technology, integrating SpacemiT's self-developed 8 high-performance computing cores X100 and 8 ultra-wide parallel computing AI cores A100, providing 130 KDMIPS general computing power and 60TOPS general AI computing power, and can run 30 billion parameter large models smoothly.

K3 series chips are mainly used in AI computers, intelligent robots, personal intelligent computing servers, edge intelligent computing servers, large model inference machines and other fields.

10
submitted 1 month ago by JRepin@lemmy.ml to c/godot@lemmy.ml

cross-posted from: https://lemmy.ml/post/42248941

With the stability gained over the past five releases, the engine has matured enough to enter a new development phase. Godot 4.6 kicks off a period of polish, quality-of-life improvements, tighter integration of industry-standards, and doubled-down effort on performance optimization.

The result: a release that puts you and your workflow first. The new editor theme lets your projects take center stage, while dozens of improvements across the board reduce friction and speed up everyday development. Every aspect, from loading assets to editing, debugging, exporting, and testing, has received some love to keep you focused on creating and minimize the time you spend wrestling with UI, or fiddling with external tools and plugins.

12
submitted 1 month ago by JRepin@lemmy.ml to c/gamedev@lemmy.ml

With the stability gained over the past five releases, the engine has matured enough to enter a new development phase. Godot 4.6 kicks off a period of polish, quality-of-life improvements, tighter integration of industry-standards, and doubled-down effort on performance optimization.

The result: a release that puts you and your workflow first. The new editor theme lets your projects take center stage, while dozens of improvements across the board reduce friction and speed up everyday development. Every aspect, from loading assets to editing, debugging, exporting, and testing, has received some love to keep you focused on creating and minimize the time you spend wrestling with UI, or fiddling with external tools and plugins.

5
submitted 1 month ago by JRepin@lemmy.ml to c/cpp@lemmy.ml

cross-posted from: https://lemmy.ml/post/42242801

Major new features:

  • The ISO C23 free_sized, free_aligned_sized, memset_explicit, and memalignment functions have been added.

  • As specified in ISO C23, the assert macro is defined to take variable arguments to support expressions with a comma inside a compound literal initializer not surrounded by parentheses.

  • For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return pointers into their input arrays now have definitions as macros that return a pointer to a const-qualified type when the input argument is a pointer to a const-qualified type.

  • The ISO C23 typedef names long_double_t, _Float32_t, _Float64_t, and (on platforms supporting _Float128) _Float128_t, introduced in TS 18661-3:2015, have been added to <math.h>.

  • The ISO C23 optional time bases TIME_MONOTONIC, TIME_ACTIVE, and TIME_THREAD_ACTIVE have been added.

  • On Linux, the mseal function has been added. It allows for sealing memory mappings to prevent further changes during process execution, such as changes to protection permissions, unmapping, relocation to another location, or shrinking the size.

  • Additional optimized and correctly rounded mathematical functions have been imported from the CORE-MATH project, in particular acosh, asinh, atanh, erf, erfc, lgamma, and tgamma.

  • Optimized implementations for fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128), and frexpl (intel96) have been added.

  • The SVID handling for acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1, and yn/jn was moved to compat symbols, allowing improvements in performance.

  • Experimental support for building with clang has been added. It requires at least clang version 18, aarch64-linux-gnu or x86_64-linux-gnu targets, and a libgcc compatible runtime (including libgcc_s.so for pthread cancellation and backtrace runtime support).

  • On Linux, the openat2 function has been added. It is an extension of openat and provides a superset of its functionality. It is supported only in LFS mode and is a cancellable entrypoint.

  • On AArch64, support for 2MB transparent huge pages has been enabled by default in malloc (similar to setting glibc.malloc.hugetlb=1 tunable).

  • On AArch64 Linux targets supporting the Scalable Matrix Extension (SME), the clone() system call wrapper will disable the ZA state of the SME.

  • On AArch64 targets supporting the Branch Target Identification (BTI) extension, it is possible to enforce that all binaries in the process support BTI using the glibc.cpu.aarch64_bti tunable.

  • On AArch64 Linux targets supporting at least one of the branch protection extensions (e.g. Branch Target Identification or Guarded Control Stack), it is possible to use LD_DEBUG=security to make the dynamic linker show warning messages about loaded binaries that do not support the corresponding security feature.

  • On AArch64, vector variants of the new C23 exp2m1, exp10m1, log10p1, log2p1, and rsqrt routines have been added.

  • On RISC-V, an RVV-optimized implementation of memset has been added.

  • On x86, support for the Intel Nova Lake and Wildcat Lake processors has been added.

  • The test suite has seen significant improvements in particular around the scanf, strerror, strsignal functions and multithreaded testing.

  • Unicode support has been updated to Unicode 17.0.0.

  • The manual has been updated and modernized, in particular also regarding many of its code examples.

4
submitted 1 month ago by JRepin@lemmy.ml to c/c_programming@lemmy.ml

cross-posted from: https://lemmy.ml/post/42242801

Major new features:

  • The ISO C23 free_sized, free_aligned_sized, memset_explicit, and memalignment functions have been added.

  • As specified in ISO C23, the assert macro is defined to take variable arguments to support expressions with a comma inside a compound literal initializer not surrounded by parentheses.

  • For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return pointers into their input arrays now have definitions as macros that return a pointer to a const-qualified type when the input argument is a pointer to a const-qualified type.

  • The ISO C23 typedef names long_double_t, _Float32_t, _Float64_t, and (on platforms supporting _Float128) _Float128_t, introduced in TS 18661-3:2015, have been added to <math.h>.

  • The ISO C23 optional time bases TIME_MONOTONIC, TIME_ACTIVE, and TIME_THREAD_ACTIVE have been added.

  • On Linux, the mseal function has been added. It allows for sealing memory mappings to prevent further changes during process execution, such as changes to protection permissions, unmapping, relocation to another location, or shrinking the size.

  • Additional optimized and correctly rounded mathematical functions have been imported from the CORE-MATH project, in particular acosh, asinh, atanh, erf, erfc, lgamma, and tgamma.

  • Optimized implementations for fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128), and frexpl (intel96) have been added.

  • The SVID handling for acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1, and yn/jn was moved to compat symbols, allowing improvements in performance.

  • Experimental support for building with clang has been added. It requires at least clang version 18, aarch64-linux-gnu or x86_64-linux-gnu targets, and a libgcc compatible runtime (including libgcc_s.so for pthread cancellation and backtrace runtime support).

  • On Linux, the openat2 function has been added. It is an extension of openat and provides a superset of its functionality. It is supported only in LFS mode and is a cancellable entrypoint.

  • On AArch64, support for 2MB transparent huge pages has been enabled by default in malloc (similar to setting glibc.malloc.hugetlb=1 tunable).

  • On AArch64 Linux targets supporting the Scalable Matrix Extension (SME), the clone() system call wrapper will disable the ZA state of the SME.

  • On AArch64 targets supporting the Branch Target Identification (BTI) extension, it is possible to enforce that all binaries in the process support BTI using the glibc.cpu.aarch64_bti tunable.

  • On AArch64 Linux targets supporting at least one of the branch protection extensions (e.g. Branch Target Identification or Guarded Control Stack), it is possible to use LD_DEBUG=security to make the dynamic linker show warning messages about loaded binaries that do not support the corresponding security feature.

  • On AArch64, vector variants of the new C23 exp2m1, exp10m1, log10p1, log2p1, and rsqrt routines have been added.

  • On RISC-V, an RVV-optimized implementation of memset has been added.

  • On x86, support for the Intel Nova Lake and Wildcat Lake processors has been added.

  • The test suite has seen significant improvements in particular around the scanf, strerror, strsignal functions and multithreaded testing.

  • Unicode support has been updated to Unicode 17.0.0.

  • The manual has been updated and modernized, in particular also regarding many of its code examples.

13
submitted 1 month ago by JRepin@lemmy.ml to c/programming@lemmy.ml

Major new features:

  • The ISO C23 free_sized, free_aligned_sized, memset_explicit, and memalignment functions have been added.

  • As specified in ISO C23, the assert macro is defined to take variable arguments to support expressions with a comma inside a compound literal initializer not surrounded by parentheses.

  • For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return pointers into their input arrays now have definitions as macros that return a pointer to a const-qualified type when the input argument is a pointer to a const-qualified type.

  • The ISO C23 typedef names long_double_t, _Float32_t, _Float64_t, and (on platforms supporting _Float128) _Float128_t, introduced in TS 18661-3:2015, have been added to <math.h>.

  • The ISO C23 optional time bases TIME_MONOTONIC, TIME_ACTIVE, and TIME_THREAD_ACTIVE have been added.

  • On Linux, the mseal function has been added. It allows for sealing memory mappings to prevent further changes during process execution, such as changes to protection permissions, unmapping, relocation to another location, or shrinking the size.

  • Additional optimized and correctly rounded mathematical functions have been imported from the CORE-MATH project, in particular acosh, asinh, atanh, erf, erfc, lgamma, and tgamma.

  • Optimized implementations for fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128), and frexpl (intel96) have been added.

  • The SVID handling for acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1, and yn/jn was moved to compat symbols, allowing improvements in performance.

  • Experimental support for building with clang has been added. It requires at least clang version 18, aarch64-linux-gnu or x86_64-linux-gnu targets, and a libgcc compatible runtime (including libgcc_s.so for pthread cancellation and backtrace runtime support).

  • On Linux, the openat2 function has been added. It is an extension of openat and provides a superset of its functionality. It is supported only in LFS mode and is a cancellable entrypoint.

  • On AArch64, support for 2MB transparent huge pages has been enabled by default in malloc (similar to setting glibc.malloc.hugetlb=1 tunable).

  • On AArch64 Linux targets supporting the Scalable Matrix Extension (SME), the clone() system call wrapper will disable the ZA state of the SME.

  • On AArch64 targets supporting the Branch Target Identification (BTI) extension, it is possible to enforce that all binaries in the process support BTI using the glibc.cpu.aarch64_bti tunable.

  • On AArch64 Linux targets supporting at least one of the branch protection extensions (e.g. Branch Target Identification or Guarded Control Stack), it is possible to use LD_DEBUG=security to make the dynamic linker show warning messages about loaded binaries that do not support the corresponding security feature.

  • On AArch64, vector variants of the new C23 exp2m1, exp10m1, log10p1, log2p1, and rsqrt routines have been added.

  • On RISC-V, an RVV-optimized implementation of memset has been added.

  • On x86, support for the Intel Nova Lake and Wildcat Lake processors has been added.

  • The test suite has seen significant improvements in particular around the scanf, strerror, strsignal functions and multithreaded testing.

  • Unicode support has been updated to Unicode 17.0.0.

  • The manual has been updated and modernized, in particular also regarding many of its code examples.

[-] JRepin@lemmy.ml 71 points 1 year ago* (last edited 1 year ago)

Well and behind it is stealing other peoples' work (posts and comments, moderation and administration) and selling them as yours. The oldest capitalist criminal trick in the book: privatization AKA primitive accumulation AKA enclosure of the commons.

[-] JRepin@lemmy.ml 43 points 1 year ago* (last edited 1 year ago)

KDE Plasma on all my computers and also as desktop mode on Steam Deck. because it supports the latest technologies especially when it comes to graphics (HDR, VRR) also has best support for Wayland and multi-monitors. It looks great out of the box and it has a lot of features out of the box and I do not need to battle with adding some extensions that break with almost every update. KDE Plasma is also the most flexible desktop and I can set the workflow really to fit my desires and I can actually set many options and settings. And despite all these built-in features and configurability it still uses very few system resources and is very fast and smooth. Oh and the KDE community is one of the most welcoming I have met in FOSS world, and they listen to their users instead of the our way or the high way mentality I have so often encountered in GNOME for example. So yeah TLDR KDE Plasma is the one I like the most of all in the industry, even when compared to proprietary closed alternatives.

[-] JRepin@lemmy.ml 67 points 1 year ago

It would hurt this sociopath Bezos a lot more if people also canceled Amazon services en mass

[-] JRepin@lemmy.ml 96 points 1 year ago

It would hurt this sociopath Bezos a lot more if people also canceled Amazon services en mass

[-] JRepin@lemmy.ml 214 points 1 year ago

It would hurt this sociopath Bezos a lot more if people also canceled Amazon services en mass

[-] JRepin@lemmy.ml 33 points 1 year ago

It would hurt this sociopath Bezos a lot more if people canceled Amazon services en mass

[-] JRepin@lemmy.ml 33 points 1 year ago* (last edited 1 year ago)

These GAFAM/BigTech corporations really are in a tough and fierce competition of which one is the shittiest and most privacy-invading don't they. Ensittification overdrive mode in all of them.

[-] JRepin@lemmy.ml 49 points 1 year ago

Best to switch to Firefox anyways, or even better privacy enhanced LibreWolf

This project is a custom and independent version of Firefox, with the primary goals of privacy, security and user freedom. LibreWolf is designed to increase protection against tracking and fingerprinting techniques, while also including a few security improvements. This is achieved through our privacy and security oriented settings and patches. LibreWolf also aims to remove all the telemetry, data collection and annoyances, as well as disabling anti-freedom features like DRM.

[-] JRepin@lemmy.ml 39 points 1 year ago

And instead of the heaviest of sanctions imposed on genocidal Israel, some countries are even sending them more weapons. Leaders of all should imprisoned for war crimes and helping with warcrimes and crimes against humanity.

[-] JRepin@lemmy.ml 30 points 1 year ago

Oh how I wish those TV manufacturers would get rid of HDMI and replace it with DisplyPort. HDMI mafia does not allow opensource implementations of HDMI specification and so not all latest features of it can be supported by graphics card drivers on GNU/Linux. Death to HDMI!

[-] JRepin@lemmy.ml 34 points 2 years ago

Or they just found out that Windows process scheduler is still broken beyond repair. If you look at the benchmarks on GNU/Linux performance is all there. For example see Phoronix benchmark

[-] JRepin@lemmy.ml 56 points 2 years ago* (last edited 2 years ago)

One way of greatly improving ROCm installation process would be to use the Open Build Service which allows to use the single spec file to produce packages for many supported GNU/Linux distributions and versions of them. I opened a feature request about this.

view more: next ›

JRepin

joined 2 years ago
MODERATOR OF