Инструменты пользователя

Инструменты сайта


vram

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
vram [2026/10/09 18:04] – geckovram [2026/10/15 16:48] (текущий) – gecko
Строка 7: Строка 7:
  
   * **24-битный** - также известен как 24-bit Direct или True Color. На каждый канал выделено по 8 бит. Используется для вывода на экран и декодирования видео.   * **24-битный** - также известен как 24-bit Direct или True Color. На каждый канал выделено по 8 бит. Используется для вывода на экран и декодирования видео.
-  * **16-битный** - также известен как 15-bit Direct. На каждый канал выделено по 5 бит, старший бит - бит прозрачности (если он равен 1 - включается прозрачность, если 0 - пиксель полностью непрозрачный). Этот режим позволяет хранить 32 × 32 × 32 = 32768 цветов. +  * **16-битный** - также известен как 15-bit Direct. На каждый канал выделено по 5 бит, старший бит - бит прозрачности. Этот режим позволяет хранить 32 × 32 × 32 = 32768 цветов. 
-  * **8-битный индексированный** - использует 256-цветовую палитру. Каждый пиксель является 8-битным индексом в палитре. +  * **8-битный индексированный** - использует 256-цветовую палитру, в которой хранятся 16-битные цвета. Каждый пиксель изображения является 8-битным индексом в палитре. 
-  * **4-битный индексированный** - использует 16-цветовую палитру. Каждый пиксель является 4-битным индексом в палитре. Подходит для простейшей 2D-графики и текста.+  * **4-битный индексированный** - использует 16-цветовую палитру, в которой хранятся 16-битные цвета. Каждый пиксель изображения является 4-битным индексом в палитре. Подходит для простейшей 2D-графики и текста.
  
 Для вывода на экран поддерживаются только прямые 24-битный и 16-битный режимы. Для текстур поддерживаются 16-битный, 8-битный и 4-битный. Для вывода на экран поддерживаются только прямые 24-битный и 16-битный режимы. Для текстур поддерживаются 16-битный, 8-битный и 4-битный.
 +
 +Значение бита прозрачности в пикселе текстуры (или в сплошном цвете примитива) зависит от ситуации:
 +  * Если цвет пикселя черный (0, 0, 0), то нулевой бит прозрачности означает, что пиксель полностью прозрачный, позволяя, таким образом, реализовать технику alpha cutout. Единица в бите прозрачности означает, что пиксель имеет непрозрачный черный цвет;
 +  * Если цвет пикселя не черный, то бит прозрачности включает или выключает полупрозрачность/смешивание (0 = выключено, 1 = включено).
  
 ===== Адресация ===== ===== Адресация =====
Строка 17: Строка 21:
 VRAM адресуется как двумерный буфер разрешением 2048x512 байт, что эквивалентно 1024x512 пикселей в 16-битном цветовом режиме. В левом верхнем углу этого прямоугольника обычно находятся буферы кадра (вверху первичный, под ним - вторичный). VRAM адресуется как двумерный буфер разрешением 2048x512 байт, что эквивалентно 1024x512 пикселей в 16-битном цветовом режиме. В левом верхнем углу этого прямоугольника обычно находятся буферы кадра (вверху первичный, под ним - вторичный).
  
-Доступ к текстурам организован постранично. Текстурная страница - это логическая область размером 256x256 пикселей. GPU использует ее при текстурировании полигонов. Независимо от цветового режима, текстурные координаты имеют диапазон 0..255, поэтому один полигон не может напрямую адресовать текстуру большего размера. Это позволяет кодировать UV-координаты вершин всего двумя байтами.+Доступ к текстурам организован постранично. Текстурная страница - это логическая область размером 256x256 16-битных пикселей. GPU использует ее при текстурировании полигонов. Независимо от цветового режима, текстурные координаты имеют диапазон 0..255, поэтому один полигон не может напрямую адресовать текстуру большего размера. Это позволяет кодировать UV-координаты вершин всего двумя байтами.
  
 Одна и та же текстурная страница физически занимает разный объем памяти, так как ширина страницы в байтах зависит от цветового режима текстуры: Одна и та же текстурная страница физически занимает разный объем памяти, так как ширина страницы в байтах зависит от цветового режима текстуры:
Строка 24: Строка 28:
   * 16-битный - TP=2 - 256 пикселей - 128 KiB   * 16-битный - TP=2 - 256 пикселей - 128 KiB
  
-Текстуры располагаются в VRAM с учетом того, что GPU адресует память 16-битными пикселями. Позиция текстуры (или CLUT) обычно зашивается в заголовок данных файла [[TIM]], где задается 16-битными координатами tx и ty, где: +Текстуры располагаются в VRAM с учетом того, что GPU адресует память 16-битными пикселями. Позиция текстуры (или CLUT) обычно зашивается в файл [[TIM]], где задается 16-битными координатами tx и ty, где: 
-  * tx - горизонтальная координата в 16-битных пикселях, кратная 64; +  * tx - горизонтальная координата в 16-битных пикселях; 
-  * ty - вертикальная координата в строках, кратная 256.+  * ty - вертикальная координата в строках
  
-Для рисования текстурированного полигона в команду GPU отправляется значение tpage, 16-битное поле, которое кодирует положение страницы и параметры ее использования:+Эти координаты используются для загрузки данных в видеопамять командой GP0(A0h), но для чтения их напрямую использовать нельзя. При рисовании текстурированного полигона в GP0 отправляется значение tpage, 16-битное поле, которое кодирует положение страницы и параметры ее использования:
  
-  * Биты 0-3: pageX, горизонтальная позиция страницы (0-15 включительно) +  * Биты 0-3: pageX, горизонтальный индекс страницы (0-15 включительно) 
-  * Бит 4: pageY, вертикальная позиция страницы (0 или 1)+  * Бит 4: pageY, вертикальный индекс страницы (0 или 1)
   * Биты 5-6: ABR, режим прозрачности (0, 1, 2 или 3, см [[GPU#Прозрачность_и_смешивание|GPU: Прозрачность и смешивание]])   * Биты 5-6: ABR, режим прозрачности (0, 1, 2 или 3, см [[GPU#Прозрачность_и_смешивание|GPU: Прозрачность и смешивание]])
-  * Биты 7-8: TP, цветовой режим текстуры (0, 1, 2 или 3)+  * Биты 7-8: TP, цветовой режим текстуры (0, 1 или 2)
  
 Если при загрузке изображения известны его координаты в VRAM (tx, ty) и цветовой режим, то искомое значение tpage получается следующим образом: Если при загрузке изображения известны его координаты в VRAM (tx, ty) и цветовой режим, то искомое значение tpage получается следующим образом:
Строка 43: Строка 47:
 </code> </code>
  
-Если на одной странице располагаются несколько текстур, дополнительно вычисляется относительная позиция текстуры px, py:+Если на одной странице располагаются несколько текстур, дополнительно вычисляется относительная позиция текстуры на странице (px, py):
  
 <code c> <code c>
-uint8_t px = tx % 64; +uint8_t px = (uint8_t)(tx % 64); 
-uint8_t py = ty; +uint8_t py = (uint8_t)ty;
-if (py > 255) py -= 256;+
 </code> </code>
  
-При рисовании полигонов tpage определяет, из какой страницы считывать текстуру, а px+U и px+V указывают конкретный пиксель внутри страницы. Для индексированных текстур дополнительно передается адрес палитры CLUT.+При рисовании полигонов tpage определяет, из какой страницы считывать текстуру, а px+U и px+V для вершин указывают конкретный пиксель внутри страницы.
  
vram.1791569057.txt.gz · Последнее изменение: — gecko

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki