improved physics, added better caching
This commit is contained in:
@@ -1,19 +1,26 @@
|
||||
#include "cglm/mat4.h"
|
||||
#include "filesystem.h"
|
||||
#include "rendering.h"
|
||||
#include "tier0/lib.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "vk_helper.h"
|
||||
#include "tier0/platform.h"
|
||||
#include "rendering.h"
|
||||
#include "vk_helper.h"
|
||||
#include "vulkan/vulkan_core.h"
|
||||
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include "stb_image.h"
|
||||
|
||||
#define VULKAN_RENDERING_IMPLEMENTATION
|
||||
#include "vk_video.h"
|
||||
|
||||
VkSampler g_invalidTextureSampler;
|
||||
|
||||
vk_buffer_t g_cameraProperties;
|
||||
CameraProjection *g_cameraDataMap;
|
||||
|
||||
mat4 g_cameraView;
|
||||
|
||||
IMaterial *g_pDefaultMaterial;
|
||||
IMaterial *g_pCurrentMaterial;
|
||||
|
||||
@@ -60,19 +67,22 @@ void IVulkan::Init()
|
||||
|
||||
g_meshDepth.Create(1280, 720, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshDepthMSAA.Create(1280, 720, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, VK_SAMPLE_COUNT_4_BIT);
|
||||
g_meshColor.Create(1280, 720, VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshColor.Create(1280, 720, VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshColorMSAA.Create(1280, 720, VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, VK_SAMPLE_COUNT_4_BIT);
|
||||
|
||||
IMeshRenderer::Init();
|
||||
IPostProcessRenderer::Init();
|
||||
};
|
||||
|
||||
void IVulkan::Frame()
|
||||
{
|
||||
glm_mat4_identity(g_cameraDataMap->viewprojection);
|
||||
glm_perspective(glm_rad(90),(float)g_nWindowWidth/g_nWindowHeight, 0.01, 100, g_cameraDataMap->viewprojection);
|
||||
glm_rotate(g_cameraDataMap->viewprojection, glm_rad(90), (vec4){1,0,0,0});
|
||||
glm_scale(g_cameraDataMap->viewprojection, (vec4){1,-1,1,1});
|
||||
glm_rotate(g_cameraDataMap->viewprojection, glm_rad(90), (vec4){0,0,1,0});
|
||||
mat4 perspective;
|
||||
glm_mat4_inv(g_cameraView, g_cameraDataMap->viewprojection);
|
||||
glm_perspective(glm_rad(90),(float)g_nWindowWidth/g_nWindowHeight, 0.01, 100, perspective);
|
||||
glm_rotate(perspective, glm_rad(90), (vec4){1,0,0,0});
|
||||
glm_scale(perspective, (vec4){1,-1,1,1});
|
||||
glm_rotate(perspective, glm_rad(90), (vec4){0,0,1,0});
|
||||
glm_mat4_mul(perspective,g_cameraDataMap->viewprojection,g_cameraDataMap->viewprojection);
|
||||
|
||||
if (g_bConfigNotify)
|
||||
{
|
||||
@@ -82,12 +92,13 @@ void IVulkan::Frame()
|
||||
g_meshColorMSAA.Destroy();
|
||||
|
||||
g_meshDepth.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshDepthMSAA.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshColor.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshDepthMSAA.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, VK_SAMPLE_COUNT_4_BIT);
|
||||
g_meshColor.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT, VK_SAMPLE_COUNT_1_BIT);
|
||||
g_meshColorMSAA.Create(g_nWindowWidth, g_nWindowHeight, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, VK_SAMPLE_COUNT_4_BIT);
|
||||
}
|
||||
|
||||
IMeshRenderer::Frame(0);
|
||||
IPostProcessRenderer::Frame(0);
|
||||
};
|
||||
|
||||
void vk_shader_t::Create( const char *szPath, VkShaderStageFlagBits shaderStage )
|
||||
@@ -237,6 +248,46 @@ void vk_tripipeline_t::Create(
|
||||
void vk_tripipeline_t::Destroy()
|
||||
{
|
||||
|
||||
}
|
||||
void vk_comppipeline_t::Create(
|
||||
vk_shader_t &shader,
|
||||
CUtlVector<VkDescriptorSetLayoutBinding> &bindings,
|
||||
uint32_t pushConstantsSize
|
||||
)
|
||||
{
|
||||
VkPushConstantRange pushConstantRange = {};
|
||||
pushConstantRange.stageFlags = VK_SHADER_STAGE_ALL;
|
||||
pushConstantRange.offset = 0;
|
||||
pushConstantRange.size = pushConstantsSize;
|
||||
|
||||
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = {};
|
||||
descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
descriptorSetLayoutCreateInfo.bindingCount = bindings.GetSize();
|
||||
descriptorSetLayoutCreateInfo.pBindings = bindings.GetData();
|
||||
vkCreateDescriptorSetLayout(g_vkDevice, &descriptorSetLayoutCreateInfo, NULL, &m_descriptorSetLayout);
|
||||
|
||||
|
||||
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {};
|
||||
pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pipelineLayoutCreateInfo.setLayoutCount = 1;
|
||||
pipelineLayoutCreateInfo.pSetLayouts = &m_descriptorSetLayout;
|
||||
if (pushConstantsSize != 0)
|
||||
{
|
||||
pipelineLayoutCreateInfo.pushConstantRangeCount = 1;
|
||||
pipelineLayoutCreateInfo.pPushConstantRanges = &pushConstantRange;
|
||||
}
|
||||
vkCreatePipelineLayout(g_vkDevice, &pipelineLayoutCreateInfo, NULL, &m_layout);
|
||||
|
||||
VkComputePipelineCreateInfo cpci = {};
|
||||
cpci.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
|
||||
cpci.stage = shader.m_stageCreateInfo;
|
||||
cpci.layout = m_layout;
|
||||
vkCreateComputePipelines(g_vkDevice, NULL, 1, &cpci, NULL, &m_pipeline);
|
||||
}
|
||||
|
||||
void vk_comppipeline_t::Destroy()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void vk_buffer_t::Create(size_t size, VkBufferUsageFlags usage)
|
||||
@@ -500,6 +551,7 @@ ITexture *ITextureManager::LoadTexture( const char *szName )
|
||||
FileHandle_t file = IFileSystem::Open(szName, IFILE_READ);
|
||||
if (!file)
|
||||
Plat_FatalErrorFunc("Failed to load %s\n", szName);
|
||||
V_printf("cool %s\n",szName);
|
||||
|
||||
CUtlBuffer<stbi_uc> buffer(IFileSystem::Size(file));
|
||||
IFileSystem::Read(file, buffer.GetMemory(), buffer.GetSize());
|
||||
@@ -523,12 +575,6 @@ IMaterial *IRenderer::LoadMaterial( const char *szMaterial )
|
||||
|
||||
IFileSystem::Close(file);
|
||||
}
|
||||
|
||||
void IRenderer::SetMaterial( IMaterial *pMaterial )
|
||||
{
|
||||
g_pCurrentMaterial = pMaterial;
|
||||
}
|
||||
|
||||
IVertexBuffer *IRenderer::CreateVertexBuffer( uint32_t uSize )
|
||||
{
|
||||
CVertexBuffer *pBuffer = new CVertexBuffer();
|
||||
|
||||
Reference in New Issue
Block a user