Crossplatform 3d engine. (work in progress)
Tempest is an open-source, simple, cross-platform graphics engine written in modern C++17.
Main idea behind this engine is to provide a low-level GPU-programming concepts, like Ubo, Vbo, Ssbo, in convenient C++ packaging, with RAII, types and templates.
- Multiplatform (Windows, Linux, 32bit and 64bit)
- Multibackend (Vulkan 1.0, DirectX12)
- Multithreaded command buffers and thread safety
- Build-in 2d graphics support
- Build-in UI library
// offscreen render
VulkanApi api;
Device device(api);
static const Vertex vboData[3] = {{-1,-1},{1,-1},{1,1}};
static const uint16_t iboData[3] = {0,1,2};
auto vbo = device.vbo(vboData,3);
auto ibo = device.ibo(iboData,3);
auto vert = device.shader("shader/simple_test.vert.sprv");
auto frag = device.shader("shader/simple_test.frag.sprv");
auto pso = device.pipeline(Topology::Triangles,RenderState(),vert,frag);
auto tex = device.attachment(format,128,128);
auto cmd = device.commandBuffer();
{
auto enc = cmd.startEncoding(device);
enc.setFramebuffer({{tex,Vec4(0,0,1,1),Tempest::Preserve}});
enc.setUniforms(pso);
enc.draw(vbo,ibo);
}
auto sync = device.fence();
device.submit(cmd,sync);
sync.wait();
// save image to file
auto pm = device.readPixels(tex);
pm.save(outImg);
During development various issues of Vulkan stack been found, reported and some were fixed.
-
- State tracking of VkCopyDescriptorSet for KHR-acceleration-structure
KhronosGroup/Vulkan-ValidationLayers#4219
- State tracking of VkCopyDescriptorSet for KHR-acceleration-structure
-
- MSL: runtime array over argument buffers
KhronosGroup/SPIRV-Cross#2179 KhronosGroup/SPIRV-Cross#2184
- MSL: runtime array over argument buffers
-
- MSL: fix mutability for rayQueryEXT parameters
KhronosGroup/SPIRV-Cross#2201
- MSL: fix mutability for rayQueryEXT parameters
-
- MSL: RayQuery implementation is incomplete
KhronosGroup/SPIRV-Cross#2115
- MSL: RayQuery implementation is incomplete
-
- HLSL: Add mesh shader support
KhronosGroup/SPIRV-Cross#2052
- HLSL: Add mesh shader support
-
- HLSL: Add task(amplification) shader support
KhronosGroup/SPIRV-Cross#2124
- HLSL: Add task(amplification) shader support
-
- HLSL: Cannot subdivide a scalar value exception
KhronosGroup/SPIRV-Cross#2196
- HLSL: Cannot subdivide a scalar value exception
-
- Mesh shader: fix implicit index-array size calculation for lines and triangles
KhronosGroup/glslang#3050
- Mesh shader: fix implicit index-array size calculation for lines and triangles
-
- Fix crash in HLSL frontend
KhronosGroup/glslang#2916
- Fix crash in HLSL frontend
-
- stb_image: fix CRC reading at the end of IEND chunk in png file
nothings/stb#835
- stb_image: fix CRC reading at the end of IEND chunk in png file
-
- [HLSL] SPIRV_Cross_VertexInfo is not relieble
KhronosGroup/SPIRV-Cross#2032
- [HLSL] SPIRV_Cross_VertexInfo is not relieble
-
- HLSL: link error: Signatures between stages are incompatible
KhronosGroup/SPIRV-Cross#1691
- HLSL: link error: Signatures between stages are incompatible
-
- HLSL: error X4503: output TEXCOORD2 used more than once
KhronosGroup/SPIRV-Cross#1645
- HLSL: error X4503: output TEXCOORD2 used more than once
-
- HLSL: crash, while compiling HULL shader
KhronosGroup/glslang#2914
- HLSL: crash, while compiling HULL shader
-
- MSL: invalid codegen, when using rayquery
KhronosGroup/SPIRV-Cross#1910
- MSL: invalid codegen, when using rayquery
-
- SPIR-V -> HLSL : cross compiling bindings overlap
KhronosGroup/SPIRV-Cross#2064
- SPIR-V -> HLSL : cross compiling bindings overlap
-
- Component swizzling of gl_MeshVerticesEXT[].gl_Position, produces invalid code
KhronosGroup/glslang#3058
- Component swizzling of gl_MeshVerticesEXT[].gl_Position, produces invalid code