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
compile_commands.json
vendor
ktx/build
+37 -37
View File
@@ -5,57 +5,57 @@
*/
struct VSInput {
float3 Pos;
float3 Normal;
float3 Pos;
float3 Normal;
float2 UV;
};
Sampler2D textures[];
struct ShaderData {
float4x4 projection;
float4x4 view;
float4x4 model[3];
float4 lightPos;
uint32_t selected;
float4x4 projection;
float4x4 view;
float4x4 model[3];
float4 lightPos;
uint32_t selected;
};
struct VSOutput {
float4 Pos : SV_POSITION;
float3 Normal;
float2 UV;
float3 Factor;
float3 LightVec;
float3 ViewVec;
uint32_t InstanceIndex;
float4 Pos : SV_POSITION;
float3 Normal;
float2 UV;
float3 Factor;
float3 LightVec;
float3 ViewVec;
uint32_t InstanceIndex;
};
[shader("vertex")]
VSOutput main(VSInput input, uniform ShaderData *shaderData, uint instanceIndex : SV_VulkanInstanceID) {
VSOutput output;
float4x4 modelMat = shaderData->model[instanceIndex];
output.Normal = mul((float3x3)mul(shaderData->view, modelMat), input.Normal);
output.UV = input.UV;
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.InstanceIndex = instanceIndex;
// Calculate view vectors required for lighting
float4 fragPos = mul(mul(shaderData->view, modelMat), float4(input.Pos.xyz, 1.0));
output.LightVec = shaderData->lightPos.xyz - fragPos.xyz;
output.ViewVec = -fragPos.xyz;
return output;
VSOutput output;
float4x4 modelMat = shaderData->model[instanceIndex];
output.Normal = mul((float3x3)mul(shaderData->view, modelMat), input.Normal);
output.UV = input.UV;
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.InstanceIndex = instanceIndex;
// Calculate view vectors required for lighting
float4 fragPos = mul(mul(shaderData->view, modelMat), float4(input.Pos.xyz, 1.0));
output.LightVec = shaderData->lightPos.xyz - fragPos.xyz;
output.ViewVec = -fragPos.xyz;
return output;
}
[shader("fragment")]
float4 main(VSOutput input) {
// Phong lighting
float3 N = normalize(input.Normal);
float3 L = normalize(input.LightVec);
float3 V = normalize(input.ViewVec);
float3 R = reflect(-L, N);
float3 diffuse = max(dot(N, L), 0.0025);
float3 specular = pow(max(dot(R, V), 0.0), 16.0) * 0.75;
// Sample from texture
float3 color = textures[NonUniformResourceIndex(input.InstanceIndex)].Sample(input.UV).rgb * input.Factor;
return float4(diffuse * color.rgb + specular, 1.0);
}
// Phong lighting
float3 N = normalize(input.Normal);
float3 L = normalize(input.LightVec);
float3 V = normalize(input.ViewVec);
float3 R = reflect(-L, N);
float3 diffuse = max(dot(N, L), 0.0025);
float3 specular = pow(max(dot(R, V), 0.0), 16.0) * 0.75;
// Sample from texture
float3 color = textures[NonUniformResourceIndex(input.InstanceIndex)].Sample(input.UV).rgb * input.Factor;
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_CXX_STANDARD=17 \
-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 --install ktx/build
}
@@ -17,7 +18,7 @@ build_ktx () {
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 -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 () {
+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