/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Objects/primitiveObject.c
149 строк
5 KB
Zamar_Terrier
Офигенное обновление движка
31 июл 2026, 21:03
Верифицирован
31 июл 2026, 21:03
1682686
Код
Авторство
О чём код?
#include "Objects/primitiveObject.h" #include <vulkan/vulkan.h> #include "Tools/e_math.h" #include "Tools/e_tools.h" #include "Core/e_memory.h" #include "Core/e_camera.h" #include "Core/e_buffer.h" #include "Core/pipeline.h" #include "Core/e_texture.h" #include "Core/e_blue_print.h" #include "Objects/render_texture.h" #include "Tools/e_shaders.h" #include "Data/e_resource_data.h" #include "Data/e_resource_engine.h" #include "Data/e_resource_shapes.h" #include "Data/e_resource_descriptors.h" extern TEngine engine; void PrimitiveObjectDestroy(PrimitiveObject *po) { GameObject3DDestroy((GameObject3D *)po); FreeMemory(po->params); po->params = NULL; } int PrimitiveObjectInitCustom(PrimitiveObject *po, DrawParam *dParam, VertexParam *vParam, IndexParam *iParam){ GameObject3DInit((GameObject3D *)po, TIGOR_GAME_OBJECT_TYPE_3D); GameObjectSetDestroyFunc((GameObject *)po, (void *)PrimitiveObjectDestroy); VertextIterator vi = {0}; vi.i_index = iParam->indexesSize; vi.v_index = vParam->num_verts; GraphicsObjectSetVertex(&po->go.graphObj, vParam->vertices, sizeof(Vertex3D), iParam->indices, &vi); if(dParam) GameObject3DInitTextures((GameObject3D *)po, dParam); po->go.self.flags = TIGOR_GAME_OBJECT_FLAG_PREINIT; return 1; } int PrimitiveObjectInit(PrimitiveObject *po, DrawParam *dParam, char type, void *params){ GameObject3DInit((GameObject3D *)po, TIGOR_GAME_OBJECT_TYPE_3D); GameObjectSetDestroyFunc((GameObject *)po, (void *)PrimitiveObjectDestroy); po->type = type; PlaneParam *pParam = (PlaneParam *)params; SphereParam *sParam = (SphereParam *)params; CubeSphereParam *csParam = (CubeSphereParam *)params; ConeParam *cParam = (ConeParam *)params; HollowCylinderParam *hcParam = (HollowCylinderParam *)params; int builded = false; VertexParam vParam; IndexParam iParam; po->params = NULL; VertextIterator vi = {0}; switch(type) { case TIGOR_PRIMITIVE3D_LINE : vi.i_index = 2; vi.v_index = 0; GraphicsObjectSetVertex(&po->go.graphObj, (void *)lineVert, sizeof(Vertex3D), NULL, &vi); break; case TIGOR_PRIMITIVE3D_TRIANGLE : vi.i_index = 3; vi.v_index = 3; GraphicsObjectSetVertex(&po->go.graphObj, (void *)triVert, sizeof(Vertex3D), (uint32_t *)triIndx, &vi); break; case TIGOR_PRIMITIVE3D_QUAD : vi.i_index = 6; vi.v_index = 4; GraphicsObjectSetVertex(&po->go.graphObj, (void *)quadVert, sizeof(Vertex3D), (uint32_t *)quadIndx, &vi); break; case TIGOR_PRIMITIVE3D_PLANE : InitPlane3D(&vParam, &iParam, pParam->sectorCount, pParam->stackCount); po->params = AllocateMemory(1, sizeof(PlaneParam)); memcpy(po->params, params, sizeof(PlaneParam)); builded = true; break; case TIGOR_PRIMITIVE3D_CUBE : vi.i_index = 36; vi.v_index = 24; GraphicsObjectSetVertex(&po->go.graphObj, (void *)cubeVert,sizeof(Vertex3D), (uint32_t *)cubeIndx, &vi); break; case TIGOR_PRIMITIVE3D_CUBESPHERE : Cubesphere(&vParam, &iParam, csParam->radius, csParam->verperrow); po->params = AllocateMemory(1, sizeof(CubeSphereParam)); memcpy(po->params, params, sizeof(CubeSphereParam)); builded = true; break; case TIGOR_PRIMITIVE3D_ICOSPHERE : IcoSphereGenerator(&vParam, &iParam, sParam->radius); po->params = AllocateMemory(1, sizeof(SphereParam)); memcpy(po->params, params, sizeof(SphereParam)); break; case TIGOR_PRIMITIVE3D_SPHERE : SphereGenerator3D(&vParam, &iParam, sParam->radius, sParam->sectorCount, sParam->stackCount); po->params = AllocateMemory(1, sizeof(SphereParam)); memcpy(po->params, params, sizeof(SphereParam)); builded = true; break; case TIGOR_PRIMITIVE3D_CONE : ConeGenerator(&vParam, &iParam, cParam->height, cParam->sectorCount, cParam->stackCount); po->params = AllocateMemory(1, sizeof(ConeParam)); memcpy(po->params, params, sizeof(ConeParam)); builded = true; break; case TIGOR_PRIMITIVE3D_SKYBOX: SphereGenerator3D(&vParam, &iParam, sParam->radius, sParam->sectorCount, sParam->stackCount); po->params = AllocateMemory(1, sizeof(SphereParam)); memcpy(po->params, params, sizeof(SphereParam)); builded = true; break; case TIGOR_PRIMITIVE3D_HOLLOW_CYLINDER: HollowCylinderGenerator(&vParam, &iParam, hcParam->height, hcParam->outerRadius, hcParam->innerRadius, hcParam->stackCount, hcParam->sectorCount); po->params = AllocateMemory(1, sizeof(SphereParam)); memcpy(po->params, params, sizeof(SphereParam)); builded = true; break; } if(builded) { vi.i_index = iParam.indexesSize; vi.v_index = vParam.num_verts; GraphicsObjectSetVertex(&po->go.graphObj, vParam.vertices, sizeof(Vertex3D), iParam.indices, &vi); FreeMemory(vParam.vertices); FreeMemory(iParam.indices); } if(dParam) GameObject3DInitTextures((GameObject3D *)po, dParam); if(type == TIGOR_PRIMITIVE3D_SKYBOX) Transform3DSetScale((GameObject3D *)po, -500, -500, -500); po->go.self.flags = TIGOR_GAME_OBJECT_FLAG_PREINIT; return 1; }