#include "light.h" #include #include #include #include EXT_OBJECT_REGISTER_CPP(Light) void ext::Light::initialize() { uf::Object::initialize(); auto& metadata = this->getComponent(); auto& transform = this->getComponent>(); auto& camera = this->getComponent(); { auto& scene = uf::scene::getCurrentScene(); auto& controller = *scene.getController(); camera = controller.getComponent(); camera.setFov( metadata["light"]["fov"].asFloat() ); } { auto& renderMode = this->getComponent(); renderMode.width = 512; renderMode.height = 512; std::string name = "Render Target: " + std::to_string((int) this->getUid()); ext::vulkan::addRenderMode( &renderMode, name ); } } void ext::Light::tick() { uf::Object::tick(); auto& renderMode = this->getComponent(); renderMode.target = ""; auto& camera = this->getComponent(); auto& transform = this->getComponent>(); for ( std::size_t i = 0; i < 2; ++i ) { camera.setView( uf::matrix::inverse( uf::transform::model( transform ) ), i ); } } void ext::Light::render() { uf::Object::render(); /* { auto& renderMode = this->getComponent(); auto& blitter = renderMode.blitter; auto& transform = this->getComponent>(); auto& scene = uf::scene::getCurrentScene(); auto& controller = *scene.getController(); auto& camera = this->getComponent(); auto& controllerCamera = controller.getComponent(); if ( !blitter.initialized ) return; struct UniformDescriptor { struct { alignas(16) pod::Matrix4f models[2]; } matrices; struct { alignas(8) pod::Vector2f position = { 0.5f, 0.5f }; alignas(8) pod::Vector2f radius = { 0.1f, 0.1f }; alignas(16) pod::Vector4f color = { 1, 1, 1, 1 }; } cursor; alignas(4) float alpha; }; auto& shader = blitter.material.shaders.front(); auto& uniforms = shader.uniforms.front().get(); for ( std::size_t i = 0; i < 2; ++i ) { pod::Matrix4f model = uf::transform::model( transform ); uniforms.matrices.models[i] = controllerCamera.getProjection(i) * controllerCamera.getView(i) * model; uniforms.alpha = 1.0f; uniforms.cursor.position.x = -1.0f; uniforms.cursor.position.y = -1.0f; uniforms.cursor.radius.x = 0.0f; uniforms.cursor.radius.y = 0.0f; uniforms.cursor.color.x = 0.0f; uniforms.cursor.color.y = 0.0f; uniforms.cursor.color.z = 0.0f; uniforms.cursor.color.w = 0.0f; } shader.updateBuffer( (void*) &uniforms, sizeof(uniforms), 0 ); } */ } void ext::Light::destroy() { auto& renderMode = this->getComponent(); ext::vulkan::removeRenderMode( &renderMode, false ); uf::Object::destroy(); }