Correctly renamed texture samplers
This commit is contained in:
parent
93e91d7902
commit
5f07c593b3
3 changed files with 19 additions and 19 deletions
|
|
@ -35,17 +35,17 @@ layout(push_constant) uniform pc {
|
||||||
int light_count;
|
int light_count;
|
||||||
} pushConstants;
|
} pushConstants;
|
||||||
|
|
||||||
layout (set = 1, binding = 0) uniform sampler2D textureSampler;
|
layout (set = 1, binding = 0) uniform sampler2D diffuseSampler;
|
||||||
layout (set = 1, binding = 1) uniform sampler2D diffuseSampler;
|
layout (set = 1, binding = 1) uniform sampler2D specularSampler;
|
||||||
|
|
||||||
vec3 calc_directional_light(vec3 normal, vec3 viewDir) {
|
vec3 calc_directional_light(vec3 normal, vec3 viewDir) {
|
||||||
vec3 lightDir = normalize(-directional_light.direction);
|
vec3 lightDir = normalize(-directional_light.direction);
|
||||||
float diff = max(dot(normal, lightDir), 0.0);
|
float diff = max(dot(normal, lightDir), 0.0);
|
||||||
vec3 reflectDir = reflect(-lightDir, normal);
|
vec3 reflectDir = reflect(-lightDir, normal);
|
||||||
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 2);
|
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 2);
|
||||||
vec3 ambient = directional_light.ambient * vec3(texture(textureSampler, TexCoords));
|
vec3 ambient = directional_light.ambient * vec3(texture(diffuseSampler, TexCoords));
|
||||||
vec3 diffuse = directional_light.diffuse * diff * vec3(texture(textureSampler , TexCoords));
|
vec3 diffuse = directional_light.diffuse * diff * vec3(texture(diffuseSampler , TexCoords));
|
||||||
vec3 specular = directional_light.specular * spec * vec3(texture(diffuseSampler, TexCoords));
|
vec3 specular = directional_light.specular * spec * vec3(texture(specularSampler, TexCoords));
|
||||||
return (ambient + diffuse + specular);
|
return (ambient + diffuse + specular);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,9 +60,9 @@ vec3 calc_point_light(int index, vec3 normal, vec3 fragPos, vec3 viewDir) {
|
||||||
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 2);
|
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 2);
|
||||||
float distance = length(point_lights.point_lights[index].position - fragPos);
|
float distance = length(point_lights.point_lights[index].position - fragPos);
|
||||||
float attenuation = 1.0 / (constant + linear * distance + quadratic * (distance * distance));
|
float attenuation = 1.0 / (constant + linear * distance + quadratic * (distance * distance));
|
||||||
vec3 ambient = point_lights.point_lights[index].ambient * vec3(texture(textureSampler, TexCoords));
|
vec3 ambient = point_lights.point_lights[index].ambient * vec3(texture(diffuseSampler, TexCoords));
|
||||||
vec3 diffuse = point_lights.point_lights[index].diffuse * diff * vec3(texture(textureSampler, TexCoords));
|
vec3 diffuse = point_lights.point_lights[index].diffuse * diff * vec3(texture(diffuseSampler, TexCoords));
|
||||||
vec3 specular = point_lights.point_lights[index].specular * spec * vec3(texture(diffuseSampler, TexCoords));
|
vec3 specular = point_lights.point_lights[index].specular * spec * vec3(texture(specularSampler, TexCoords));
|
||||||
ambient *= attenuation;
|
ambient *= attenuation;
|
||||||
diffuse *= attenuation;
|
diffuse *= attenuation;
|
||||||
specular *= attenuation;
|
specular *= attenuation;
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ view_buffer: vk.Buffer,
|
||||||
view_memory: [*c]u8,
|
view_memory: [*c]u8,
|
||||||
transform_memory: [*c]u8,
|
transform_memory: [*c]u8,
|
||||||
view_pos_memory: [*c]u8,
|
view_pos_memory: [*c]u8,
|
||||||
texture_sampler: vk.Sampler,
|
|
||||||
diffuse_sampler: vk.Sampler,
|
diffuse_sampler: vk.Sampler,
|
||||||
|
specular_sampler: vk.Sampler,
|
||||||
textures: std.ArrayList(c.VkDescriptorSet),
|
textures: std.ArrayList(c.VkDescriptorSet),
|
||||||
directional_light: *lights.DirectionalLight,
|
directional_light: *lights.DirectionalLight,
|
||||||
point_lights: []lights.PointLight,
|
point_lights: []lights.PointLight,
|
||||||
|
|
@ -329,14 +329,14 @@ pub fn init(allocator: Allocator, device: vk.Device, swapchain: vk.Swapchain, re
|
||||||
.stageFlags = c.VK_SHADER_STAGE_FRAGMENT_BIT,
|
.stageFlags = c.VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const texture_sampler_binding = c.VkDescriptorSetLayoutBinding{
|
const diffuse_sampler_binding = c.VkDescriptorSetLayoutBinding{
|
||||||
.binding = 0,
|
.binding = 0,
|
||||||
.descriptorType = c.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
.descriptorType = c.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
.stageFlags = c.VK_SHADER_STAGE_FRAGMENT_BIT,
|
.stageFlags = c.VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const diffuse_sampler_binding = c.VkDescriptorSetLayoutBinding{
|
const specular_sampler_binding = c.VkDescriptorSetLayoutBinding{
|
||||||
.binding = 1,
|
.binding = 1,
|
||||||
.descriptorType = c.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
.descriptorType = c.VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
|
|
@ -344,7 +344,7 @@ pub fn init(allocator: Allocator, device: vk.Device, swapchain: vk.Swapchain, re
|
||||||
};
|
};
|
||||||
|
|
||||||
const bindings = [_]c.VkDescriptorSetLayoutBinding{projection_binding, view_binding, transform_binding, directional_light_binding, point_lights_binding, view_pos_binding};
|
const bindings = [_]c.VkDescriptorSetLayoutBinding{projection_binding, view_binding, transform_binding, directional_light_binding, point_lights_binding, view_pos_binding};
|
||||||
const texture_bindings = [_]c.VkDescriptorSetLayoutBinding{texture_sampler_binding, diffuse_sampler_binding};
|
const texture_bindings = [_]c.VkDescriptorSetLayoutBinding{diffuse_sampler_binding, specular_sampler_binding};
|
||||||
|
|
||||||
var descriptor_set_layout: c.VkDescriptorSetLayout = undefined;
|
var descriptor_set_layout: c.VkDescriptorSetLayout = undefined;
|
||||||
var texture_descriptor_set_layout: c.VkDescriptorSetLayout = undefined;
|
var texture_descriptor_set_layout: c.VkDescriptorSetLayout = undefined;
|
||||||
|
|
@ -644,8 +644,8 @@ pub fn init(allocator: Allocator, device: vk.Device, swapchain: vk.Swapchain, re
|
||||||
.view_memory = view_data,
|
.view_memory = view_data,
|
||||||
.view_pos_memory = view_pos_data,
|
.view_pos_memory = view_pos_data,
|
||||||
.transform_memory = transform_data,
|
.transform_memory = transform_data,
|
||||||
.texture_sampler = try vk.Sampler.init(device),
|
|
||||||
.diffuse_sampler = try vk.Sampler.init(device),
|
.diffuse_sampler = try vk.Sampler.init(device),
|
||||||
|
.specular_sampler = try vk.Sampler.init(device),
|
||||||
.textures = std.ArrayList(c.VkDescriptorSet).init(allocator),
|
.textures = std.ArrayList(c.VkDescriptorSet).init(allocator),
|
||||||
.vertex_buffer = vertex_buffer,
|
.vertex_buffer = vertex_buffer,
|
||||||
.index_buffer = index_buffer,
|
.index_buffer = index_buffer,
|
||||||
|
|
@ -669,13 +669,13 @@ pub fn addTexture(self: *Self, device: anytype, texture: Texture, diffuse: Textu
|
||||||
const texture_info: c.VkDescriptorImageInfo = .{
|
const texture_info: c.VkDescriptorImageInfo = .{
|
||||||
.imageLayout = c.VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
.imageLayout = c.VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
.imageView = texture.image_view,
|
.imageView = texture.image_view,
|
||||||
.sampler = self.texture_sampler.handle,
|
.sampler = self.diffuse_sampler.handle,
|
||||||
};
|
};
|
||||||
|
|
||||||
const diffuse_info: c.VkDescriptorImageInfo = .{
|
const diffuse_info: c.VkDescriptorImageInfo = .{
|
||||||
.imageLayout = c.VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
.imageLayout = c.VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
.imageView = diffuse.image_view,
|
.imageView = diffuse.image_view,
|
||||||
.sampler = self.diffuse_sampler.handle,
|
.sampler = self.specular_sampler.handle,
|
||||||
};
|
};
|
||||||
|
|
||||||
const write_texture_descriptor_set = c.VkWriteDescriptorSet{
|
const write_texture_descriptor_set = c.VkWriteDescriptorSet{
|
||||||
|
|
@ -715,8 +715,8 @@ pub fn bind(self: Self, device: vk.Device, frame: usize) void {
|
||||||
|
|
||||||
pub fn deinit(self: Self, device: vk.Device) void {
|
pub fn deinit(self: Self, device: vk.Device) void {
|
||||||
self.textures.deinit();
|
self.textures.deinit();
|
||||||
self.texture_sampler.deinit(device);
|
|
||||||
self.diffuse_sampler.deinit(device);
|
self.diffuse_sampler.deinit(device);
|
||||||
|
self.specular_sampler.deinit(device);
|
||||||
self.projection_buffer.deinit(device.handle);
|
self.projection_buffer.deinit(device.handle);
|
||||||
c.vkDestroyDescriptorSetLayout(device.handle, self.descriptor_set_layout, null);
|
c.vkDestroyDescriptorSetLayout(device.handle, self.descriptor_set_layout, null);
|
||||||
c.vkDestroyDescriptorPool(device.handle, self.descriptor_pool, null);
|
c.vkDestroyDescriptorPool(device.handle, self.descriptor_pool, null);
|
||||||
|
|
|
||||||
|
|
@ -58,10 +58,10 @@ pub fn init(allocator: Allocator, instance_handle: vk.c.VkInstance, surface_hand
|
||||||
graphics_pipeline.directional_light.diffuse = .{0.5, 0.5, 0.5};
|
graphics_pipeline.directional_light.diffuse = .{0.5, 0.5, 0.5};
|
||||||
graphics_pipeline.directional_light.specular = .{0.5, 0.5, 0.5};
|
graphics_pipeline.directional_light.specular = .{0.5, 0.5, 0.5};
|
||||||
|
|
||||||
graphics_pipeline.point_lights[0].position = .{0.0, 3.0, 3.0};
|
graphics_pipeline.point_lights[0].position = .{0.0, 6.0, 0.0};
|
||||||
graphics_pipeline.point_lights[0].data[0] = 1.0;
|
graphics_pipeline.point_lights[0].data[0] = 1.0;
|
||||||
graphics_pipeline.point_lights[0].data[1] = 0.0014;
|
graphics_pipeline.point_lights[0].data[1] = 0.09;
|
||||||
graphics_pipeline.point_lights[0].data[2] = 0.000007;
|
graphics_pipeline.point_lights[0].data[2] = 0.032;
|
||||||
graphics_pipeline.point_lights[0].ambient = .{0.5, 0.5, 0.5};
|
graphics_pipeline.point_lights[0].ambient = .{0.5, 0.5, 0.5};
|
||||||
graphics_pipeline.point_lights[0].diffuse = .{0.5, 0.5, 0.5};
|
graphics_pipeline.point_lights[0].diffuse = .{0.5, 0.5, 0.5};
|
||||||
graphics_pipeline.point_lights[0].specular = .{1.0, 1.0, 1.0};
|
graphics_pipeline.point_lights[0].specular = .{1.0, 1.0, 1.0};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue