<feed xmlns='http://www.w3.org/2005/Atom'>
<title>engine.git/src, branch main</title>
<subtitle>Small graphics engine.</subtitle>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/'/>
<entry>
<title>small improvements</title>
<updated>2026-02-16T10:45:19+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-02-16T10:45:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=523b27e38c0978f6513c95f90582e7e5ab160e3d'/>
<id>523b27e38c0978f6513c95f90582e7e5ab160e3d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>more improvements in builds setup</title>
<updated>2026-02-15T14:11:49+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-02-15T14:11:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=7536dd705d121ed3a49b7e4b05af88fd241d1674'/>
<id>7536dd705d121ed3a49b7e4b05af88fd241d1674</id>
<content type='text'>
- moved slang shaders to spvshaders to separate software and hardware
  shaders
- split Makefile.am into Makefile.am, src/Makefile.am and
  src/spvshaders/Makefile.am
- build shaders as DATA primary, instead of both PROGRAMS and SCRIPTS,
  which greatly simplifies building. Before that, we had to first build
  them as PROGRAMS, and then copy them as SCRIPTS to remove executable
  extensions (i.e. ".exe" for Windows)
- changed final executable dir from enginedir to bindir, which makes
  automake see it as an exec instead of data
- compute relative paths from C++, which makes it possible to change
  dirs arbitrarily when running make while still having a relocatable
  executable
- updated README.md to reflect changes in dirs
- use AX_COMPARE_VERSION() to simplify checking if Vulkan headers
  version is correct
- factored out most of paths computation in engine::path_utils::Paths
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- moved slang shaders to spvshaders to separate software and hardware
  shaders
- split Makefile.am into Makefile.am, src/Makefile.am and
  src/spvshaders/Makefile.am
- build shaders as DATA primary, instead of both PROGRAMS and SCRIPTS,
  which greatly simplifies building. Before that, we had to first build
  them as PROGRAMS, and then copy them as SCRIPTS to remove executable
  extensions (i.e. ".exe" for Windows)
- changed final executable dir from enginedir to bindir, which makes
  automake see it as an exec instead of data
- compute relative paths from C++, which makes it possible to change
  dirs arbitrarily when running make while still having a relocatable
  executable
- updated README.md to reflect changes in dirs
- use AX_COMPARE_VERSION() to simplify checking if Vulkan headers
  version is correct
- factored out most of paths computation in engine::path_utils::Paths
</pre>
</div>
</content>
</entry>
<entry>
<title>added back windows cross-compilation</title>
<updated>2026-02-05T09:31:47+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-02-05T09:31:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=ccf086c39f734a000aa3a2fac034f0620021fbdf'/>
<id>ccf086c39f734a000aa3a2fac034f0620021fbdf</id>
<content type='text'>
Makefile.am is too ugly, but I don't have a better solution right now.

- fused Makefile.am and src/Makefile.am
- adding back windows cross-compilation
- improved README.md a lot
- added configure option to enable debug, which greatly simplifies
  development when writing shaders
- removed dependency on LunarG's Vulkan SDK by having dependency only on
  Vulkan headers, library and slangc
- removed print C++ header because I have an old MinGW which doesn't
  support it. It will be restored in the future
- make every assets path relative to be able to build anywhere and run
  elsewhere
- moved stb_image.h inside source directory instead of making it a
  dependency, which is more aligned with stb philosophy
- moved assets inside source code to make it easy to compile and run the
  engine
- improved configure.ac by checking Vulkan headers version directly in
  the configure script instead of within C code, which allows us to also
  do theses checks when cross-compiling
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Makefile.am is too ugly, but I don't have a better solution right now.

- fused Makefile.am and src/Makefile.am
- adding back windows cross-compilation
- improved README.md a lot
- added configure option to enable debug, which greatly simplifies
  development when writing shaders
- removed dependency on LunarG's Vulkan SDK by having dependency only on
  Vulkan headers, library and slangc
- removed print C++ header because I have an old MinGW which doesn't
  support it. It will be restored in the future
- make every assets path relative to be able to build anywhere and run
  elsewhere
- moved stb_image.h inside source directory instead of making it a
  dependency, which is more aligned with stb philosophy
- moved assets inside source code to make it easy to compile and run the
  engine
- improved configure.ac by checking Vulkan headers version directly in
  the configure script instead of within C code, which allows us to also
  do theses checks when cross-compiling
</pre>
</div>
</content>
</entry>
<entry>
<title>added mipmaps for the hw renderer, improvements</title>
<updated>2026-02-03T19:26:01+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-02-03T19:26:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=cbf7d23623b5bb2d2092cb6c86bc965138b4ea75'/>
<id>cbf7d23623b5bb2d2092cb6c86bc965138b4ea75</id>
<content type='text'>
This commit add mipmaps, but for now, mipmaps are generated on the gpu
at runtime. We should generate them in advance.

- added mipmaps for the hardware renderer
- renamed stb_image.c to stb_image.cpp
- add compiler flag to stb_image.cpp to prevent warning
- added pipe notation for various objects to have all clipping functions
  be left to right. We need this for the time being because dot notation
  would considerably complicate the current implementation
- small improvements
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit add mipmaps, but for now, mipmaps are generated on the gpu
at runtime. We should generate them in advance.

- added mipmaps for the hardware renderer
- renamed stb_image.c to stb_image.cpp
- add compiler flag to stb_image.cpp to prevent warning
- added pipe notation for various objects to have all clipping functions
  be left to right. We need this for the time being because dot notation
  would considerably complicate the current implementation
- small improvements
</pre>
</div>
</content>
</entry>
<entry>
<title>improved software shaders</title>
<updated>2026-01-16T23:06:31+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-16T23:06:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=0d10b77f77459333c5549711334f417623ab1f3e'/>
<id>0d10b77f77459333c5549711334f417623ab1f3e</id>
<content type='text'>
- unified terminal and graphical software renderer shaders
- added vertex shaders for software renderers
- removed VertexData
- moved shaders from frame buffers to their own class
- added FrameBufferConcept and ShadersConcept
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- unified terminal and graphical software renderer shaders
- added vertex shaders for software renderers
- removed VertexData
- moved shaders from frame buffers to their own class
- added FrameBufferConcept and ShadersConcept
</pre>
</div>
</content>
</entry>
<entry>
<title>rewrote entirely the triangle clipping algorithm</title>
<updated>2026-01-15T04:15:59+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-15T04:15:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=175c71637b6bea6dcdd0faf3d614339983809bb1'/>
<id>175c71637b6bea6dcdd0faf3d614339983809bb1</id>
<content type='text'>
There is still a lot of work needed to refactor it properly.

- use the Sutherland–Hodgman algorithm, with some minor changes
- made clipping more general, allowing clipping of any coordinate,
  before and after division by w
- compute the z coordinate only at the fragment stage instead of each
  time clipping creates / moves a vertex, in addition to the fragment
  stage
- added VectorCoords to choose at compile-time different coordinates
  based on a template argument
- added transpose struct to allow shuffling of vectors coordinates
- added math::utils::lerp which interpolate linearly a float
- added Vector{2,3,4}::map() which maps a vector from one range to
  another
- added template parameter to DerivedVertex (and therefore
  TriangleDerived) to allow choosing which dimension to use
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is still a lot of work needed to refactor it properly.

- use the Sutherland–Hodgman algorithm, with some minor changes
- made clipping more general, allowing clipping of any coordinate,
  before and after division by w
- compute the z coordinate only at the fragment stage instead of each
  time clipping creates / moves a vertex, in addition to the fragment
  stage
- added VectorCoords to choose at compile-time different coordinates
  based on a template argument
- added transpose struct to allow shuffling of vectors coordinates
- added math::utils::lerp which interpolate linearly a float
- added Vector{2,3,4}::map() which maps a vector from one range to
  another
- added template parameter to DerivedVertex (and therefore
  TriangleDerived) to allow choosing which dimension to use
</pre>
</div>
</content>
</entry>
<entry>
<title>added textures for the hardware renderer</title>
<updated>2026-01-13T01:04:52+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-13T01:04:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=db41d43345ea73cf7c1bbb29448e52ffb822e3e0'/>
<id>db41d43345ea73cf7c1bbb29448e52ffb822e3e0</id>
<content type='text'>
- removed "using" directive in .hpp
- reverse order of arguments for quaternion rotation, i.e. q.rot(v)
  instead of v.rot(q), where q is a quaterinon and v a vector
- pass the inverse of the view matrix to render_and_present_frame, to
  allow light calculation in shaders (we used to just pass the matrix of
  the quaternion of the transformation, i.e. discard scaling and
  translations)
- added another mesh and texture (viking_room) for testing purposes
- added transparent background option
- added Quaternion::look_towards(), which is the equivalent of
  Matrix4::look_at() but only for rotations
- various improvement to .obj parsing
- load texture coordinates from .obj file
- merged duplicate vertices in Mesh::linearize_indices()
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- removed "using" directive in .hpp
- reverse order of arguments for quaternion rotation, i.e. q.rot(v)
  instead of v.rot(q), where q is a quaterinon and v a vector
- pass the inverse of the view matrix to render_and_present_frame, to
  allow light calculation in shaders (we used to just pass the matrix of
  the quaternion of the transformation, i.e. discard scaling and
  translations)
- added another mesh and texture (viking_room) for testing purposes
- added transparent background option
- added Quaternion::look_towards(), which is the equivalent of
  Matrix4::look_at() but only for rotations
- various improvement to .obj parsing
- load texture coordinates from .obj file
- merged duplicate vertices in Mesh::linearize_indices()
</pre>
</div>
</content>
</entry>
<entry>
<title>use enum classes instead of macros</title>
<updated>2026-01-12T21:38:29+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-12T21:38:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=7f08187a46e30925e4563585fab2c6f92400330a'/>
<id>7f08187a46e30925e4563585fab2c6f92400330a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fixed wrong header guard</title>
<updated>2026-01-12T21:30:16+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-12T21:30:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=c6e180ed8ba897620327938dc19f6ee792860fd4'/>
<id>c6e180ed8ba897620327938dc19f6ee792860fd4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>added back the software renderer</title>
<updated>2025-12-31T17:34:54+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2025-12-31T17:34:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=f9c6bd77af826423fba4aeec86b227ccd7102b4e'/>
<id>f9c6bd77af826423fba4aeec86b227ccd7102b4e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
