<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=C.OpenGLES.gears</id>
	<title>C.OpenGLES.gears - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=C.OpenGLES.gears"/>
	<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;action=history"/>
	<updated>2026-05-04T01:47:03Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=707&amp;oldid=prev</id>
		<title>Stuw в 20:21, 16 января 2015</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=707&amp;oldid=prev"/>
		<updated>2015-01-16T20:21:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:21, 16 января 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Попробуем собрать простейшее (не совсем) приложение с поддержкой GLES.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Попробуем собрать простейшее (не совсем) приложение с поддержкой GLES.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Берем &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;[http://phoronix.com/forums/showthread.php?60486-Any-OpenGL-ES-2.0-with-EGL-example-on-Mesa отсюда&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] исходничек. Не знаю откуда он на самом деле, ну да не ссуть.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Берем [http://phoronix.com/forums/showthread.php?60486-Any-OpenGL-ES-2.0-with-EGL-example-on-Mesa отсюда] исходничек. Не знаю откуда он на самом деле, ну да не ссуть.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Немного придется его подправить, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;[https://wiki.ubuntu.com/ARM/TEGRA/AC100#Graphics Согласно этому (:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Немного придется его подправить, [https://wiki.ubuntu.com/ARM/TEGRA/AC100#Graphics Согласно этому (:]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(кстати там ошибка в &amp;quot;precision mediump float;\n&amp;quot;) (все дружно ждем релиза от nvidia, когда все будет работать хорошо)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(кстати там ошибка в &amp;quot;precision mediump float;\n&amp;quot;) (все дружно ждем релиза от nvidia, когда все будет работать хорошо)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key paz00_wiki-ac100:diff::1.12:old-706:rev-707 --&gt;
&lt;/table&gt;</summary>
		<author><name>Stuw</name></author>
	</entry>
	<entry>
		<id>https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=706&amp;oldid=prev</id>
		<title>Stuw: Fix links and view</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=706&amp;oldid=prev"/>
		<updated>2015-01-16T20:20:38Z</updated>

		<summary type="html">&lt;p&gt;Fix links and view&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:20, 16 января 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Попробуем собрать простейшее (не совсем) приложение с поддержкой GLES.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Попробуем собрать простейшее (не совсем) приложение с поддержкой GLES.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Берем [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@&lt;/del&gt;http://phoronix.com/forums/showthread.php?60486-Any-OpenGL-ES-2.0-with-EGL-example-on-Mesa&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;отсюда]] исходничек. Не знаю откуда он на самом деле, ну да не ссуть.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Берем [[http://phoronix.com/forums/showthread.php?60486-Any-OpenGL-ES-2.0-with-EGL-example-on-Mesa отсюда]] исходничек. Не знаю откуда он на самом деле, ну да не ссуть.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Немного придется его подправить, [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@&lt;/del&gt;https://wiki.ubuntu.com/ARM/TEGRA/AC100#Graphics&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/del&gt;Согласно этому (:]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Немного придется его подправить, [[https://wiki.ubuntu.com/ARM/TEGRA/AC100#Graphics Согласно этому (:]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(кстати там ошибка в &amp;quot;precision mediump float;\n&amp;quot;) (все дружно ждем релиза от nvidia, когда все будет работать хорошо)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(кстати там ошибка в &amp;quot;precision mediump float;\n&amp;quot;) (все дружно ждем релиза от nvidia, когда все будет работать хорошо)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l523&quot;&gt;Строка 523:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 523:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(Кто знает как свернуть эту простыню, поправьте)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(Кто знает как свернуть эту простыню, поправьте)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ну и КОНЬПЕЛИРУЕМ.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ну и КОНЬПЕЛИРУЕМ.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;gcc es2.c -lX11 -lEGL -lGLESv2 -lm -o es2.arm&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;gcc es2.c -lX11 -lEGL -lGLESv2 -lm -o es2.arm&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Не забываем про dev пакеты libgles2-mesa-dev или как они у вас там называются)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Не забываем про dev пакеты libgles2-mesa-dev или как они у вас там называются) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В итоге получаем няшку:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В итоге получаем няшку: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:es2.png|560x327px]] &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:es2.png|560x327px]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;http://ompldr.org/vYmpieA &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:&lt;/del&gt;http://ompldr.org/vYmpieA&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|800x468px]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;шестеренки для hf &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;шестеренки для hf&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://ompldr.org/vYmpjNA исходник] [http://ompldr.org/vYmpjMA бинарник]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://ompldr.org/vYmpjNA исходник] [http://ompldr.org/vYmpjMA бинарник]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key paz00_wiki-ac100:diff::1.12:old-258:rev-706 --&gt;
&lt;/table&gt;</summary>
		<author><name>Stuw</name></author>
	</entry>
	<entry>
		<id>https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=258&amp;oldid=prev</id>
		<title>Unknown user в 08:15, 15 октября 2014</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=C.OpenGLES.gears&amp;diff=258&amp;oldid=prev"/>
		<updated>2014-10-15T08:15:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Попробуем собрать простейшее (не совсем) приложение с поддержкой GLES.&lt;br /&gt;
Берем [[@http://phoronix.com/forums/showthread.php?60486-Any-OpenGL-ES-2.0-with-EGL-example-on-Mesa|отсюда]] исходничек. Не знаю откуда он на самом деле, ну да не ссуть.&lt;br /&gt;
Немного придется его подправить, [[@https://wiki.ubuntu.com/ARM/TEGRA/AC100#Graphics|Согласно этому (:]]&lt;br /&gt;
(кстати там ошибка в &amp;quot;precision mediump float;\n&amp;quot;) (все дружно ждем релиза от nvidia, когда все будет работать хорошо)&lt;br /&gt;
&lt;br /&gt;
'''Важно''': (актуально только для альфы, в бета версии исправлено) в вызове XGetVisualInfo вместо Visual'''ID'''Mask надо использовать Visual'''No'''Mask.&lt;br /&gt;
'''Важно''': чтобы выключить вертикальную синхронизацию надо позвать eglSwapInterval(egl_dpy, 0)&lt;br /&gt;
&lt;br /&gt;
[http://ac100.wikispaces.com/file/view/es2gears.c/279065724/es2gears.c es2gears.c] (soft float [http://ac100.wikispaces.com/file/view/es2gears.arm/279065748/es2gears.arm es2gears.arm] с включенной верт. синхронизацией)&lt;br /&gt;
&lt;br /&gt;
[http://ac100.wikispaces.com/file/view/es2.c/266954898/es2.c es2.c]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**************************************************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.&lt;br /&gt;
 * All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 **************************************************************************/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Draw a triangle with X/EGL and OpenGL ES 2.x&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#define USE_FULL_GL 0&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;assert.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;X11/Xlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;X11/Xutil.h&amp;gt;&lt;br /&gt;
#include &amp;lt;X11/keysym.h&amp;gt;&lt;br /&gt;
#if USE_FULL_GL&lt;br /&gt;
#include &amp;lt;GL/gl.h&amp;gt;  /* use full OpenGL */&lt;br /&gt;
#else&lt;br /&gt;
#include &amp;lt;GLES2/gl2.h&amp;gt;  /* use OpenGL ES 2.x */&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;lt;EGL/egl.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define FLOAT_TO_FIXED(X)   ((X) * 65535.0)&lt;br /&gt;
static GLfloat view_rotx = 0.0, view_roty = 0.0;&lt;br /&gt;
static GLint u_matrix = -1;&lt;br /&gt;
static GLint attr_pos = 0, attr_color = 1;&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
make_z_rot_matrix(GLfloat angle, GLfloat *m)&lt;br /&gt;
{&lt;br /&gt;
   float c = cos(angle * M_PI / 180.0);&lt;br /&gt;
   float s = sin(angle * M_PI / 180.0);&lt;br /&gt;
   int i;&lt;br /&gt;
   for (i = 0; i &amp;lt; 16; i++)&lt;br /&gt;
      m[i] = 0.0;&lt;br /&gt;
   m[0] = m[5] = m[10] = m[15] = 1.0;&lt;br /&gt;
&lt;br /&gt;
   m[0] = c;&lt;br /&gt;
   m[1] = s;&lt;br /&gt;
   m[4] = -s;&lt;br /&gt;
   m[5] = c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
make_scale_matrix(GLfloat xs, GLfloat ys, GLfloat zs, GLfloat *m)&lt;br /&gt;
{&lt;br /&gt;
   int i;&lt;br /&gt;
   for (i = 0; i &amp;lt; 16; i++)&lt;br /&gt;
      m[i] = 0.0;&lt;br /&gt;
   m[0] = xs;&lt;br /&gt;
   m[5] = ys;&lt;br /&gt;
   m[10] = zs;&lt;br /&gt;
   m[15] = 1.0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
mul_matrix(GLfloat *prod, const GLfloat *a, const GLfloat *b)&lt;br /&gt;
{&lt;br /&gt;
#define A(row,col)  a[(col&amp;lt;&amp;lt;2)+row]&lt;br /&gt;
#define B(row,col)  b[(col&amp;lt;&amp;lt;2)+row]&lt;br /&gt;
#define P(row,col)  p[(col&amp;lt;&amp;lt;2)+row]&lt;br /&gt;
   GLfloat p[16];&lt;br /&gt;
   GLint i;&lt;br /&gt;
   for (i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      const GLfloat ai0=A(i,0),  ai1=A(i,1),  ai2=A(i,2),  ai3=A(i,3);&lt;br /&gt;
      P(i,0) = ai0 * B(0,0) + ai1 * B(1,0) + ai2 * B(2,0) + ai3 * B(3,0);&lt;br /&gt;
      P(i,1) = ai0 * B(0,1) + ai1 * B(1,1) + ai2 * B(2,1) + ai3 * B(3,1);&lt;br /&gt;
      P(i,2) = ai0 * B(0,2) + ai1 * B(1,2) + ai2 * B(2,2) + ai3 * B(3,2);&lt;br /&gt;
      P(i,3) = ai0 * B(0,3) + ai1 * B(1,3) + ai2 * B(2,3) + ai3 * B(3,3);&lt;br /&gt;
   }&lt;br /&gt;
   memcpy(prod, p, sizeof(p));&lt;br /&gt;
#undef A&lt;br /&gt;
#undef B&lt;br /&gt;
#undef PROD&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
draw(void)&lt;br /&gt;
{&lt;br /&gt;
   static const GLfloat verts[3][2] = {&lt;br /&gt;
      { -1, -1 },&lt;br /&gt;
      {  1, -1 },&lt;br /&gt;
      {  0,  1 }&lt;br /&gt;
   };&lt;br /&gt;
   static const GLfloat colors[3][3] = {&lt;br /&gt;
      { 1, 0, 0 },&lt;br /&gt;
      { 0, 1, 0 },&lt;br /&gt;
      { 0, 0, 1 }&lt;br /&gt;
   };&lt;br /&gt;
   GLfloat mat[16], rot[16], scale[16];&lt;br /&gt;
&lt;br /&gt;
   /* Set modelview/projection matrix */&lt;br /&gt;
   make_z_rot_matrix(view_rotx, rot);&lt;br /&gt;
   make_scale_matrix(0.5, 0.5, 0.5, scale);&lt;br /&gt;
   mul_matrix(mat, rot, scale);&lt;br /&gt;
   glUniformMatrix4fv(u_matrix, 1, GL_FALSE, mat);&lt;br /&gt;
&lt;br /&gt;
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
   {&lt;br /&gt;
      glVertexAttribPointer(attr_pos, 2, GL_FLOAT, GL_FALSE, 0, verts);&lt;br /&gt;
      glVertexAttribPointer(attr_color, 3, GL_FLOAT, GL_FALSE, 0, colors);&lt;br /&gt;
      glEnableVertexAttribArray(attr_pos);&lt;br /&gt;
      glEnableVertexAttribArray(attr_color);&lt;br /&gt;
&lt;br /&gt;
      glDrawArrays(GL_TRIANGLES, 0, 3);&lt;br /&gt;
&lt;br /&gt;
      glDisableVertexAttribArray(attr_pos);&lt;br /&gt;
      glDisableVertexAttribArray(attr_color);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* new window size or exposure */&lt;br /&gt;
static void&lt;br /&gt;
reshape(int width, int height)&lt;br /&gt;
{&lt;br /&gt;
   glViewport(0, 0, (GLint) width, (GLint) height);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
create_shaders(void)&lt;br /&gt;
{&lt;br /&gt;
   static const char *fragShaderText =&lt;br /&gt;
      &amp;quot;#ifdef GL_ES\n&amp;quot;&lt;br /&gt;
      &amp;quot;precision mediump float;\n&amp;quot;&lt;br /&gt;
      &amp;quot;#endif\n&amp;quot;&lt;br /&gt;
      &amp;quot;varying vec4 v_color;\n&amp;quot;&lt;br /&gt;
      &amp;quot;void main() {\n&amp;quot;&lt;br /&gt;
      &amp;quot;   gl_FragColor = v_color;\n&amp;quot;&lt;br /&gt;
      &amp;quot;}\n&amp;quot;;&lt;br /&gt;
   static const char *vertShaderText =&lt;br /&gt;
      &amp;quot;uniform mat4 modelviewProjection;\n&amp;quot;&lt;br /&gt;
      &amp;quot;attribute vec4 pos;\n&amp;quot;&lt;br /&gt;
      &amp;quot;attribute vec4 color;\n&amp;quot;&lt;br /&gt;
      &amp;quot;varying vec4 v_color;\n&amp;quot;&lt;br /&gt;
      &amp;quot;void main() {\n&amp;quot;&lt;br /&gt;
      &amp;quot;   gl_Position = modelviewProjection * pos;\n&amp;quot;&lt;br /&gt;
      &amp;quot;   v_color = color;\n&amp;quot;&lt;br /&gt;
      &amp;quot;}\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   GLuint fragShader, vertShader, program;&lt;br /&gt;
   GLint stat;&lt;br /&gt;
&lt;br /&gt;
   fragShader = glCreateShader(GL_FRAGMENT_SHADER);&lt;br /&gt;
   glShaderSource(fragShader, 1, (const char **) &amp;amp;fragShaderText, NULL);&lt;br /&gt;
   glCompileShader(fragShader);&lt;br /&gt;
   glGetShaderiv(fragShader, GL_COMPILE_STATUS, &amp;amp;stat);&lt;br /&gt;
   if (!stat) {&lt;br /&gt;
      printf(&amp;quot;Error: fragment shader did not compile!\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   vertShader = glCreateShader(GL_VERTEX_SHADER);&lt;br /&gt;
   glShaderSource(vertShader, 1, (const char **) &amp;amp;vertShaderText, NULL);&lt;br /&gt;
   glCompileShader(vertShader);&lt;br /&gt;
   glGetShaderiv(vertShader, GL_COMPILE_STATUS, &amp;amp;stat);&lt;br /&gt;
   if (!stat) {&lt;br /&gt;
      printf(&amp;quot;Error: vertex shader did not compile!\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   program = glCreateProgram();&lt;br /&gt;
   glAttachShader(program, fragShader);&lt;br /&gt;
   glAttachShader(program, vertShader);&lt;br /&gt;
   glLinkProgram(program);&lt;br /&gt;
&lt;br /&gt;
   glGetProgramiv(program, GL_LINK_STATUS, &amp;amp;stat);&lt;br /&gt;
   if (!stat) {&lt;br /&gt;
      char log[1000];&lt;br /&gt;
      GLsizei len;&lt;br /&gt;
      glGetProgramInfoLog(program, 1000, &amp;amp;len, log);&lt;br /&gt;
      printf(&amp;quot;Error: linking:\n%s\n&amp;quot;, log);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   glUseProgram(program);&lt;br /&gt;
&lt;br /&gt;
   if (1) {&lt;br /&gt;
      /* test setting attrib locations */&lt;br /&gt;
      glBindAttribLocation(program, attr_pos, &amp;quot;pos&amp;quot;);&lt;br /&gt;
      glBindAttribLocation(program, attr_color, &amp;quot;color&amp;quot;);&lt;br /&gt;
      glLinkProgram(program);  /* needed to put attribs into effect */&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      /* test automatic attrib locations */&lt;br /&gt;
      attr_pos = glGetAttribLocation(program, &amp;quot;pos&amp;quot;);&lt;br /&gt;
      attr_color = glGetAttribLocation(program, &amp;quot;color&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   u_matrix = glGetUniformLocation(program, &amp;quot;modelviewProjection&amp;quot;);&lt;br /&gt;
   printf(&amp;quot;Uniform modelviewProjection at %d\n&amp;quot;, u_matrix);&lt;br /&gt;
   printf(&amp;quot;Attrib pos at %d\n&amp;quot;, attr_pos);&lt;br /&gt;
   printf(&amp;quot;Attrib color at %d\n&amp;quot;, attr_color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
init(void)&lt;br /&gt;
{&lt;br /&gt;
   typedef void (*proc)();&lt;br /&gt;
&lt;br /&gt;
#if 1 /* test code */&lt;br /&gt;
   proc p = eglGetProcAddress(&amp;quot;glMapBufferOES&amp;quot;);&lt;br /&gt;
   assert(p);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
   glClearColor(0.4, 0.4, 0.4, 0.0);&lt;br /&gt;
&lt;br /&gt;
   create_shaders();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Create an RGB, double-buffered X window.&lt;br /&gt;
 * Return the window and context handles.&lt;br /&gt;
 */&lt;br /&gt;
static void&lt;br /&gt;
make_x_window(Display *x_dpy, EGLDisplay egl_dpy,&lt;br /&gt;
              const char *name,&lt;br /&gt;
              int x, int y, int width, int height,&lt;br /&gt;
              Window *winRet,&lt;br /&gt;
              EGLContext *ctxRet,&lt;br /&gt;
              EGLSurface *surfRet)&lt;br /&gt;
{&lt;br /&gt;
   static const EGLint attribs[] = {&lt;br /&gt;
      EGL_RED_SIZE, 1,&lt;br /&gt;
      EGL_GREEN_SIZE, 1,&lt;br /&gt;
      EGL_BLUE_SIZE, 1,&lt;br /&gt;
      EGL_DEPTH_SIZE, 1,&lt;br /&gt;
      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,&lt;br /&gt;
      EGL_NONE&lt;br /&gt;
   };&lt;br /&gt;
   static const EGLint ctx_attribs[] = {&lt;br /&gt;
      EGL_CONTEXT_CLIENT_VERSION, 2,&lt;br /&gt;
      EGL_NONE&lt;br /&gt;
   };&lt;br /&gt;
   int scrnum;&lt;br /&gt;
   XSetWindowAttributes attr;&lt;br /&gt;
   unsigned long mask;&lt;br /&gt;
   Window root;&lt;br /&gt;
   Window win;&lt;br /&gt;
   XVisualInfo *visInfo, visTemplate;&lt;br /&gt;
   int num_visuals;&lt;br /&gt;
   EGLContext ctx;&lt;br /&gt;
   EGLConfig config;&lt;br /&gt;
   EGLint num_configs;&lt;br /&gt;
   EGLint vid;&lt;br /&gt;
&lt;br /&gt;
   scrnum = DefaultScreen( x_dpy );&lt;br /&gt;
   root = RootWindow( x_dpy, scrnum );&lt;br /&gt;
&lt;br /&gt;
   if (!eglChooseConfig( egl_dpy, attribs, &amp;amp;config, 1, &amp;amp;num_configs)) {&lt;br /&gt;
      printf(&amp;quot;Error: couldn't get an EGL visual config\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   assert(config);&lt;br /&gt;
   assert(num_configs &amp;gt; 0);&lt;br /&gt;
&lt;br /&gt;
   if (!eglGetConfigAttrib(egl_dpy, config, EGL_NATIVE_VISUAL_ID, &amp;amp;vid)) {&lt;br /&gt;
      printf(&amp;quot;Error: eglGetConfigAttrib() failed\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   /* The X window visual must match the EGL config */&lt;br /&gt;
   visTemplate.visualid = vid;&lt;br /&gt;
   visInfo = XGetVisualInfo(x_dpy, VisualNoMask, &amp;amp;visTemplate, &amp;amp;num_visuals);&lt;br /&gt;
   if (!visInfo) {&lt;br /&gt;
      printf(&amp;quot;Error: couldn't get X visual\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   /* window attributes */&lt;br /&gt;
   attr.background_pixel = 0;&lt;br /&gt;
   attr.border_pixel = 0;&lt;br /&gt;
   attr.colormap = XCreateColormap( x_dpy, root, visInfo-&amp;gt;visual, AllocNone);&lt;br /&gt;
   attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;&lt;br /&gt;
   mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;&lt;br /&gt;
&lt;br /&gt;
   win = XCreateWindow( x_dpy, root, 0, 0, width, height,&lt;br /&gt;
                0, visInfo-&amp;gt;depth, InputOutput,&lt;br /&gt;
                visInfo-&amp;gt;visual, mask, &amp;amp;attr );&lt;br /&gt;
&lt;br /&gt;
   /* set hints and properties */&lt;br /&gt;
   {&lt;br /&gt;
      XSizeHints sizehints;&lt;br /&gt;
      sizehints.x = x;&lt;br /&gt;
      sizehints.y = y;&lt;br /&gt;
      sizehints.width  = width;&lt;br /&gt;
      sizehints.height = height;&lt;br /&gt;
      sizehints.flags = USSize | USPosition;&lt;br /&gt;
      XSetNormalHints(x_dpy, win, &amp;amp;sizehints);&lt;br /&gt;
      XSetStandardProperties(x_dpy, win, name, name,&lt;br /&gt;
                              None, (char **)NULL, 0, &amp;amp;sizehints);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
#if USE_FULL_GL /* XXX fix this when eglBindAPI() works */&lt;br /&gt;
   eglBindAPI(EGL_OPENGL_API);&lt;br /&gt;
#else&lt;br /&gt;
   eglBindAPI(EGL_OPENGL_ES_API);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
   ctx = eglCreateContext(egl_dpy, config, EGL_NO_CONTEXT, ctx_attribs );&lt;br /&gt;
   if (!ctx) {&lt;br /&gt;
      printf(&amp;quot;Error: eglCreateContext failed\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   /* test eglQueryContext() */&lt;br /&gt;
   {&lt;br /&gt;
      EGLint val;&lt;br /&gt;
      eglQueryContext(egl_dpy, ctx, EGL_CONTEXT_CLIENT_VERSION, &amp;amp;val);&lt;br /&gt;
      assert(val == 2);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   *surfRet = eglCreateWindowSurface(egl_dpy, config, win, NULL);&lt;br /&gt;
   if (!*surfRet) {&lt;br /&gt;
      printf(&amp;quot;Error: eglCreateWindowSurface failed\n&amp;quot;);&lt;br /&gt;
      exit(1);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   /* sanity checks */&lt;br /&gt;
   {&lt;br /&gt;
      EGLint val;&lt;br /&gt;
      eglQuerySurface(egl_dpy, *surfRet, EGL_WIDTH, &amp;amp;val);&lt;br /&gt;
      assert(val == width);&lt;br /&gt;
      eglQuerySurface(egl_dpy, *surfRet, EGL_HEIGHT, &amp;amp;val);&lt;br /&gt;
      assert(val == height);&lt;br /&gt;
      assert(eglGetConfigAttrib(egl_dpy, config, EGL_SURFACE_TYPE, &amp;amp;val));&lt;br /&gt;
      assert(val &amp;amp; EGL_WINDOW_BIT);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   XFree(visInfo);&lt;br /&gt;
&lt;br /&gt;
   *winRet = win;&lt;br /&gt;
   *ctxRet = ctx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
event_loop(Display *dpy, Window win,&lt;br /&gt;
           EGLDisplay egl_dpy, EGLSurface egl_surf)&lt;br /&gt;
{&lt;br /&gt;
   while (1) {&lt;br /&gt;
      int redraw = 0;&lt;br /&gt;
      XEvent event;&lt;br /&gt;
&lt;br /&gt;
      XNextEvent(dpy, &amp;amp;event);&lt;br /&gt;
&lt;br /&gt;
      switch (event.type) {&lt;br /&gt;
      case Expose:&lt;br /&gt;
         redraw = 1;&lt;br /&gt;
         break;&lt;br /&gt;
      case ConfigureNotify:&lt;br /&gt;
         reshape(event.xconfigure.width, event.xconfigure.height);&lt;br /&gt;
         break;&lt;br /&gt;
      case KeyPress:&lt;br /&gt;
         {&lt;br /&gt;
            char buffer[10];&lt;br /&gt;
            int r, code;&lt;br /&gt;
            code = XLookupKeysym(&amp;amp;event.xkey, 0);&lt;br /&gt;
            if (code == XK_Left) {&lt;br /&gt;
               view_roty += 5.0;&lt;br /&gt;
            }&lt;br /&gt;
            else if (code == XK_Right) {&lt;br /&gt;
               view_roty -= 5.0;&lt;br /&gt;
            }&lt;br /&gt;
            else if (code == XK_Up) {&lt;br /&gt;
               view_rotx += 5.0;&lt;br /&gt;
            }&lt;br /&gt;
            else if (code == XK_Down) {&lt;br /&gt;
               view_rotx -= 5.0;&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               r = XLookupString(&amp;amp;event.xkey, buffer, sizeof(buffer),&lt;br /&gt;
                                 NULL, NULL);&lt;br /&gt;
               if (buffer[0] == 27) {&lt;br /&gt;
                  /* escape */&lt;br /&gt;
                  return;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
         redraw = 1;&lt;br /&gt;
         break;&lt;br /&gt;
      default:&lt;br /&gt;
         ; /*no-op*/&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      if (redraw) {&lt;br /&gt;
         draw();&lt;br /&gt;
         eglSwapBuffers(egl_dpy, egl_surf);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
usage(void)&lt;br /&gt;
{&lt;br /&gt;
   printf(&amp;quot;Usage:\n&amp;quot;);&lt;br /&gt;
   printf(&amp;quot;  -display &amp;lt;displayname&amp;gt;  set the display to run on\n&amp;quot;);&lt;br /&gt;
   printf(&amp;quot;  -info                   display OpenGL renderer info\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
   const int winWidth = 300, winHeight = 300;&lt;br /&gt;
   Display *x_dpy;&lt;br /&gt;
   Window win;&lt;br /&gt;
   EGLSurface egl_surf;&lt;br /&gt;
   EGLContext egl_ctx;&lt;br /&gt;
   EGLDisplay egl_dpy;&lt;br /&gt;
   char *dpyName = NULL;&lt;br /&gt;
   GLboolean printInfo = GL_FALSE;&lt;br /&gt;
   EGLint egl_major, egl_minor;&lt;br /&gt;
   int i;&lt;br /&gt;
   const char *s;&lt;br /&gt;
&lt;br /&gt;
   for (i = 1; i &amp;lt; argc; i++) {&lt;br /&gt;
      if (strcmp(argv[i], &amp;quot;-display&amp;quot;) == 0) {&lt;br /&gt;
         dpyName = argv[i+1];&lt;br /&gt;
         i++;&lt;br /&gt;
      }&lt;br /&gt;
      else if (strcmp(argv[i], &amp;quot;-info&amp;quot;) == 0) {&lt;br /&gt;
         printInfo = GL_TRUE;&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
         usage();&lt;br /&gt;
         return -1;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   x_dpy = XOpenDisplay(dpyName);&lt;br /&gt;
   if (!x_dpy) {&lt;br /&gt;
      printf(&amp;quot;Error: couldn't open display %s\n&amp;quot;,&lt;br /&gt;
         dpyName ? dpyName : getenv(&amp;quot;DISPLAY&amp;quot;));&lt;br /&gt;
      return -1;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   egl_dpy = eglGetDisplay(x_dpy);&lt;br /&gt;
   if (!egl_dpy) {&lt;br /&gt;
      printf(&amp;quot;Error: eglGetDisplay() failed\n&amp;quot;);&lt;br /&gt;
      return -1;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (!eglInitialize(egl_dpy, &amp;amp;egl_major, &amp;amp;egl_minor)) {&lt;br /&gt;
      printf(&amp;quot;Error: eglInitialize() failed\n&amp;quot;);&lt;br /&gt;
      return -1;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   s = eglQueryString(egl_dpy, EGL_VERSION);&lt;br /&gt;
   printf(&amp;quot;EGL_VERSION = %s\n&amp;quot;, s);&lt;br /&gt;
&lt;br /&gt;
   s = eglQueryString(egl_dpy, EGL_VENDOR);&lt;br /&gt;
   printf(&amp;quot;EGL_VENDOR = %s\n&amp;quot;, s);&lt;br /&gt;
&lt;br /&gt;
   s = eglQueryString(egl_dpy, EGL_EXTENSIONS);&lt;br /&gt;
   printf(&amp;quot;EGL_EXTENSIONS = %s\n&amp;quot;, s);&lt;br /&gt;
&lt;br /&gt;
   s = eglQueryString(egl_dpy, EGL_CLIENT_APIS);&lt;br /&gt;
   printf(&amp;quot;EGL_CLIENT_APIS = %s\n&amp;quot;, s);&lt;br /&gt;
&lt;br /&gt;
   make_x_window(x_dpy, egl_dpy,&lt;br /&gt;
                 &amp;quot;OpenGL ES 2.x tri&amp;quot;, 0, 0, winWidth, winHeight,&lt;br /&gt;
                 &amp;amp;win, &amp;amp;egl_ctx, &amp;amp;egl_surf);&lt;br /&gt;
&lt;br /&gt;
   XMapWindow(x_dpy, win);&lt;br /&gt;
   if (!eglMakeCurrent(egl_dpy, egl_surf, egl_surf, egl_ctx)) {&lt;br /&gt;
      printf(&amp;quot;Error: eglMakeCurrent() failed\n&amp;quot;);&lt;br /&gt;
      return -1;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if (printInfo) {&lt;br /&gt;
      printf(&amp;quot;GL_RENDERER   = %s\n&amp;quot;, (char *) glGetString(GL_RENDERER));&lt;br /&gt;
      printf(&amp;quot;GL_VERSION    = %s\n&amp;quot;, (char *) glGetString(GL_VERSION));&lt;br /&gt;
      printf(&amp;quot;GL_VENDOR     = %s\n&amp;quot;, (char *) glGetString(GL_VENDOR));&lt;br /&gt;
      printf(&amp;quot;GL_EXTENSIONS = %s\n&amp;quot;, (char *) glGetString(GL_EXTENSIONS));&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   init();&lt;br /&gt;
&lt;br /&gt;
   /* Set initial projection/viewing transformation.&lt;br /&gt;
    * We can't be sure we'll get a ConfigureNotify event when the window&lt;br /&gt;
    * first appears.&lt;br /&gt;
    */&lt;br /&gt;
   reshape(winWidth, winHeight);&lt;br /&gt;
&lt;br /&gt;
   event_loop(x_dpy, win, egl_dpy, egl_surf);&lt;br /&gt;
&lt;br /&gt;
   eglDestroyContext(egl_dpy, egl_ctx);&lt;br /&gt;
   eglDestroySurface(egl_dpy, egl_surf);&lt;br /&gt;
   eglTerminate(egl_dpy);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   XDestroyWindow(x_dpy, win);&lt;br /&gt;
   XCloseDisplay(x_dpy);&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Кто знает как свернуть эту простыню, поправьте)&lt;br /&gt;
ну и КОНЬПЕЛИРУЕМ.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc es2.c -lX11 -lEGL -lGLESv2 -lm -o es2.arm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не забываем про dev пакеты libgles2-mesa-dev или как они у вас там называются)&lt;br /&gt;
В итоге получаем няшку:&lt;br /&gt;
&lt;br /&gt;
[[File:es2.png|560x327px]]&lt;br /&gt;
[[File:http://ompldr.org/vYmpieA|800x468px]]&lt;br /&gt;
шестеренки для hf&lt;br /&gt;
[http://ompldr.org/vYmpjNA исходник] [http://ompldr.org/vYmpjMA бинарник]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>