Compare commits

...

13 Commits

Author SHA1 Message Date
abdelrahman 2cdfcde5a3 Add swapchain recreation. Needs debugging though 2026-06-21 20:51:46 +01:00
abdelrahman ef12ba03d8 Bug fixes 2026-06-21 20:09:54 +01:00
abdelrahman a425166018 Render loop 2026-06-21 17:02:09 +01:00
abdelrahman f253b6f683 Build executable with RPATH 2026-06-21 17:02:02 +01:00
abdelrahman 2fb5eb1dd7 Reorder includes 2026-06-21 14:28:36 +01:00
abdelrahman 09239c0cda Add graphics pipeline 2026-06-21 14:27:23 +01:00
abdelrahman 44a34ed0a2 Fix return 2026-06-21 00:55:12 +01:00
abdelrahman e8a40e04a9 Load shaders and create shader module 2026-06-21 00:53:03 +01:00
abdelrahman 26ab321641 Add descriptors 2026-06-20 21:00:19 +01:00
abdelrahman 19e7382ff7 Don't hide temp memory triggers 2026-06-20 17:54:04 +01:00
abdelrahman 49b9f5778a Load textures 2026-06-20 17:50:14 +01:00
abdelrahman 2b1ba018ab Ignore ktx build directory 2026-06-20 17:49:58 +01:00
abdelrahman c87a0fa78a Switch to using Ninja for building KTX 2026-06-20 17:49:50 +01:00
5 changed files with 916 additions and 59 deletions
+1
View File
@@ -2,3 +2,4 @@
main main
compile_commands.json compile_commands.json
vendor vendor
ktx/build
+37 -37
View File
@@ -5,57 +5,57 @@
*/ */
struct VSInput { struct VSInput {
float3 Pos; float3 Pos;
float3 Normal; float3 Normal;
float2 UV; float2 UV;
}; };
Sampler2D textures[]; Sampler2D textures[];
struct ShaderData { struct ShaderData {
float4x4 projection; float4x4 projection;
float4x4 view; float4x4 view;
float4x4 model[3]; float4x4 model[3];
float4 lightPos; float4 lightPos;
uint32_t selected; uint32_t selected;
}; };
struct VSOutput { struct VSOutput {
float4 Pos : SV_POSITION; float4 Pos : SV_POSITION;
float3 Normal; float3 Normal;
float2 UV; float2 UV;
float3 Factor; float3 Factor;
float3 LightVec; float3 LightVec;
float3 ViewVec; float3 ViewVec;
uint32_t InstanceIndex; uint32_t InstanceIndex;
}; };
[shader("vertex")] [shader("vertex")]
VSOutput main(VSInput input, uniform ShaderData *shaderData, uint instanceIndex : SV_VulkanInstanceID) { VSOutput main(VSInput input, uniform ShaderData *shaderData, uint instanceIndex : SV_VulkanInstanceID) {
VSOutput output; VSOutput output;
float4x4 modelMat = shaderData->model[instanceIndex]; float4x4 modelMat = shaderData->model[instanceIndex];
output.Normal = mul((float3x3)mul(shaderData->view, modelMat), input.Normal); output.Normal = mul((float3x3)mul(shaderData->view, modelMat), input.Normal);
output.UV = input.UV; output.UV = input.UV;
output.Pos = mul(shaderData->projection, mul(shaderData->view, mul(modelMat, float4(input.Pos.xyz, 1.0)))); output.Pos = mul(shaderData->projection, mul(shaderData->view, mul(modelMat, float4(input.Pos.xyz, 1.0))));
output.Factor = (shaderData->selected == instanceIndex ? 3.0f : 1.0f); output.Factor = (shaderData->selected == instanceIndex ? 3.0f : 1.0f);
output.InstanceIndex = instanceIndex; output.InstanceIndex = instanceIndex;
// Calculate view vectors required for lighting // Calculate view vectors required for lighting
float4 fragPos = mul(mul(shaderData->view, modelMat), float4(input.Pos.xyz, 1.0)); float4 fragPos = mul(mul(shaderData->view, modelMat), float4(input.Pos.xyz, 1.0));
output.LightVec = shaderData->lightPos.xyz - fragPos.xyz; output.LightVec = shaderData->lightPos.xyz - fragPos.xyz;
output.ViewVec = -fragPos.xyz; output.ViewVec = -fragPos.xyz;
return output; return output;
} }
[shader("fragment")] [shader("fragment")]
float4 main(VSOutput input) { float4 main(VSOutput input) {
// Phong lighting // Phong lighting
float3 N = normalize(input.Normal); float3 N = normalize(input.Normal);
float3 L = normalize(input.LightVec); float3 L = normalize(input.LightVec);
float3 V = normalize(input.ViewVec); float3 V = normalize(input.ViewVec);
float3 R = reflect(-L, N); float3 R = reflect(-L, N);
float3 diffuse = max(dot(N, L), 0.0025); float3 diffuse = max(dot(N, L), 0.0025);
float3 specular = pow(max(dot(R, V), 0.0), 16.0) * 0.75; float3 specular = pow(max(dot(R, V), 0.0), 16.0) * 0.75;
// Sample from texture // Sample from texture
float3 color = textures[NonUniformResourceIndex(input.InstanceIndex)].Sample(input.UV).rgb * input.Factor; float3 color = textures[NonUniformResourceIndex(input.InstanceIndex)].Sample(input.UV).rgb * input.Factor;
return float4(diffuse * color.rgb + specular, 1.0); return float4(diffuse * color.rgb + specular, 1.0);
} }
+3 -2
View File
@@ -9,7 +9,8 @@ build_ktx () {
-D CMAKE_INSTALL_PREFIX=$(realpath vendor) \ -D CMAKE_INSTALL_PREFIX=$(realpath vendor) \
-D CMAKE_CXX_STANDARD=17 \ -D CMAKE_CXX_STANDARD=17 \
-D CMAKE_BUILD_TYPE=Release \ -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_CXX_FLAGS="-msse4.1" -D CMAKE_CXX_FLAGS="-msse4.1" \
-G Ninja
cmake --build ktx/build --config Release cmake --build ktx/build --config Release
cmake --install ktx/build cmake --install ktx/build
} }
@@ -17,7 +18,7 @@ build_ktx () {
build_app () { build_app () {
bear -- clang++ -g -c -Wno-nullability-completeness -DVK_NO_PROTOTYPES -I$VULKAN_SDK/include -Ivendor/include vulkan_profiles/vulkan_profiles.cpp main.cpp bear -- clang++ -g -c -Wno-nullability-completeness -DVK_NO_PROTOTYPES -I$VULKAN_SDK/include -Ivendor/include vulkan_profiles/vulkan_profiles.cpp main.cpp
bear -a -- clang -g -c -DVK_NO_PROTOTYPES -Ivulkan_profiles -I$VULKAN_SDK/include $VULKAN_SDK/include/volk/volk.c wapp/wapp.c bear -a -- clang -g -c -DVK_NO_PROTOTYPES -Ivulkan_profiles -I$VULKAN_SDK/include $VULKAN_SDK/include/volk/volk.c wapp/wapp.c
bear -a -- clang++ -g -DVK_NO_PROTOTYPES -Lvendor/lib -lSDL3 -lglm -ltinyobjloader -lktx -o main *.o bear -a -- clang++ -g -DVK_NO_PROTOTYPES -L$VULKAN_SDK/lib -Lvendor/lib -lSDL3 -lglm -ltinyobjloader -lktx -lslang -Wl,-rpath,./vendor/lib -Wl,-rpath,$VULKAN_SDK/lib -o main *.o
} }
clean_obj () { clean_obj () {
+875 -17
View File
File diff suppressed because it is too large Load Diff
-3
View File
@@ -1,3 +0,0 @@
#!/bin/bash
LD_LIBRARY_PATH=vendor/lib/:$LD_LIBRARY_PATH ./main