ULRE/src/SceneGraph/Vulkan/VKDeviceSampler.cpp

81 lines
2.0 KiB
C++

#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKSampler.h>
VK_NAMESPACE_BEGIN
Sampler *GPUDevice::CreateSampler(VkSamplerCreateInfo *sci)
{
static VkSamplerCreateInfo default_sampler_create_info=
{
VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
nullptr,
0,
VK_FILTER_LINEAR,
VK_FILTER_LINEAR,
VK_SAMPLER_MIPMAP_MODE_LINEAR,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
0.0f,
false,
1.0f,
false,
VK_COMPARE_OP_NEVER,
0.0f,
0.0f,
VK_BORDER_COLOR_INT_OPAQUE_BLACK,//VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
false
};
if(!sci)
sci=&default_sampler_create_info;
VkSampler sampler;
sci->sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
if(vkCreateSampler(attr->device,sci,nullptr,&sampler)!=VK_SUCCESS)
return(nullptr);
return(new Sampler(attr->device,sampler));
}
Sampler *GPUDevice::CreateSampler(Texture *tex)
{
VkSamplerCreateInfo sci=
{
VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
nullptr,
0,
VK_FILTER_LINEAR,
VK_FILTER_LINEAR,
VK_SAMPLER_MIPMAP_MODE_LINEAR,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
0.0f,
false,
1.0f,
false,
VK_COMPARE_OP_NEVER,
0.0f,
0.0f,
VK_BORDER_COLOR_INT_OPAQUE_BLACK,//VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
false
};
VkSampler sampler;
sci.anisotropyEnable = attr->physical_device->SupportSamplerAnisotropy();
if(sci.anisotropyEnable)
sci.maxAnisotropy = attr->physical_device->GetMaxSamplerAnisotropy();
if(tex)
sci.maxLod=tex->GetMipLevel();
if(vkCreateSampler(attr->device,&sci,nullptr,&sampler)!=VK_SUCCESS)
return(nullptr);
return(new Sampler(attr->device,sampler));
}
VK_NAMESPACE_END