Project
Loading...
Searching...
No Matches
GPUDisplayLoader.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#include "GPUDisplay.h"
17#include "GPUDisplayInterface.h"
18
19#include <cstring>
20#include <tuple>
21#include <stdexcept>
22
23using namespace o2::gpu;
24
25namespace o2::gpu
26{
27
28extern "C" void* GPUTrackingDisplayLoader(const char*, void*);
29
30namespace internal
31{
32namespace
33{
34template <class T, typename... Args>
35static inline T* createHelper(Args... args)
36{
37 return new T(args...);
38}
39} // anonymous namespace
40} // namespace internal
41
42void* GPUTrackingDisplayLoader(const char* type, void* args)
43{
44 if (strcmp(type, "display") == 0) {
45 auto x = (std::tuple<GPUDisplayFrontend*, GPUChainTracking*, GPUQA*, const GPUParam*, const GPUCalibObjectsConst*, const GPUSettingsDisplay*, const GPUSettingsProcessing*>*)args;
46 return std::apply([](auto&&... y) { return internal::createHelper<GPUDisplay>(y...); }, *x);
47 } else if (strcmp(type, "frontend") == 0) {
48 auto x = (std::tuple<const char*>*)args;
49 return std::apply([](auto&&... y) { return GPUDisplayFrontend::getFrontend(y...); }, *x);
50 } else {
51 throw std::runtime_error("Invalid display obejct type specified");
52 }
53 return nullptr;
54}
55
56} // namespace o2::gpu
static GPUDisplayFrontend * getFrontend(const char *type)
GLint GLenum GLint x
Definition glcorearb.h:403
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
void * GPUTrackingDisplayLoader(const char *, void *)