vulkan animation
This commit is contained in:
parent
1d0b7a615b
commit
db1616ff0e
4 changed files with 30 additions and 6 deletions
|
|
@ -88,9 +88,22 @@ int main() {
|
||||||
*/
|
*/
|
||||||
window.FinishInit();
|
window.FinishInit();
|
||||||
|
|
||||||
EventListener<VkCommandBuffer> updateListener(&window.onRender, [&](VkCommandBuffer cmd){
|
Animation<std::tuple<float>> anim({
|
||||||
std::cout << window.currentBuffer << std::endl;
|
{std::chrono::seconds(3), -600, 600},
|
||||||
RenderingElement3DVulkan::BuildTLAS(cmd, window.currentBuffer);
|
});
|
||||||
|
|
||||||
|
anim.Start(std::chrono::high_resolution_clock::now());
|
||||||
|
|
||||||
|
EventListener<void> updateListener(&window.onRender, [&](){
|
||||||
|
float value = std::get<0>(anim.Play(window.currentFrameTime.now));
|
||||||
|
|
||||||
|
if(anim.currentFrame == anim.keyframes.size()) {
|
||||||
|
anim.Start(window.currentFrameTime.now);
|
||||||
|
}
|
||||||
|
|
||||||
|
MatrixRowMajor<float, 4, 3, 1> transform = MatrixRowMajor<float, 4, 3, 1>::Translation(value, 0, 0);
|
||||||
|
std::memcpy(el.instance.transform.matrix, transform.m, sizeof(transform.m));
|
||||||
|
RenderingElement3DVulkan::BuildTLAS(window.drawCmdBuffers[window.currentBuffer], window.currentBuffer);
|
||||||
VkDescriptorImageInfo imageInfo = {
|
VkDescriptorImageInfo imageInfo = {
|
||||||
.imageView = window.imageViews[window.currentBuffer],
|
.imageView = window.imageViews[window.currentBuffer],
|
||||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL
|
.imageLayout = VK_IMAGE_LAYOUT_GENERAL
|
||||||
|
|
@ -123,7 +136,6 @@ int main() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
vkUpdateDescriptorSets(VulkanDevice::device, 2, write, 0, nullptr);
|
vkUpdateDescriptorSets(VulkanDevice::device, 2, write, 0, nullptr);
|
||||||
|
|
||||||
window.descriptorsRt[0] = pool.sets[window.currentBuffer];
|
window.descriptorsRt[0] = pool.sets[window.currentBuffer];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -116,4 +116,14 @@ void RenderingElement3DVulkan::BuildTLAS(VkCommandBuffer cmd, std::uint32_t inde
|
||||||
|
|
||||||
VkAccelerationStructureBuildRangeInfoKHR* tlasRangeInfoPP = &tlasRangeInfo;
|
VkAccelerationStructureBuildRangeInfoKHR* tlasRangeInfoPP = &tlasRangeInfo;
|
||||||
VulkanDevice::vkCmdBuildAccelerationStructuresKHR(cmd, 1, &tlasBuildGeometryInfo, &tlasRangeInfoPP);
|
VulkanDevice::vkCmdBuildAccelerationStructuresKHR(cmd, 1, &tlasBuildGeometryInfo, &tlasRangeInfoPP);
|
||||||
|
|
||||||
|
vkCmdPipelineBarrier(
|
||||||
|
cmd,
|
||||||
|
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
|
||||||
|
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
|
||||||
|
0,
|
||||||
|
0, nullptr,
|
||||||
|
0, nullptr,
|
||||||
|
0, nullptr
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -368,7 +368,7 @@ void WindowVulkan::Render() {
|
||||||
range
|
range
|
||||||
);
|
);
|
||||||
|
|
||||||
onRender.Invoke(drawCmdBuffers[currentBuffer]);
|
onRender.Invoke();
|
||||||
|
|
||||||
vkCmdBindPipeline(drawCmdBuffers[currentBuffer], VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rtPipeline);
|
vkCmdBindPipeline(drawCmdBuffers[currentBuffer], VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rtPipeline);
|
||||||
VkBindDescriptorSetsInfo bindDescriptorSetsInfo{
|
VkBindDescriptorSetsInfo bindDescriptorSetsInfo{
|
||||||
|
|
@ -474,6 +474,7 @@ void WindowVulkan::wl_surface_frame_done(void* data, struct wl_callback *cb, uin
|
||||||
if(window->updating) {
|
if(window->updating) {
|
||||||
cb = wl_surface_frame(window->surface);
|
cb = wl_surface_frame(window->surface);
|
||||||
wl_callback_add_listener(cb, &WindowVulkan::wl_callback_listener, window);
|
wl_callback_add_listener(cb, &WindowVulkan::wl_callback_listener, window);
|
||||||
|
window->currentFrameTime = {start, start-window->lastFrameBegin};
|
||||||
window->onUpdate.Invoke({start, start-window->lastFrameBegin});
|
window->onUpdate.Invoke({start, start-window->lastFrameBegin});
|
||||||
#ifdef CRAFTER_TIMING
|
#ifdef CRAFTER_TIMING
|
||||||
window->totalUpdate = std::chrono::nanoseconds(0);
|
window->totalUpdate = std::chrono::nanoseconds(0);
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ export namespace Crafter {
|
||||||
class MouseElement;
|
class MouseElement;
|
||||||
class Window {
|
class Window {
|
||||||
public:
|
public:
|
||||||
|
FrameTime currentFrameTime;
|
||||||
std::int32_t width;
|
std::int32_t width;
|
||||||
std::int32_t height;
|
std::int32_t height;
|
||||||
std::chrono::time_point<std::chrono::high_resolution_clock> lastFrameBegin;
|
std::chrono::time_point<std::chrono::high_resolution_clock> lastFrameBegin;
|
||||||
|
|
@ -300,7 +301,7 @@ export namespace Crafter {
|
||||||
xkb_keymap* xkb_keymap;
|
xkb_keymap* xkb_keymap;
|
||||||
xkb_context* xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
xkb_context* xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
||||||
xkb_state* xkb_state;
|
xkb_state* xkb_state;
|
||||||
Event<VkCommandBuffer> onRender;
|
Event<void> onRender;
|
||||||
std::vector<VkDescriptorSet> descriptorsRt;
|
std::vector<VkDescriptorSet> descriptorsRt;
|
||||||
void Render();
|
void Render();
|
||||||
void QueueRender();
|
void QueueRender();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue