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.setPipeline(pso);
enc.draw(vbo,ibo);
}
auto sync = device.submit(cmd);
sync.wait();
// save image to file
auto pm = device.readPixels(tex);
pm.save(outImg);The Android packaging example uses add_android_apk in the application's existing CMake project to generate a single Gradle build. It uses Android's built-in NativeActivity; the Tempest Android backend is separate work. Desktop builds do not require Java, the Android SDK or Gradle.
During development various issues of Vulkan stack been found, reported and some were fixed.
-
- MSL: task and mesh shader support
KhronosGroup/SPIRV-Cross#2402
KhronosGroup/SPIRV-Cross#2400
- MSL: task and mesh shader support
-
- MSL: add ray-cull mask
KhronosGroup/SPIRV-Cross#2241
- MSL: add ray-cull mask
-
- 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
-
- MSL: fix extraction of global variables, in case of atomics
KhronosGroup/SPIRV-Cross#2203
- MSL: fix extraction of global variables, in case of atomics
-
- MSL: fix mutability for rayQueryEXT parameters
KhronosGroup/SPIRV-Cross#2201
- MSL: fix mutability for rayQueryEXT parameters
-
- HLSL: Fix unroll, when storing to pointer to array
KhronosGroup/SPIRV-Cross#2205
- HLSL: Fix unroll, when storing to pointer to array
-
- 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