<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LinuxRadio &#187; Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux</title>
	<atom:link href="http://linuxradio.info/category/rasshireniya-opengl/ponyatie-rasshireniy-opengl-ih-osnovne-tip-i-osobennosti-rabot-s-nimi-pod-windows-i-linux/feed" rel="self" type="application/rss+xml" />
	<link>http://linuxradio.info</link>
	<description>Все о системе Linux, описание, программирование.</description>
	<lastBuildDate>Mon, 29 Mar 2010 19:33:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Основы использования библиотек libExt и libTexture</title>
		<link>http://linuxradio.info/osnov-ispolyzovaniya-bibliotek-libext-i-libtexture.html</link>
		<comments>http://linuxradio.info/osnov-ispolyzovaniya-bibliotek-libext-i-libtexture.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 23:28:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[createTexture2D]]></category>
		<category><![CDATA[fileName]]></category>
		<category><![CDATA[unsignedcreateTexture2D]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=385</guid>
		<description><![CDATA[Для инициализации расширений осуществляется вызов функции mitExtensions, рассмотренной в главе 1. Функция lsExtensionSupported служит для проверки поддержки расширений. В своих программах всегда, прежде чем начать использовать расширение, проверьте его поддержку. Программа, выдающая сообщение о том, что требуемое расширение не поддерживается, выглядит гораздо лучше, чем программа, &#171;вылетающая&#187; из-за обращения по недопустимому адресу (из-за отсутствия необходимых функций) [...]]]></description>
			<content:encoded><![CDATA[<p>Для инициализации расширений осуществляется вызов функции mitExtensions, рассмотренной в главе 1. Функция lsExtensionSupported служит для проверки поддержки расширений. В своих программах всегда, прежде чем начать использовать расширение, проверьте его поддержку. Программа, выдающая сообщение о том, что требуемое расширение не поддерживается, выглядит гораздо лучше, чем программа, &laquo;вылетающая&raquo; из-за обращения по недопустимому адресу (из-за отсутствия необходимых функций) или просто работающая неправильно (из-за отсутствия параметров или режимов). Загрузка обычной двумерной текстуры происходит с помощью функции createTexture2D, описание которой приводится далее. unsignedcreateTexture2D ( bool mipmap, const char * fileName ); Эта функция загружает текстуру из файла с именем fileName. При этом поддерживаются следующие форматы файлов с текстурами: BMP, TGA, JPG(JPEG), PNG и DDS. Для работы с форматами JPG и PNG предусмотрены библиотеки zlib, libjpeg и libpng. При работе под Linux данные библиотеки устанавливаются вместе с Linux, и необходимо только задать их использование для wafe-файла. Параметр mipmap отвечает за поддержку (значение true) пирамидального фильтрования при использовании данной текстуры. Функция возвращает о при ошибке загрузки файла. В противном случае возвращается идентификатор текстуры, который может быть использован при вызовах OpenGL. Для удобства, а также для единообразия при работе с разными платформами во всех вызовах библиотеки iibTexture можно использовать символ / для разделения каталогов в пути к файлу (вместо принятого в Windows символа ). Это избавляет от дублирования символов внутри строк для языков С и С++ (например ..\Textures\Bumpmaps\normal2.bmp). Еще одной полезной функцией библиотеки IibTexture является saveScreenShot, позволяющая сохранить текущее содержимое окна в файле типа TGA.bool saveScreenShot ( const char * fileName );</p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/osnov-ispolyzovaniya-bibliotek-libext-i-libtexture.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Функции файла libExt.h</title>
		<link>http://linuxradio.info/funktsii-fayla-libext-h.html</link>
		<comments>http://linuxradio.info/funktsii-fayla-libext-h.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:50:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[assertExtensionsSupported]]></category>
		<category><![CDATA[lsExtensionSupported]]></category>
		<category><![CDATA[mitExtensions]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=371</guid>
		<description><![CDATA[Функция lsExtensionSupported уже рассматривалась нами, она просто проверяет, поддерживается ли данное расширение (при этом проверяется поддержка как общих расширений, так и расширений, специфичных для конкретной платформы). Функция assertExtensionsSupported позволяет проверить поддержку сразу нескольких расширений. На вход ей передается строка с именами расширений (разделенных пробелами или запятыми). Если хотя бы одно расширение из переданного списка не [...]]]></description>
			<content:encoded><![CDATA[<p>Функция lsExtensionSupported уже рассматривалась нами, она просто проверяет, поддерживается ли данное расширение (при этом проверяется поддержка как общих расширений, так и расширений, специфичных для конкретной платформы). Функция assertExtensionsSupported позволяет проверить поддержку сразу нескольких расширений. На вход ей передается строка с именами расширений (разделенных пробелами или запятыми). Если хотя бы одно расширение из переданного списка не поддерживается, то выдается диагностическое сообщение с именем неподдерживаемого расширения, и выполнение программы прерывается. Функция mitExtensions служит для инициализации указателей на вводимые расширениями функции. Библиотека lib Ext определяет большое число указателей на функции, вводимые всеми рассматриваемыми в этом книге расширениями, и с помощью этой функции в указатели заносятся адреса вводимых расширениями функций. Функция pnntfinfo печатает на stdout информацию об используемом графическом ускорителе и его производителе, а также о поддерживаемых расширениях. Обратите внимание, что библиотека GLAUX, которую многие используют для загрузки текстур из BMP-файлов, под Linux обычно недоступна. </p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/funktsii-fayla-libext-h.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Файл libExt.h</title>
		<link>http://linuxradio.info/fayl-libext-h.html</link>
		<comments>http://linuxradio.info/fayl-libext-h.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:41:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[libExt.h]]></category>
		<category><![CDATA[Библиотека]]></category>
		<category><![CDATA[фрагмент]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=368</guid>
		<description><![CDATA[Фрагмент заголовочного файла libExt.h библиотеки, содержащий описание вводимых этим расширением функций (функции, вводимые различными расширениями, здесь намеренно не приводятся из-за их большого количества). 
#ifdef_WIN32# include #else¦define GLX_GLXEXT_LEGACY#endif#mclude#mclude#mclude&#187; . . /glext. h&#187;#ifdef_WIN32#mclude&#187; . . /wglext. h&#187;#else#mclude#mclude#endifbool lsExtensionSupported ( const char * ext );void mitExt ens ions();void printfInfo();void assertExtensionsSupported ( const char * extList ); 
Для удобства [...]]]></description>
			<content:encoded><![CDATA[<p>Фрагмент заголовочного файла libExt.h библиотеки, содержащий описание вводимых этим расширением функций (функции, вводимые различными расширениями, здесь намеренно не приводятся из-за их большого количества). </p>
<blockquote><p>#ifdef_WIN32# include #else¦define GLX_GLXEXT_LEGACY#endif#mclude#mclude#mclude&raquo; . . /glext. h&raquo;#ifdef_WIN32#mclude&raquo; . . /wglext. h&raquo;#else#mclude#mclude#endifbool lsExtensionSupported ( const char * ext );void mitExt ens ions();void printfInfo();void assertExtensionsSupported ( const char * extList ); </p></blockquote>
<p>Для удобства работы этот файл включает необходимые заголовочные файлы и для платформы Microsoft Windows файл windows.h, без которого многие примеры под Windows просто не компилируются. Данный файл определяет также следующие функции — lsExtensionSupported, assertExtensionsSupported, mitExtensions и printfInfo. </p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/fayl-libext-h.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Формирование кроссплатформенного кода</title>
		<link>http://linuxradio.info/formirovanie-krossplatformennogo-koda.html</link>
		<comments>http://linuxradio.info/formirovanie-krossplatformennogo-koda.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:35:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[_wiN32]]></category>
		<category><![CDATA[компиляция]]></category>
		<category><![CDATA[кроссплатформенный код]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=366</guid>
		<description><![CDATA[Для удобства дальнейшей работы с расширениями все необходимые операции можно записать в небольшую библиотеку, причем желательно инкапсулировать всю платформозависимую часть. Для формирования кроссплатформенного кода изменяющуюся часть (получение адреса функции) лучше вынести в отдельную функцию: static void * getProcAddress ( const char * name ){#ifdef _WIN32return wglGetProcAddress ( name );#elsereturn (void *)glXGetProcAddressARB ((const GLubyte *)name ); [...]]]></description>
			<content:encoded><![CDATA[<p>Для удобства дальнейшей работы с расширениями все необходимые операции можно записать в небольшую библиотеку, причем желательно инкапсулировать всю платформозависимую часть. Для формирования кроссплатформенного кода изменяющуюся часть (получение адреса функции) лучше вынести в отдельную функцию: static void * getProcAddress ( const char * name ){#ifdef _WIN32return wglGetProcAddress ( name );#elsereturn (void *)glXGetProcAddressARB ((const GLubyte *)name ); #endif } Обратите внимание на использование условной компиляции — символ _wiN32 служит для определения того, происходит ли компиляция под платформой Windows или нет (здесь мы будем считать, что если этот символ не определен, то компиляция происходит под Linux). На прилагаемом к книге компакт-диске содержится написанная автором: библиотека для работы с расширениями lib Ext. Она не претендует на полноту и поэтому поддерживает лишь часть из имеющихся расширений. Однако все рассматриваемые в этой книге расширения ею поддерживаются, и она является кроссплатформенной (успешно компилируется и под Windows, и под Linux, и способ работы с ней не зависит от платформы).</p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/formirovanie-krossplatformennogo-koda.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с GLX-расширениями</title>
		<link>http://linuxradio.info/rabota-s-glx-rasshireniyami.html</link>
		<comments>http://linuxradio.info/rabota-s-glx-rasshireniyami.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:23:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[giXGetProcAddress]]></category>
		<category><![CDATA[код]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=363</guid>
		<description><![CDATA[Под  Linux также существует функция, возвращающая список всех поддерживаемых GLX-расширений. Однако она не является расширением и непосредственно доступна пользователям. Вот пример ее описания: const char * glXQueryExtensionsString ( Display * dpy, int screen ); После того как при помощи этой функции был получен список всех GLX-расширений, достаточно рассмотренным ранее способом проверить наличие в этой [...]]]></description>
			<content:encoded><![CDATA[<p>Под  Linux также существует функция, возвращающая список всех поддерживаемых GLX-расширений. Однако она не является расширением и непосредственно доступна пользователям. Вот пример ее описания: const char * glXQueryExtensionsString ( Display * dpy, int screen ); После того как при помощи этой функции был получен список всех GLX-расширений, достаточно рассмотренным ранее способом проверить наличие в этой строке названия расширения. В случае если соответствующее расширение было найдено, то при помощи функции giXGetProcAddress можно получить адреса вводимых этим расширением функций. Слегка модифицированный код функции isExtensionSupported, обеспечивающей проверку поддержки всех расширений:</p>
<blockquote><p>staticboolisExtensionSupported ( const char * ext,const char * extList ) {const char * start = extList;const char * ptr; while ( ( ptr = strstr ( start, ext ) ) != NULL ) {// we&#8217;ve found, ensure name // is exactlyext const char * end = ptr + strlen ( ext); if ( isspace ( *end ) || *end == &#8216;?&#8217; )return true; start= end; }return false; }bool isExtensionSupported ( const char * ext ) {const char * extensions = (const char *) glGetString (GL_EXTENSIONS );if ( isExtensionSupported ( ext, extensions ) )return true;#ifdef _WIN32// check Windoze extensionsif ( wglGetExtensionsStringARB == NULL )return false; returnisExtensionSupported ( ext,wglGetExtensionsStringARB ( wglGetCurrentDC () ) );#else// check GLX extensionsDisplay * display = glXGetCurrentDisplay ();intscreen = DefaultScreen ( display ); return isExtensionSupported ( ext,glXQueryExtensionsString ( display, screen ) );#endif } </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/rabota-s-glx-rasshireniyami.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с WGL-расширениями</title>
		<link>http://linuxradio.info/rabota-s-wgl-rasshireniyami.html</link>
		<comments>http://linuxradio.info/rabota-s-wgl-rasshireniyami.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:16:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[device]]></category>
		<category><![CDATA[isExtensionSupported]]></category>
		<category><![CDATA[указатель]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=361</guid>
		<description><![CDATA[Поскольку эти расширения специфичны только для Windows, то проверка их поддержки непосредственно введенной ранее функцией isExtensionSupported не возможна, поскольку используемая там строка не содержит расширений платформы Windows. Поэтому нужно получить строку со всеми поддерживаемыми расширениями, специфичными для Windows. Для этого сначала следует стандартным образом проверить поддержку расширения WGLARBextensions, и в случае его поддержки ПОЛУЧИТЬ указатель [...]]]></description>
			<content:encoded><![CDATA[<p>Поскольку эти расширения специфичны только для Windows, то проверка их поддержки непосредственно введенной ранее функцией isExtensionSupported не возможна, поскольку используемая там строка не содержит расширений платформы Windows. Поэтому нужно получить строку со всеми поддерживаемыми расширениями, специфичными для Windows. Для этого сначала следует стандартным образом проверить поддержку расширения WGLARBextensions, и в случае его поддержки ПОЛУЧИТЬ указатель на функцию wglGetExtensionsStringARB.if ( isExtensionSupported ( &laquo;WGL_ARB_extensions&raquo; ) )wglGetExtensionsStringARB = (PFtWGLGETEXTENSIONSSTRINGARBPROC)getProcAddress ( &laquo;wglGetExtensionsStringARB&raquo; ); В результате мы получаем указатель на функцию, возвращающую список всех WGL-расширений для заданного контекста устройства (device context) в том же формате, в котором возвращается список всех платформонезависимых расширений: const char * exts = wglGetExtensionsStringARB ( wglGetCurrentDC () ); Тогда для проверки какого-либо из WGL-расширений достаточно установить, встречается ли название расширения в полученной строке. Если да, то можно с помощью функции wgiGetProcAddress получить адреса всех вводимых этим расширением функций. </p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/rabota-s-wgl-rasshireniyami.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Функция для получения адреса вводимых расширением функций под Linux</title>
		<link>http://linuxradio.info/funktsiya-dlya-polutcheniya-adresa-vvodimh-rasshireniem-funktsiy-pod-linux.html</link>
		<comments>http://linuxradio.info/funktsiya-dlya-polutcheniya-adresa-vvodimh-rasshireniem-funktsiy-pod-linux.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:09:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[ASCIIZ]]></category>
		<category><![CDATA[строка]]></category>
		<category><![CDATA[цепочка байтов]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=359</guid>
		<description><![CDATA[Функция для получения адреса вводимых расширением функций под Linux выглядит несколько иначе: void * glXGetProcAddressARB ( const GLubyte * name ); Обратите внимание, что аргументом этой функции является не строка (constchar *), а цепочка байтов, хотя и содержащая имя интересующей нас функции в виде ASCIIZ-строки. Поэтому необходимо приведение типа из строки в цепочку байтов. В [...]]]></description>
			<content:encoded><![CDATA[<p>Функция для получения адреса вводимых расширением функций под Linux выглядит несколько иначе: void * glXGetProcAddressARB ( const GLubyte * name ); Обратите внимание, что аргументом этой функции является не строка (constchar *), а цепочка байтов, хотя и содержащая имя интересующей нас функции в виде ASCIIZ-строки. Поэтому необходимо приведение типа из строки в цепочку байтов. В отличие от Microsoft Windows адреса, возвращаемые данной функцией, доступны в любом контексте рендеринга OpenGL. Эта функция может использоваться как для получения GL, так и GLX-расшпрений. Вот вариант рассмотренной нами функции giForCoordfEXT для платформы Linux:</p>
<blockquote><p>#include PFNGLFOGCOORDFEXTPROC glFogCoordfEXT = NULL;if ( isExtensionSupported ( &laquo;GL_EXT_fog_coord&raquo; ) ) glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glXGetProcAddress ((const Glubyte *)&raquo;glFogCoordfEXT&raquo;); glFogCoordfEXT ( 0.5f ); </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/funktsiya-dlya-polutcheniya-adresa-vvodimh-rasshireniem-funktsiy-pod-linux.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Каким образом осуществляется работа с расширением для платформы Linux</title>
		<link>http://linuxradio.info/kakim-obrazom-osushtestvlyaetsya-rabota-s-rasshireniem-dlya-platform-linux.html</link>
		<comments>http://linuxradio.info/kakim-obrazom-osushtestvlyaetsya-rabota-s-rasshireniem-dlya-platform-linux.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:08:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[HbGL]]></category>
		<category><![CDATA[документ]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=357</guid>
		<description><![CDATA[Рассмотрим теперь, каким образом осуществляется работа с расширением для платформы Linux. Работа с библиотекой OpenGL под управлением операционной системы Linux определяется OpenGL ABI {OpenGL Application Binary Interface for Linux(OpenGL ABI)). Этот документ можно найти в Интернете по адресу http://oss.sgi.com/projects/ogl-sample/ABI/index.html Поскольку в русскоязычной литературе информация по работе с OpenGL под Linux практически отсутствует, далее рассматриваются несколько [...]]]></description>
			<content:encoded><![CDATA[<p>Рассмотрим теперь, каким образом осуществляется работа с расширением для платформы Linux. Работа с библиотекой OpenGL под управлением операционной системы Linux определяется OpenGL ABI {OpenGL Application Binary Interface for Linux(OpenGL ABI)). Этот документ можно найти в Интернете по адресу http://oss.sgi.com/projects/ogl-sample/ABI/index.html Поскольку в русскоязычной литературе информация по работе с OpenGL под Linux практически отсутствует, далее рассматриваются несколько важных моментов использования OpenGL под Linux. Для работы с OpenGL под Linux вам понадобятся библиотеки HbGL и HbGLU, расположенные обычно в каталоге /usr/lib. Если вы хотите использовать библиотеку GLUT, то вам придется собрать ее из исходных файлов (или скачать ее вариант в виде RPM-файла). Необходимы следующие заголовочные файлы — GL/gl.h, GL/glx.h, GL/glu.hи GL/glext.h. На данный момент уже существует версия 1.2 OpenGL, поставляемая с Linux (в отличие от Windows, где все до сих пор работают с версией 1.1). Проверка поддержки расширения осуществляется под Linux точно так же, как и под Windows, для этого пригодна уже известная вам функция isExtensionSupported. </p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/kakim-obrazom-osushtestvlyaetsya-rabota-s-rasshireniem-dlya-platform-linux.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как по имени функции получить ее адрес под Windows</title>
		<link>http://linuxradio.info/kak-po-imeni-funktsii-polutchity-ee-adres-pod-windows.html</link>
		<comments>http://linuxradio.info/kak-po-imeni-funktsii-polutchity-ee-adres-pod-windows.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 21:52:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[рендеринг]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=350</guid>
		<description><![CDATA[Рассмотрим теперь, как по имени функции получить ее адрес. К сожалению, это сильно зависит от используемой платформы. Поэтому мы сначала рассмотрим, как это делается для платформы Microsoft Windows, а потом перейдем к платформе Linux. Для того чтобы под Windows получить адрес определенной, вводимой каким-либо расширением, функции служит функция wglGetProcAddress. PROC wglGetProcAddress(LPCSTR IpszProc); Она по имени [...]]]></description>
			<content:encoded><![CDATA[<p>Рассмотрим теперь, как по имени функции получить ее адрес. К сожалению, это сильно зависит от используемой платформы. Поэтому мы сначала рассмотрим, как это делается для платформы Microsoft Windows, а потом перейдем к платформе Linux. Для того чтобы под Windows получить адрес определенной, вводимой каким-либо расширением, функции служит функция wglGetProcAddress. PROC wglGetProcAddress(LPCSTR IpszProc); Она по имени требуемой функции возвращает указатель на нее. Обратите внимание, что для корректного присвоения ее соответствующему указателю следует выполнить явное приведение типа возвращаемого этой функцией адреса. С помощью функции wglGetProcAddress можно получать адреса не только GL-расширений, но и расширений платформы Windows — WGL-расширений. Приводимый далее фрагмент кода, иллюстрирует (на примере функцииglFogCoordfEXT) правильную работу с расширением (проверка поддержки, инициализация и использование).<br />
<blockquote>
#include PFNGLFOGCOORDFEXTPROCglFogCoordfEXT = NULL; if ( isExtensionSupported ( &laquo;GL_EXT_fog_coord&raquo; ) )glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)wglGetProcAddress ( &laquo;glFogCoordfEXT&raquo; ); glFogCoordfEXT ( 0.5f );</p></blockquote>
<p> Важной особенностью платформы Windows является то, что полученный адрес в общем случае пригоден только для конкретного контекста рендеринга, в котором он был получен, и в другом контексте может не работать.</p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/kak-po-imeni-funktsii-polutchity-ee-adres-pod-windows.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Тип указателя для каждой вводимой расширением функции</title>
		<link>http://linuxradio.info/tip-ukazatelya-dlya-kazhdoy-vvodimoy-rasshireniem-funktsii.html</link>
		<comments>http://linuxradio.info/tip-ukazatelya-dlya-kazhdoy-vvodimoy-rasshireniem-funktsii.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 21:40:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Понятие расширений OpenGL, их основные типы и особенности работы с ними под Windows и Linux]]></category>
		<category><![CDATA[wglext.h]]></category>
		<category><![CDATA[поддержка]]></category>
		<category><![CDATA[расширение]]></category>

		<guid isPermaLink="false">http://linuxradio.info/?p=348</guid>
		<description><![CDATA[Следующим шагом, после проверки того, поддерживается ли данное расширение вашим графическим ускорителем и драйвером к нему (на самом деле поддержка расширений зависит не только от самого графического ускорителя, но и от установленного драйвера, поэтому всегда пользуйтесь последней версией драйвера для своего графического ускорителя), является получение нужных для работы адресов вводимых данным расширением функций. Для каждой [...]]]></description>
			<content:encoded><![CDATA[<p>Следующим шагом, после проверки того, поддерживается ли данное расширение вашим графическим ускорителем и драйвером к нему (на самом деле поддержка расширений зависит не только от самого графического ускорителя, но и от установленного драйвера, поэтому всегда пользуйтесь последней версией драйвера для своего графического ускорителя), является получение нужных для работы адресов вводимых данным расширением функций. Для каждой вводимой расширением функции в соответствующем заголовочном файле (glext.h, wglext.h, glxext.h) содержится определение типа указателя на данную функцию. Так, для функции giFogCoordEXT, вводимой расширением GL_EXT_fog_coord, определяется следующий тип: typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); Таким образом, тип PFNGLFOGCOORDFEXTPROC является адресом указателя на функцию giFogCoordEXT.</p>
<p>Поэтому если ввести переменную giFogCoordEXT, определив ее следующим образом PFNGLFOGCOORDFEXTPROCglFogCoordfEXT ; и потом присвоить ей значение адреса этой функции, то обращение glFogCoordfEXT ( 0.5f ); будет корректным обращением к функции glFogCoordfEXT, вводимой данным расширением. Таким образом, для получения из программы доступа к функциям, вводимым тем или иным расширением, достаточно ввести набор переменных — указателей на эти функции и проинициализировать их соответствующими адресами. После этого можно обращаться к ним как к обычным функциям. </p>
]]></content:encoded>
			<wfw:commentRss>http://linuxradio.info/tip-ukazatelya-dlya-kazhdoy-vvodimoy-rasshireniem-funktsii.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
