<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=41122&amp;view=findpost&amp;p=338863</guid>
        <pubDate>Thu, 15 Apr 2004 10:36:58 +0000</pubDate>
        <title>Графика в различных режимах</title>
        <link>https://forum.sources.ru/index.php?showtopic=41122&amp;view=findpost&amp;p=338863</link>
        <description><![CDATA[romtek: <span class='tag-size' data-value='12' style='font-size:12pt;'><strong class='tag-b'>Как использовать 256 цветов в графике?</strong></span><br>
Стандартный драйвер egavga.bgi позволяет работать только с 16-ю цветами.<br>
<br>
С помощью этого модуля вы сможете выводить графику с 256 цветами в режимах<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">320x200</span><br>
<span class="tag-color tag-color-named" data-value="orange" style="color: orange">640x480</span><br>
<span class="tag-color tag-color-named" data-value="green" style="color: green">800x600</span><br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">1024x768</span><br>
<br>
<span class='tag-size' data-value='12' style='font-size:12pt;'><span class="tag-color tag-color-named" data-value="red" style="color: red">Внимание: SVGA режим может не работать на некоторых компьютерах&#33;</span></span><br>
<br>
Для этих графических режимов надо подключить модуль <strong class='tag-b'>SVGA_</strong> в разделе <em class='tag-i'>Uses</em><br>
и использовать <strong class='tag-b'><em class='tag-i'>SetVideoMode</em></strong> вместо <em class='tag-i'>InitGraph</em><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Unit SVGA_;</div><div class="code_line">&nbsp;</div><div class="code_line">Interface</div><div class="code_line">Uses Graph;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; &nbsp; { 256 colors }</div><div class="code_line">&nbsp;&nbsp; &nbsp; v320x200 &nbsp; : byte = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; v640x480 &nbsp; : byte = 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; v800x600 &nbsp; : byte = 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp; v1024x768 &nbsp;: byte = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; v1280x1024 : byte = 5;</div><div class="code_line">&nbsp;</div><div class="code_line">Procedure SetVideoMode(Mode: byte);</div><div class="code_line">&nbsp;</div><div class="code_line">Implementation</div><div class="code_line">&nbsp;</div><div class="code_line">procedure SVGA_DRV; external; { подключаем внешний объектный файл с драйвером SVGA }</div><div class="code_line">{$L svgadrv.obj}</div><div class="code_line">&nbsp;</div><div class="code_line">Procedure SetVideoMode;</div><div class="code_line">Var Gd,Gm: integer;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Gd:= InstallUserDriver(&#39;SVGA256&#39;,nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Gd= grError { Table full? } then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writeln(&#39;Error of installing driver.&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Halt(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if RegisterBGIdriver(@SVGA_DRV) &#60; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Writeln(GraphErrorMsg(GraphResult));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;halt(2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Gm:=Mode;</div><div class="code_line">&nbsp;&nbsp; &nbsp; InitGraph(Gd,Gm,&#39;&#39;);</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">END.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<strong class='tag-b'>Пример</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">uses Graph,SVGA_;</div><div class="code_line">&nbsp;</div><div class="code_line">var MX,MY: integer;</div><div class="code_line">&nbsp;</div><div class="code_line">function I2S(i: integer): string;</div><div class="code_line">var s: string[6];</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; str(i,s);</div><div class="code_line">&nbsp;&nbsp; &nbsp; i2s:=s</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp; writeln(&#39;Press Enter.&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; readln;</div><div class="code_line">&nbsp;&nbsp; &nbsp; SetVideoMode(v800x600);</div><div class="code_line">&nbsp;&nbsp; &nbsp; SetColor(GetMaxColor div 3);</div><div class="code_line">&nbsp;&nbsp; &nbsp; MX:=GetMaxX;</div><div class="code_line">&nbsp;&nbsp; &nbsp; MY:=GetMaxY;</div><div class="code_line">&nbsp;&nbsp; &nbsp; line(0,0,MX,MY);</div><div class="code_line">&nbsp;&nbsp; &nbsp; OutTextXY(MX div 3,MY div 2,i2s(MX)+&#39;,&#39;+i2s(MY));</div><div class="code_line">&nbsp;&nbsp; &nbsp; readln;</div><div class="code_line">&nbsp;&nbsp; &nbsp; CloseGraph;</div><div class="code_line">END.</div></ol></div></div></div></div>]]></description>
        <author>romtek</author>
        <category>Pascal: Графика</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=41122&amp;view=findpost&amp;p=266969</guid>
        <pubDate>Sat, 20 Dec 2003 09:22:02 +0000</pubDate>
        <title>Графика в различных режимах</title>
        <link>https://forum.sources.ru/index.php?showtopic=41122&amp;view=findpost&amp;p=266969</link>
        <description><![CDATA[tserega: <span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='14' style='font-size:14pt;'>Программирование графики в различных режимах.</span></span><br>
<br>
Часто люди задаются вопросом, как написать графическую программу, которая использует больше, чем 16 цветов (egavga.bgi) или даже 320x200x256. В свое время я тоже над этим долго мучался, и хочу выложить то, что у меня получилось. Это модуль для работы с графикой в различных режимах: стандартные и нестандартные.<br>
Пожалуй, единственный стандартный режим, который пока доступен - это 320 на 200. Тут все достаточно просто: кусок памяти начиная с адреса &#036;A000:0000 размером в 64000 байт, на каждый байт по одной точке.<br>
Нестандартные режимы отличаются несколькими вещами:<ul class="tag-list"><li>организацией памяти</li><li>можно поставить почти любое разрешение экрана</li></ul>Это (второй пункт), конечно, сделать несколько сложно, т.к. все значения, которые надо записать в определенном порядке в определенные порты VGA чаще всего подбираются методом проб и ошибок. Но добрые люди это уже сделали за нас, и, поэтому, будем пользоваться готовым кодом.<br>
Пару слов о том, как устроена видеопамять в нестандартных режимах. Опять же, она лежит по адресу &#036;A000:0000, но на каждый байт приходится по 4 (&#33;) точки. Это достигается наличием так называемых &quot;битовых плоскостей&quot;. Т.е. в зависимости от того, какую плоскость мы выбрали, определяется, где будет находится очередной пиксель. Например, составим небольшую табличку для объяснения этой схемы:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Nr пикселя     Nr плоскости   Адрес памяти</div><div class="code_line">0             0            $A000:0000</div><div class="code_line">1             1            $A000:0000</div><div class="code_line">2             2            $A000:0000</div><div class="code_line">3             3            $A000:0000</div><div class="code_line">4             0            $A000:0001</div><div class="code_line">5             1            $A000:0001</div><div class="code_line">...</div></ol></div></div></div></div><br>
Одновременно можно ставить пиксели во все 4 плоскости, что при разумном использовании дает выигрыш по скорости в 4 раза.<br>
Переключение плоскостей - достаточно медленный процесс. Поэтому, есть смысл создавать изображение в памяти (не видео), а потом переносить его на экран по плоскостям. Так можно убить сразу же двух зайцев: увеличит скорость (fps) и обеспечить возможность для анимации без мерцания.<br>
<br>
Поддерживаемые разрешения.<br>
256x256 (256 цветов)<br>
320x100 (256 цветов)<br>
320x200 (256 цветов)<br>
320x240 (256 цветов) - режим X<br>
320x400 (256 цветов)<br>
360x240 (256 цветов)<br>
360x256 (256 цветов)<br>
360x480 (256 цветов)<br>
376x282 (256 цветов)<br>
320x480 (256 цветов)<br>
360x360 (256 цветов)<br>
376x308 (256 цветов)<br>
376x564 (256 цветов)<br>
400x300 (256 цветов)<br>
512x384 (256 цветов)<br>
640x400 (256 цветов)<br>
640x480 (256 цветов)<br>
800x600 (256 цветов)<br>
1024x768 (256 цветов)<br>
1280x1024 (256 цветов)<br>
320x200 (16 бит цветов)<br>
320x240 (16 бит цветов)<br>
400x300 (16 бит цветов)<br>
512x384 (16 бит цветов)<br>
640x400 (16 бит цветов)<br>
640x480 (16 бит цветов)<br>
800x600 (16 бит цветов)<br>
1024x768 (16 бит цветов)<br>
1280x1024 (16 бит цветов)<br>
Все видеорежимы, которые не используют возможности VESA (вплоть до 376x564) <strong class='tag-b'>гарантировано</strong> работают на всех видеокартах&#33;<br>
<br>
В данном модуле содержатся примеры использования. Есть поддержка графических файлов BMP (8 и 24 бит цвета, несжатые), а также PCX (8 бит). Несколько модифицированных функций для работы с памятью позволяют увеличить скорость вывода на экран. Копирование осуществляется отдельно по битовым плоскостям. Средняя скорость работы - около 60 кадров в секунду.<br>
Для работы некоторых режимов может потребоваться компиляция в защищенном режиме&#33;<br>
Также есть встроенные функции для работы с мышкой и таймером.<br>
<br>
<strong class='tag-b'>Скачать модуль uvga2 можно <a class='tag-url' href='http://www.zolitude.lv/download/uvga2.zip' target='_blank'>здесь</a>.</strong>]]></description>
        <author>tserega</author>
        <category>Pascal: Графика</category>
      </item>
	
      </channel>
      </rss>
	