Шаг 27 - Характеристики вашего Акселератора

У многих пользователей часто возникает вопрос: "Как определить возможности видео адаптера?" Какие расширения OpenGL ваш адаптер может реализовать аппаратно, а какие будут эмулированы програмно?

Сделать это очень просто. Возьмем наш старый добрый проект, уберем из него все излишки.

Мы ничего не будем рисовать, поэтому функция OnDraw(...) будет почти пустой. Чтобы не напрягаться с "правильным" выводом на экран все неоходимые данные мы выведем в файл.

Итак, после всех изменений функция OnDraw(...) будет выглядеть так:

void CExampleView::OnDraw(CDC* pDC)
{
	CRect clientRect;
	CFile cf;
	char ch[2] = {13, 10};	// это символ конца строки ;))

	CExampleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: add draw code for native data here

	cf.Open("Property.txt", CFile::modeCreate | CFile::modeWrite);
 
	GetClientRect(&clientRect);
	glViewport(0, 0, clientRect.right, clientRect.bottom);

	glClearColor (1.0, 1.0, 1.0, 1.0);
	glClear (GL_COLOR_BUFFER_BIT);

	m_pVendor = glGetString(GL_VENDOR);
	m_pVersion = glGetString(GL_VERSION);
	m_pRenderer = glGetString(GL_RENDERER);
	m_pExtensions = glGetString(GL_EXTENSIONS);

	cf.Write("Производитель: ", strlen("Производитель: "));
	cf.Write(m_pVendor, strlen((const char*)m_pVendor));
	cf.Write(&ch,2);

	cf.Write("Версия: ", strlen("Версия: "));
	cf.Write(m_pVersion, strlen((const char*)m_pVersion));
	cf.Write(&ch,2);

	cf.Write("Рендер: ", strlen("Рендер: "));
	cf.Write(m_pRenderer, strlen((const char*)m_pRenderer));
	cf.Write(&ch,2);

	cf.Write("Расширения: ", strlen("Расширения: "));
	cf.Write(m_pExtensions, strlen((const char*)m_pExtensions));
	cf.Write(&ch,2);

	cf.Close();

	SwapBuffers(pDC->m_hDC);

	pDC->TextOut(10,10, "Данные о вашем видеоадаптере записаны в файл Property.txt");
}

С помощью функции glGetString(...) OpenGL позволяет получить 4 типа данных о железе: Производитель, Версия, Чипсет, Расширения. Все они выводятся в нашем приложении.

Кстати, обратите внимание, что после переключения буффера мы можем воспользоваться стандартными функциями вывода графики GDI, хотя ... это чисто академический случай. В обычном приложении такая халява не пройдет ;).

Шпаргалка

  1. Не надо делать ничего лишнего. Просто получите с помощью glGetString(...) все текстовые строки и выведите их куда-нибудь.

Информацию о том, что означает каждое расширение можно получить на http://opengl.rdc.ru/docs/dreviews/1999-02-15.phtml.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Kirill V. Ratkin.