void setShaderComponent(any@ shaderComponent_data, any@ shader_data) {
    string shader;
    shader_data.retrieve(shader);

    ShaderComponent shaderComponent;
    shaderComponent_data.retrieve(shaderComponent);

    shaderComponent.setShader(shader);
}

void renderShaderComponent(any@ data) {
    Entity entity;
    data.retrieve(entity);

    if (!entity.hasShaderComponent())
        return;

    ShaderComponent shaderComponent = entity.getShaderComponent();

    if (shaderComponent.hasShader) {
        UI::drawIcon("shader", 32);
    } else {
        UI::drawIcon("empty", 32);
    }
    UI::dragDropTarget("SHADER", any(shaderComponent), setShaderComponent);

    if (shaderComponent.hasShader) {
        UI::sameline();
        UI::space();
        UI::sameline();

        UI::titleCenterY(shaderComponent.getShader(), 32);
        UI::dragDropTarget("SHADER", any(shaderComponent), setShaderComponent);
    }

    UI::space(20, 20);

    if (UI::button("Clear")) {
        shaderComponent.clear();
    }
} 

void removeShaderComponent(any@ entity) {
    Entity ent;
    entity.retrieve(ent);

    if (UI::menuItem("Remove")) {
        ent.removeShaderComponent();
    }
}
