fixed up build script and improved render functions
This commit is contained in:
parent
3279fabb1b
commit
f661493c39
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
build
|
||||||
19
build.sh
19
build.sh
@ -24,13 +24,12 @@ source_files="../src/main.c"
|
|||||||
include_flags="-I../src/ -I../external/ -L."
|
include_flags="-I../src/ -I../external/ -L."
|
||||||
|
|
||||||
# executable name
|
# executable name
|
||||||
out_name="GearWorks"
|
out_name="Gears"
|
||||||
|
|
||||||
# vma flags
|
# vma flags
|
||||||
vma_ld="ld -static vma.o `g++ -print-file-name=libstdc++.a` -o vmastdc++.o"
|
|
||||||
vma_source_files="../external/vma/vma.cpp"
|
vma_source_files="../external/vma/vma.cpp"
|
||||||
vma_compile_flags="-std=c++20 -I../external/vma"
|
vma_compile_flags="-std=c++20 -I../external/vma -c"
|
||||||
vma_out="-c -o"
|
vma_out="-o"
|
||||||
vma_obj="vma.o"
|
vma_obj="vma.o"
|
||||||
|
|
||||||
# glslc
|
# glslc
|
||||||
@ -51,10 +50,10 @@ clang_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${clang_common} ${auto_compile_f
|
|||||||
clang_link="-lpthread -lm -lrt -ldl -l:libvma.a"
|
clang_link="-lpthread -lm -lrt -ldl -l:libvma.a"
|
||||||
clang_out="-o"
|
clang_out="-o"
|
||||||
|
|
||||||
gcc_common="${include_flags} -fuse-ld=mold -g -Wno-unknown-warning-option -Wall -Wno-missing-braces -Wno-unused-function -Wno-attributes -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-compare-distinct-pointer-types -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf -DVMA_STATIC_VULKAN_FUNCTIONS=0"
|
gcc_common="${include_flags} -std=c99 -fuse-ld=mold -g -Wno-unknown-warning-option -Wall -Wno-missing-braces -Wno-unused-function -Wno-attributes -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-compare-distinct-pointer-types -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf -DVMA_STATIC_VULKAN_FUNCTIONS=0"
|
||||||
gcc_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${gcc_common} ${auto_compile_flags}"
|
gcc_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${gcc_common} ${auto_compile_flags}"
|
||||||
gcc_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${gcc_common} ${auto_compile_flags}"
|
gcc_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${gcc_common} ${auto_compile_flags}"
|
||||||
gcc_link="-lpthread -lm -lrt -ldl -l:libvma.a"
|
gcc_link="-lpthread -lm -lrt -ldl -l:libvma.a -lstdc++"
|
||||||
gcc_out="-o"
|
gcc_out="-o"
|
||||||
|
|
||||||
link_dll="-fPIC"
|
link_dll="-fPIC"
|
||||||
@ -77,11 +76,6 @@ mkdir -p build
|
|||||||
|
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
if [ ! -f $vma_obj ]; then
|
|
||||||
$vma_ld
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -v vulkan ]; then
|
if [ -v vulkan ]; then
|
||||||
mkdir -p ./shaders/glsl
|
mkdir -p ./shaders/glsl
|
||||||
mkdir -p ../src/file_data
|
mkdir -p ../src/file_data
|
||||||
@ -115,7 +109,8 @@ fi
|
|||||||
|
|
||||||
$cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj
|
$cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj
|
||||||
|
|
||||||
ar rcs libvma.a vmastdc++.o
|
ar rcs libvma.a vma.o
|
||||||
|
|
||||||
$compile $source_files $compile_link $link_os_gfx $out $out_name
|
$compile $source_files $compile_link $link_os_gfx $out $out_name
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -308,13 +308,10 @@ b32 HandleWindowEvent(WindowEvent *event, b32 wait_for_event)
|
|||||||
linux_window.h = expose_e->height;
|
linux_window.h = expose_e->height;
|
||||||
break;
|
break;
|
||||||
case XCB_CONFIGURE_NOTIFY:
|
case XCB_CONFIGURE_NOTIFY:
|
||||||
Printfln("configure notify");
|
|
||||||
xcb_configure_notify_event_t *configure_event = (xcb_configure_notify_event_t *)e;
|
xcb_configure_notify_event_t *configure_event = (xcb_configure_notify_event_t *)e;
|
||||||
|
|
||||||
if (linux_window.w != configure_event->width || linux_window.h != configure_event->height)
|
if (linux_window.w != configure_event->width || linux_window.h != configure_event->height)
|
||||||
{
|
{
|
||||||
|
|
||||||
Printfln("inner w %d h %d", configure_event->width, configure_event->height);
|
|
||||||
event->type = EVENT_RESIZE;
|
event->type = EVENT_RESIZE;
|
||||||
valid_event = true;
|
valid_event = true;
|
||||||
|
|
||||||
|
|||||||
@ -108,22 +108,10 @@ b32 _BeginFrame()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
if (success)
|
||||||
}
|
|
||||||
|
|
||||||
void _ClearScreen()
|
|
||||||
{
|
{
|
||||||
|
TransitionImage(cmd, &renderer.vk.sc.draw_img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||||
}
|
TransitionImage(cmd, &renderer.vk.sc.depth_img, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
|
||||||
|
|
||||||
void _DrawTriangle()
|
|
||||||
{
|
|
||||||
u32 f_ix = renderer.frame_state.frame_cnt % renderer.vk.sc.img_count;
|
|
||||||
|
|
||||||
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
|
||||||
|
|
||||||
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
|
||||||
TransitionImage(cmd, renderer.vk.sc.depth_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
|
|
||||||
|
|
||||||
VkRenderingAttachmentInfo col_attach_info = {
|
VkRenderingAttachmentInfo col_attach_info = {
|
||||||
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||||
@ -156,6 +144,19 @@ void _DrawTriangle()
|
|||||||
};
|
};
|
||||||
|
|
||||||
vkCmdBeginRendering(cmd, &render_info);
|
vkCmdBeginRendering(cmd, &render_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _ClearScreen()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void _DrawTriangle()
|
||||||
|
{
|
||||||
|
VkCommandBuffer cmd = GetFrameCmdBuf();
|
||||||
|
|
||||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipelines[PIPELINE_CUBE]);
|
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipelines[PIPELINE_CUBE]);
|
||||||
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipeline_layout, 0, DESC_TYPE_MAX, renderer.vk.pipe.sets, 0, NULL);
|
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipeline_layout, 0, DESC_TYPE_MAX, renderer.vk.pipe.sets, 0, NULL);
|
||||||
@ -187,18 +188,16 @@ b32 _FinishFrame()
|
|||||||
b32 success = true;
|
b32 success = true;
|
||||||
VkResult result;
|
VkResult result;
|
||||||
|
|
||||||
u32 f_ix = renderer.frame_state.frame_cnt % renderer.vk.sc.img_count;
|
VkCommandBuffer cmd = GetFrameCmdBuf();
|
||||||
|
VkSemaphore sc_sem = GetFrameSwapSem();
|
||||||
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
VkSemaphore rndr_sem = GetFrameRenderSem();
|
||||||
VkSemaphore sc_sem = renderer.vk.frame.swapchain_sems[f_ix];
|
VkFence *fence = GetFrameRenderFence();
|
||||||
VkSemaphore rndr_sem = renderer.vk.frame.render_sems[f_ix];
|
|
||||||
VkFence fence = renderer.vk.frame.render_fences[f_ix];
|
|
||||||
VkImage curr_img = renderer.vk.sc.imgs[renderer.frame_state.img_ix];
|
VkImage curr_img = renderer.vk.sc.imgs[renderer.frame_state.img_ix];
|
||||||
|
|
||||||
vkCmdEndRendering(cmd);
|
vkCmdEndRendering(cmd);
|
||||||
|
|
||||||
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
TransitionImage(cmd, &renderer.vk.sc.draw_img, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||||
TransitionImage(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
TransitionImageLayout(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
|
|
||||||
VkExtent2D extent = {
|
VkExtent2D extent = {
|
||||||
.width = renderer.vk.sc.extent.width,
|
.width = renderer.vk.sc.extent.width,
|
||||||
@ -207,7 +206,7 @@ b32 _FinishFrame()
|
|||||||
|
|
||||||
CopyImageToImage(cmd, renderer.vk.sc.draw_img.img, curr_img, extent, extent);
|
CopyImageToImage(cmd, renderer.vk.sc.draw_img.img, curr_img, extent, extent);
|
||||||
|
|
||||||
TransitionImage(cmd, curr_img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
|
TransitionImageLayout(cmd, curr_img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
|
||||||
|
|
||||||
result = vkEndCommandBuffer(cmd);
|
result = vkEndCommandBuffer(cmd);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
@ -247,7 +246,7 @@ b32 _FinishFrame()
|
|||||||
.pCommandBufferInfos = &cmd_info,
|
.pCommandBufferInfos = &cmd_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
result = vkQueueSubmit2(renderer.vk.queues.graphics_queue, 1, &submit_info, fence);
|
result = vkQueueSubmit2(renderer.vk.queues.graphics_queue, 1, &submit_info, *fence);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
{
|
{
|
||||||
Printf("vkQueueSubmit2 failure: %s", VkResultStr(result));
|
Printf("vkQueueSubmit2 failure: %s", VkResultStr(result));
|
||||||
@ -357,7 +356,7 @@ static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkEx
|
|||||||
vkCmdBlitImage2(cmd, &blit_info);
|
vkCmdBlitImage2(cmd, &blit_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new)
|
static void TransitionImageLayout(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new)
|
||||||
{
|
{
|
||||||
VkImageMemoryBarrier2 barrier = {
|
VkImageMemoryBarrier2 barrier = {
|
||||||
.sType = STYPE(IMAGE_MEMORY_BARRIER_2),
|
.sType = STYPE(IMAGE_MEMORY_BARRIER_2),
|
||||||
@ -386,6 +385,12 @@ static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr
|
|||||||
vkCmdPipelineBarrier2(cmd, &dep_info);
|
vkCmdPipelineBarrier2(cmd, &dep_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void TransitionImage(VkCommandBuffer cmd, Image *img, VkImageLayout new)
|
||||||
|
{
|
||||||
|
TransitionImageLayout(cmd, img->img, img->curr_layout, new);
|
||||||
|
img->curr_layout = new;
|
||||||
|
}
|
||||||
|
|
||||||
// INIT
|
// INIT
|
||||||
|
|
||||||
static b32 InitVulkan(Arena *arena)
|
static b32 InitVulkan(Arena *arena)
|
||||||
@ -989,7 +994,9 @@ static b32 CreateDrawImages()
|
|||||||
// Setting values
|
// Setting values
|
||||||
renderer.vk.sc.extent = extent;
|
renderer.vk.sc.extent = extent;
|
||||||
renderer.vk.sc.depth_img.fmt = depth_image_create_info.format;
|
renderer.vk.sc.depth_img.fmt = depth_image_create_info.format;
|
||||||
|
renderer.vk.sc.depth_img.curr_layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
renderer.vk.sc.draw_img.fmt = draw_image_create_info.format;
|
renderer.vk.sc.draw_img.fmt = draw_image_create_info.format;
|
||||||
|
renderer.vk.sc.draw_img.curr_layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
@ -1383,3 +1390,4 @@ static VkBool32 DebugCallback(
|
|||||||
return VK_FALSE;
|
return VK_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -196,6 +196,7 @@ typedef struct {
|
|||||||
VkImageView view;
|
VkImageView view;
|
||||||
VmaAllocation alloc;
|
VmaAllocation alloc;
|
||||||
VkFormat fmt;
|
VkFormat fmt;
|
||||||
|
VkImageLayout curr_layout;
|
||||||
} Image;
|
} Image;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -282,6 +283,7 @@ static VkFence *GetFrameRenderFence();
|
|||||||
static VkSemaphore GetFrameRenderSem();
|
static VkSemaphore GetFrameRenderSem();
|
||||||
static VkSemaphore GetFrameSwapSem();
|
static VkSemaphore GetFrameSwapSem();
|
||||||
static u32 GetFrameIndex();
|
static u32 GetFrameIndex();
|
||||||
|
static VkImage GetFrameSwapImage();
|
||||||
|
|
||||||
// Destroy
|
// Destroy
|
||||||
static void DestroyVulkan();
|
static void DestroyVulkan();
|
||||||
@ -289,7 +291,8 @@ static void DestroySwapchain();
|
|||||||
static void DestroyDrawImages();
|
static void DestroyDrawImages();
|
||||||
|
|
||||||
// Util
|
// Util
|
||||||
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new);
|
static void TransitionImage(VkCommandBuffer cmd, Image *img, VkImageLayout new);
|
||||||
|
static void TransitionImageLayout(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new);
|
||||||
static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext);
|
static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext);
|
||||||
|
|
||||||
// Swapchain
|
// Swapchain
|
||||||
@ -343,3 +346,4 @@ static b32 _BeginFrame();
|
|||||||
static void _DrawTriangle();
|
static void _DrawTriangle();
|
||||||
static b32 _FinishFrame();
|
static b32 _FinishFrame();
|
||||||
static void _SetRenderSize(u32 x, u32 y);
|
static void _SetRenderSize(u32 x, u32 y);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user