Организация текстур — различия между версиями

Материал из SkyXEngine wiki
Перейти к: навигация, поиск
м (Правила именования и расположения текстур)
 
Строка 1: Строка 1:
Загрузка текстур управляется загрузчиком который находится в графическом ядре sxgcore. Имена функций загрузчика текстур начинаются с SGCore_LoadTex, более подробную документацию по функциям можно прочитать [https://doc.skyxengine.com/group__sxgcore__loadtex.html здесь].
+
Загрузка текстур управляется загрузчиком который находится в графическом ядре ''sxgcore''.
  
 
== Правила именования и расположения текстур ==
 
== Правила именования и расположения текстур ==
Строка 5: Строка 5:
 
Именование текстур подчиняется общим правилам именования.
 
Именование текстур подчиняется общим правилам именования.
  
Все папки с текстурами располагаются по относительному пути /gamesource/textures/
+
Все папки с текстурами располагаются по относительному пути ''/gamesource/textures/''
  
 
Все текстуры должны располагаться только на одном уровне вложенности, то есть примерно так:
 
Все текстуры должны располагаться только на одном уровне вложенности, то есть примерно так:
  
*/gamesource/textures/dirname/dirname_texture.dds
+
*''/gamesource/textures/dirname/dirname_texture.dds''
  
Каждый файл текстуры должен иметь расширение dds.
+
Каждый файл текстуры должен иметь расширение ''dds''.
  
Не допускается использование текстур находящихся непосредственно в папке /gamesource/textures/
+
Не допускается использование текстур находящихся непосредственно в папке ''/gamesource/textures/''
  
 
Каждая текстура должна иметь префикс папки в которой она расположена, после чего следует символ подчеркивания "_" и далее имя текстуры. Например:
 
Каждая текстура должна иметь префикс папки в которой она расположена, после чего следует символ подчеркивания "_" и далее имя текстуры. Например:
*папка concrete
+
*папка ''concrete''
**текстура concrete_slab.dds
+
**текстура ''concrete_slab.dds''
 
**текстура concrete_NAME.dds где NAME - имя текстуры
 
**текстура concrete_NAME.dds где NAME - имя текстуры
 
*папка ui
 
*папка ui
**текстура ui_button.dds
+
**текстура ''ui_button.dds''
**текстура ui_NAME.dds где NAME - имя текстуры
+
**текстура ''ui_NAME.dds'' где NAME - имя текстуры
  
 
Такое правило именования текстур обусловлено порядком и строгостью соответствия, для избежания указания путей (даже относительных).
 
Такое правило именования текстур обусловлено порядком и строгостью соответствия, для избежания указания путей (даже относительных).
Строка 29: Строка 29:
 
== Форматы текстур ==
 
== Форматы текстур ==
  
Загрузка текстур осуществляется функциями DirectX 9, это значит что dx сам определит формат текстуры основываясь на том что содержит файл. Однако, дабы не вводить путаницу, настоятельно рекомендуем использовать формат текстур dds.
+
Загрузка текстур осуществляется функциями DirectX 9, это значит что dx сам определит формат текстуры основываясь на том что содержит файл. Однако, дабы не вводить путаницу, настоятельно рекомендуем использовать формат текстур ''dds''.
  
Рекомендуемый формат организации данных dds текстур DXT5, он хорошо сжимает и сохраняет информацию об альфа-канале.
+
Рекомендуемый формат организации данных ''dds'' текстур ''DXT5'', он хорошо сжимает и сохраняет информацию об альфа-канале.
  
 
== Типы текстур ==
 
== Типы текстур ==
Строка 52: Строка 52:
 
*созданными пользователем
 
*созданными пользователем
  
Тип загружаемой или константной текстуры задается при использовании функции [https://doc.skyxengine.com/group__sxgcore__loadtex.html#ga2dc8d679ffbd9814443a5863950f6431 SGCore_LoadTexAddName].
+
Тип загружаемой или константной текстуры задается при использовании функции SGCore_LoadTexAddName.
  
 
Определение типа является ответственностью программиста. В самом распространенном случае текстура является загруженной к примеру, когда текстуры загружаются для модели.В этом случае (когда объекты текстур имеют тип "загруженные") при очистке уровня все такие текстуры будут удалены.
 
Определение типа является ответственностью программиста. В самом распространенном случае текстура является загруженной к примеру, когда текстуры загружаются для модели.В этом случае (когда объекты текстур имеют тип "загруженные") при очистке уровня все такие текстуры будут удалены.
Строка 58: Строка 58:
 
Однако есть такие ситуации когда загружаемая текстура должна иметь константный тип, например текстуры GUI. При очистке уровня константные текстуры не будут удалены.
 
Однако есть такие ситуации когда загружаемая текстура должна иметь константный тип, например текстуры GUI. При очистке уровня константные текстуры не будут удалены.
  
В случае использования функции [https://doc.skyxengine.com/group__sxgcore__loadtex.html#ga55bf42f8df825485b97eab7f89c3ea71 SGCore_LoadTexCreate], текстура будет иметь пользовательский тип, и не будет удалена при очистке уровня.
+
В случае использования функции SGCore_LoadTexCreate, текстура будет иметь пользовательский тип, и не будет удалена при очистке уровня.
  
 
== Организация управления ==
 
== Организация управления ==
  
При использовании функции [https://doc.skyxengine.com/group__sxgcore__loadtex.html#ga2dc8d679ffbd9814443a5863950f6431 SGCore_LoadTexAddName] происходит лишь добавление имени текстуры в очередь загрузки, и это значит что текстура сразу после вызова этой функции может быть еще не загружена.
+
При использовании функции SGCore_LoadTexAddName происходит лишь добавление имени текстуры в очередь загрузки, и это значит что текстура сразу после вызова этой функции может быть еще не загружена.
  
 
Функция загрузки текстур SGCore_LoadTexAllLoad вызывается каждый кадр рендера и проверяет наличие очереди на загрузку, если таковая имеется то производит полную загрузку очереди. То есть, все имена текстур, которые были добавлены в очередь загрузки до вызова функции загрузки, будут загружены с сохранением всех идентификаторов.
 
Функция загрузки текстур SGCore_LoadTexAllLoad вызывается каждый кадр рендера и проверяет наличие очереди на загрузку, если таковая имеется то производит полную загрузку очереди. То есть, все имена текстур, которые были добавлены в очередь загрузки до вызова функции загрузки, будут загружены с сохранением всех идентификаторов.
Строка 68: Строка 68:
 
Хранение текстур организовано поименно, то есть добавление имени уже загруженной текстуры не приведет к ее повторной загрузке и вернет идентификатор уже существующей текстуры.
 
Хранение текстур организовано поименно, то есть добавление имени уже загруженной текстуры не приведет к ее повторной загрузке и вернет идентификатор уже существующей текстуры.
  
[[Category:Текстуры]]
+
[[Category:Основы]]

Текущая версия на 07:58, 15 декабря 2018

Загрузка текстур управляется загрузчиком который находится в графическом ядре sxgcore.

Правила именования и расположения текстур

Именование текстур подчиняется общим правилам именования.

Все папки с текстурами располагаются по относительному пути /gamesource/textures/

Все текстуры должны располагаться только на одном уровне вложенности, то есть примерно так:

  • /gamesource/textures/dirname/dirname_texture.dds

Каждый файл текстуры должен иметь расширение dds.

Не допускается использование текстур находящихся непосредственно в папке /gamesource/textures/

Каждая текстура должна иметь префикс папки в которой она расположена, после чего следует символ подчеркивания "_" и далее имя текстуры. Например:

  • папка concrete
    • текстура concrete_slab.dds
    • текстура concrete_NAME.dds где NAME - имя текстуры
  • папка ui
    • текстура ui_button.dds
    • текстура ui_NAME.dds где NAME - имя текстуры

Такое правило именования текстур обусловлено порядком и строгостью соответствия, для избежания указания путей (даже относительных).

Это правило позволяет разделить большой объем текстур на группы (дерево/wood, металл/metal, бетон/concrete, растительность/vegetation и прочее)

Форматы текстур

Загрузка текстур осуществляется функциями DirectX 9, это значит что dx сам определит формат текстуры основываясь на том что содержит файл. Однако, дабы не вводить путаницу, настоятельно рекомендуем использовать формат текстур dds.

Рекомендуемый формат организации данных dds текстур DXT5, он хорошо сжимает и сохраняет информацию об альфа-канале.

Типы текстур

Поддерживается 2 типа загружаемых текстур:

  • 2d
  • кубические

Оба типа имеют различные хранилища и соответственно разные функции обращения для получения объектов текстур:

  • 2d - SGCore_LoadTexGetTex
  • кубические - SGCore_LoadTexGetTexCube

Загрузчик самостоятельно определяет тип загружаемой текстуры и помещает объект в соответствующее хранилище.

Типы объектов текстур

Каждый объект текстуры имеет тип. Объекты текстур могут быть следующих типов:

  • загружаемыми
  • константными
  • созданными пользователем

Тип загружаемой или константной текстуры задается при использовании функции SGCore_LoadTexAddName.

Определение типа является ответственностью программиста. В самом распространенном случае текстура является загруженной к примеру, когда текстуры загружаются для модели.В этом случае (когда объекты текстур имеют тип "загруженные") при очистке уровня все такие текстуры будут удалены.

Однако есть такие ситуации когда загружаемая текстура должна иметь константный тип, например текстуры GUI. При очистке уровня константные текстуры не будут удалены.

В случае использования функции SGCore_LoadTexCreate, текстура будет иметь пользовательский тип, и не будет удалена при очистке уровня.

Организация управления

При использовании функции SGCore_LoadTexAddName происходит лишь добавление имени текстуры в очередь загрузки, и это значит что текстура сразу после вызова этой функции может быть еще не загружена.

Функция загрузки текстур SGCore_LoadTexAllLoad вызывается каждый кадр рендера и проверяет наличие очереди на загрузку, если таковая имеется то производит полную загрузку очереди. То есть, все имена текстур, которые были добавлены в очередь загрузки до вызова функции загрузки, будут загружены с сохранением всех идентификаторов.

Хранение текстур организовано поименно, то есть добавление имени уже загруженной текстуры не приведет к ее повторной загрузке и вернет идентификатор уже существующей текстуры.