Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2017, 22:14   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию ООП подход к хранению хэндлов OpenGL ES

Я изучаю программирование OpenGL ES, и у меня возник вопрос, как хранить в программе хэндлы, которые часто используются. Все, что я пока придумал - это использовать синглтоны для каждого хэндла дисплея, конфига и т.д. С помощью специализации шаблонов я это реализовал так:

Код:
template <typename ResourceTag, typename ResourceType>
class Resource
{
public:
	Resource();
	
	Resource(const Resource&) = delete;
	Resource& operator=(const Resource&) = delete;

	ResourceType get() { return resource; }

private:
	ResourceType resource{};
};

template <typename ResourceType>
auto& GetResource()
{
	static ResourceType resource;
	return resource;
}

using Display = Resource<struct DisplayTag, EGLDisplay>;
template<> Display::Resource()
{
	resource = eglGetDisplay(EGL_DEFAULT_DISPLAY);
	if (resource == EGL_NO_DISPLAY)
	{
		throw std::runtime_error("Unable to get display");
	}

	EGLint major;
	EGLint minor;
	if (EGL_FALSE == eglInitialize(resource, &major, &minor))
	{
		throw std::runtime_error("Unable to initialize OpenGL");
	}
}

using Config = Resource<struct ConfigTag, EGLConfig>;
template<> Config::Resource()
{
	EGLint numConfig;

	EGLint configAttribs[] =
	{
		EGL_RENDERABLE_TYPE, EGL_WINDOW_BIT,
		EGL_RED_SIZE,   8,
		EGL_GREEN_SIZE, 8,
		EGL_BLUE_SIZE,  8,
		EGL_DEPTH_SIZE, 24,
		EGL_NONE
	};

	EGLDisplay display = GetResource<Display>().get();

	if (EGL_FALSE == eglChooseConfig(display, configAttribs, &resource, 1, &numConfig))
	{
		throw std::runtime_error("Unable to choose config");
	}
}
Вроде бы, мне удобно, но возникают подозрения об избыточности такого подхода и о том, что я где-то накосячил. Какие ошибки можно найти в этом коде? Какие есть ошибки в подходе к такому получению хэндлов?
Aoizora вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подход к инжекту Muvvka Общие вопросы C/C++ 8 18.05.2013 19:27
ООП подход. По правильному ли пути я иду? Ilnur888 Общие вопросы Delphi 1 26.02.2013 02:40
Подход к решению kaar Помощь студентам 2 04.04.2010 11:56
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
Нужен совет по хранению значений pu4koff Общие вопросы по программированию, компьютерный форум 13 02.03.2008 22:02