improved physics, added better caching
This commit is contained in:
@@ -9,10 +9,12 @@ CUtlVector<CUtlString> engine_CompiledFiles = {
|
||||
"engine/filesystem.cpp",
|
||||
"engine/server.cpp",
|
||||
"engine/engine.cpp",
|
||||
"engine/physics.cpp",
|
||||
|
||||
/* rendering */
|
||||
"engine/vk_video.cpp",
|
||||
"engine/vk_mesh.cpp",
|
||||
"engine/vk_postprocessing.cpp",
|
||||
|
||||
/* entities */
|
||||
"engine/baseentity.cpp",
|
||||
@@ -57,6 +59,7 @@ int engine_build()
|
||||
const char *szGameName = ICommandLine::ParamValue("-game");
|
||||
if (szGameName == NULL)
|
||||
szGameName = "funnygame";
|
||||
IFileSystem2::MakeDirectory(CUtlString("build/%s/game/bin",szGameName));
|
||||
IFileSystem2::CopyFile(CUtlString("build/%s/game/bin",szGameName), outputProject);
|
||||
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ void C_BrushEntity::Spawn()
|
||||
float uv[2];
|
||||
};
|
||||
|
||||
pAlbedo = ITextureManager::LoadTexture("gfx/bricks.png");
|
||||
pAlbedo = ITextureManager::LoadTexture("textures/bricks.png");
|
||||
CBrushEntity* pBrushEntity = (CBrushEntity*)pEntity;
|
||||
uint32_t numVertices = 15*pBrushEntity->m_mesh.GetSize();
|
||||
vertexBuffer = IRenderer::CreateVertexBuffer(numVertices*4);
|
||||
@@ -104,7 +104,6 @@ void C_BrushEntity::Destroy()
|
||||
void C_BrushEntity::Think( float fDelta )
|
||||
{
|
||||
material.m.albedo = ITextureManager::GetTexture(pAlbedo);
|
||||
IRenderer::SetMaterial(&material);
|
||||
mat4 matrix;
|
||||
glm_mat4_zero(matrix);
|
||||
for (int i = 0; i < 9; i++) {
|
||||
@@ -115,6 +114,7 @@ void C_BrushEntity::Think( float fDelta )
|
||||
matrix[3][1] = pEntity->m_position[1];
|
||||
matrix[3][2] = pEntity->m_position[2];
|
||||
mesh->SetMatrix(matrix);
|
||||
mesh->SetMaterial(&material);
|
||||
mesh->Draw();
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ void C_Light::Precache()
|
||||
|
||||
void C_Light::Spawn()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void C_Light::Destroy()
|
||||
|
||||
@@ -52,6 +52,18 @@ void IEngine_Signal(int sig)
|
||||
void IEngine::Init()
|
||||
{
|
||||
/* trap signals */
|
||||
#ifdef __linux
|
||||
signal(SIGHUP, IEngine_Signal);
|
||||
signal(SIGINT, IEngine_Signal);
|
||||
signal(SIGQUIT, IEngine_Signal);
|
||||
signal(SIGILL, IEngine_Signal);
|
||||
signal(SIGTRAP, IEngine_Signal);
|
||||
signal(SIGIOT, IEngine_Signal);
|
||||
signal(SIGBUS, IEngine_Signal);
|
||||
signal(SIGFPE, IEngine_Signal);
|
||||
signal(SIGSEGV, IEngine_Signal);
|
||||
signal(SIGTERM, IEngine_Signal);
|
||||
#endif
|
||||
|
||||
IFileSystem::InitFilesystem();
|
||||
IVideo::Init();
|
||||
|
||||
97
engine/physics.cpp
Normal file
97
engine/physics.cpp
Normal file
@@ -0,0 +1,97 @@
|
||||
#include "physics.h"
|
||||
#include "cglm/mat4.h"
|
||||
#include "physics_gen.h"
|
||||
|
||||
void CPxCollider::Spawn( float fFriction )
|
||||
{
|
||||
|
||||
};
|
||||
void CPxCollider::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxBallMesh::Spawn( float fFriction )
|
||||
{
|
||||
m_pCollider = px_ball(m_fRadius, {.friction = fFriction});
|
||||
};
|
||||
|
||||
void CPxBallMesh::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxBoxMesh::Spawn( float fFriction )
|
||||
{
|
||||
m_pCollider = px_box(m_fRadius[0], m_fRadius[1], m_fRadius[2], {.friction = fFriction});
|
||||
};
|
||||
|
||||
void CPxBoxMesh::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxTriangleMesh::Spawn( float fFriction )
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxTriangleMesh::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxRigidBody::Spawn( CPxCollider *pCollider, px_matrix matrix, px_rigidbody_params params )
|
||||
{
|
||||
m_pRigidBody = px_rigidbody(px, pCollider->m_pCollider, matrix, params);
|
||||
};
|
||||
px_vec3 CPxRigidBody::GetPosition( void )
|
||||
{
|
||||
return px_getposition(px, m_pRigidBody);
|
||||
};
|
||||
px_matrix CPxRigidBody::GetMatrix ( void )
|
||||
{
|
||||
return px_getmatrix(px, m_pRigidBody);
|
||||
};
|
||||
|
||||
void CPxRigidBody::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
void CPxStaticBody::Spawn( CPxCollider *pCollider, px_matrix matrix, px_rigidbody_params params )
|
||||
{
|
||||
px_staticbody(px, pCollider->m_pCollider, matrix);
|
||||
};
|
||||
px_vec3 CPxStaticBody::GetPosition( void )
|
||||
{
|
||||
return px_getposition(px, m_pCollider);
|
||||
};
|
||||
px_matrix CPxStaticBody::GetMatrix ( void )
|
||||
{
|
||||
return px_getmatrix(px, m_pCollider);
|
||||
};
|
||||
|
||||
void CPxStaticBody::Destroy()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
void CPxFixedBody::Spawn( CPxCollider *pCollider, px_matrix matrix, px_rigidbody_params params )
|
||||
{
|
||||
px_fixedbody(px, pCollider->m_pCollider);
|
||||
};
|
||||
px_vec3 CPxFixedBody::GetPosition( void )
|
||||
{
|
||||
return px_getposition(px, m_pCollider);
|
||||
};
|
||||
px_matrix CPxFixedBody::GetMatrix ( void )
|
||||
{
|
||||
return px_getmatrix(px, m_pCollider);
|
||||
};
|
||||
|
||||
void CPxFixedBody::Destroy()
|
||||
{
|
||||
|
||||
};
|
||||
@@ -15,6 +15,8 @@ void IServer::LoadGame( const char *psz )
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
g_serverdll = Plat_LoadLibrary(CUtlString("%s/bin/libserver.so", psz));
|
||||
Plat_LoadLibrary(CUtlString("%s/bin/libclient.so", psz));
|
||||
|
||||
#endif
|
||||
void (*GameLoadfn)() = (void(*)())Plat_GetProc(g_serverdll, "IGame_Load");
|
||||
if (!GameLoadfn)
|
||||
|
||||
@@ -26,6 +26,7 @@ public:
|
||||
|
||||
void SetVertexBuffer( IVertexBuffer *pBuffer ) override;
|
||||
void SetIndexBuffer( IIndexBuffer *pBuffer ) override;
|
||||
void SetMaterial( IMaterial *pMaterial ) override;
|
||||
void Draw() override;
|
||||
|
||||
Material_t m_material;
|
||||
@@ -76,14 +77,17 @@ void CMesh::SetIndexBuffer( IIndexBuffer *pBuffer )
|
||||
m_pIndexBuffer = (CIndexBuffer*)pBuffer;
|
||||
}
|
||||
|
||||
void CMesh::SetMaterial( IMaterial *pMaterial )
|
||||
{
|
||||
if (pMaterial == 0)
|
||||
return;
|
||||
m_material = pMaterial->m;
|
||||
}
|
||||
|
||||
CUtlVector<CMesh> g_drawnMeshes;
|
||||
|
||||
void CMesh::Draw()
|
||||
{
|
||||
if (!g_pCurrentMaterial)
|
||||
m_material = {};
|
||||
else
|
||||
m_material = g_pCurrentMaterial->m;
|
||||
g_drawnMeshes.AppendTail(*this);
|
||||
}
|
||||
|
||||
@@ -365,7 +369,7 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
for (auto &mesh: g_drawnMeshes)
|
||||
{
|
||||
VkDeviceSize offset = 0;
|
||||
uint32_t textureID = 0;
|
||||
uint32_t textureID = mesh.m_material.albedo;
|
||||
vkCmdPushConstants(g_vkCommandBuffer, g_meshPipeline.m_layout, VK_SHADER_STAGE_ALL, 0, 64, &mesh.m_matrix);
|
||||
vkCmdPushConstants(g_vkCommandBuffer, g_meshPipeline.m_layout, VK_SHADER_STAGE_ALL, 64, 4, &textureID);
|
||||
vkCmdBindVertexBuffers(g_vkCommandBuffer, 0, 1, &mesh.m_pVertexBuffer->m_buffer.m_buffer, &offset);
|
||||
@@ -391,7 +395,7 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
.dstAccessMask = 0,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.image = g_meshColor.m_image,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
};
|
||||
@@ -400,22 +404,6 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
0, 0, NULL, 0, NULL, 1, &barrier);
|
||||
|
||||
barrier = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
.dstAccessMask = 0,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
.image = g_meshColor.m_image,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
};
|
||||
|
||||
vkCmdPipelineBarrier(g_vkCommandBuffer,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
0, 0, NULL, 0, NULL, 1, &barrier);
|
||||
|
||||
|
||||
g_drawnMeshes = CUtlVector<CMesh>();
|
||||
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
#include "rendering.h"
|
||||
#include "vk_helper.h"
|
||||
#include "vk_video.h"
|
||||
#include "vulkan/vulkan_core.h"
|
||||
|
||||
vk_shader_t post_agxShader = {};
|
||||
vk_comppipeline_t post_agxPipeline = {};
|
||||
VkDescriptorPool post_descriptorPool;
|
||||
VkDescriptorSet post_descriptorSet;
|
||||
|
||||
void IPostProcessRenderer::Init()
|
||||
{
|
||||
post_agxShader.Create("gfx/agx_comp.spv", VK_SHADER_STAGE_COMPUTE_BIT);
|
||||
CUtlVector<VkDescriptorSetLayoutBinding> bindings = {
|
||||
{
|
||||
.binding = 0,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
},
|
||||
{
|
||||
.binding = 1,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
}
|
||||
};
|
||||
post_agxPipeline.Create(post_agxShader, bindings, 0);
|
||||
|
||||
CUtlVector<VkDescriptorPoolSize> pools;
|
||||
for (auto &binding: bindings)
|
||||
{
|
||||
VkDescriptorPoolSize dps = {};
|
||||
dps.type = binding.descriptorType;
|
||||
dps.descriptorCount = binding.descriptorCount;
|
||||
pools.AppendTail(dps);
|
||||
}
|
||||
|
||||
VkDescriptorPoolCreateInfo poolInfo = {};
|
||||
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
poolInfo.poolSizeCount = pools.GetSize();
|
||||
poolInfo.pPoolSizes = pools.GetData();
|
||||
poolInfo.maxSets = 1;
|
||||
vkCreateDescriptorPool(g_vkDevice, &poolInfo, NULL, &post_descriptorPool);
|
||||
|
||||
VkDescriptorSetAllocateInfo allocInfo = {};
|
||||
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
|
||||
allocInfo.descriptorPool = post_descriptorPool;
|
||||
allocInfo.descriptorSetCount = 1;
|
||||
allocInfo.pSetLayouts = &post_agxPipeline.m_descriptorSetLayout;
|
||||
vkAllocateDescriptorSets(g_vkDevice, &allocInfo, &post_descriptorSet);
|
||||
|
||||
}
|
||||
|
||||
void IPostProcessRenderer::Frame(float fDelta)
|
||||
{
|
||||
|
||||
CUtlVector<VkImageMemoryBarrier> barriers = {
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = 0,
|
||||
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.image = g_meshColor.m_image,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
},
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = 0,
|
||||
.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.image = g_swapchainImage,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
}
|
||||
};
|
||||
|
||||
vkCmdPipelineBarrier(g_vkCommandBuffer,
|
||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||
0, 0, NULL, 0, NULL, barriers.GetSize(), barriers.GetData());
|
||||
|
||||
CUtlVector<VkWriteDescriptorSet> writes(2);
|
||||
for (auto &write: writes)
|
||||
{
|
||||
write = {};
|
||||
write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||
write.dstSet = post_descriptorSet;
|
||||
write.dstArrayElement = 0;
|
||||
}
|
||||
|
||||
VkDescriptorImageInfo dii1 = {
|
||||
.imageView = g_meshColor.m_imageView,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.sampler = NULL,
|
||||
};
|
||||
VkDescriptorImageInfo dii2 = {
|
||||
.imageView = g_swapchainImageView,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.sampler = NULL,
|
||||
};
|
||||
|
||||
writes[0].dstBinding = 0;
|
||||
writes[0].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
|
||||
writes[0].descriptorCount = 1;
|
||||
writes[0].pImageInfo = &dii1;
|
||||
writes[1].dstBinding = 1;
|
||||
writes[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
|
||||
writes[1].descriptorCount = 1;
|
||||
writes[1].pImageInfo = &dii2;
|
||||
vkUpdateDescriptorSets(g_vkDevice, writes.GetSize(), writes.GetData(), 0, NULL);
|
||||
|
||||
vkCmdBindPipeline(g_vkCommandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, post_agxPipeline.m_pipeline);
|
||||
vkCmdBindDescriptorSets(g_vkCommandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, post_agxPipeline.m_layout, 0, 1, &post_descriptorSet, 0, 0);
|
||||
vkCmdDispatch(g_vkCommandBuffer, (g_nWindowWidth+31)/32, (g_nWindowHeight+31)/32, 1);
|
||||
|
||||
barriers = {
|
||||
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
|
||||
.dstAccessMask = 0,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
.image = g_swapchainImage,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
}
|
||||
};
|
||||
|
||||
vkCmdPipelineBarrier(g_vkCommandBuffer,
|
||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
0, 0, NULL, 0, NULL, barriers.GetSize(), barriers.GetData());
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -99,7 +99,7 @@ void IVideo_SwapchainInit()
|
||||
swapchainCreateInfo.imageFormat = selectedFormat.format;
|
||||
swapchainCreateInfo.imageColorSpace = selectedFormat.colorSpace;
|
||||
swapchainCreateInfo.presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||
swapchainCreateInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
swapchainCreateInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT;
|
||||
swapchainCreateInfo.preTransform = surfaceCapatibilities.currentTransform;
|
||||
swapchainCreateInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
swapchainCreateInfo.imageArrayLayers = 1;
|
||||
|
||||
Reference in New Issue
Block a user