Skip to content

Latest commit

 

History

History
703 lines (703 loc) · 77.3 KB

Memblock.md

File metadata and controls

703 lines (703 loc) · 77.3 KB

Список методов в категории Memblock:

SetObjectMeshFromMemblock

Описание

Изменяет сетку объекта на основе предоставленного memblock. Мемблок не обязательно должен иметь такое же количество атрибутов или вершин, как исходная сетка, но он улучшит производительность, если это произойдет. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник. Если вы планируете регулярно вносить изменения в сетку, вы должны сохранить memblock после использования SetObjectMeshFromMemblock вместо того, чтобы регенерировать его из объекта каждый раз, когда вы хотите внести изменения. Затем снова вызовите SetObjectMeshFromMemblock, когда вы хотите перенести свои новые изменения на объект.

Определение

void agk::SetObjectMeshFromMemblock( UINT objID, UINT meshIndex, UINT memID )

Параметры

objID - Идентификатор объекта для изменения
meshIndex - Индекс сетки для изменения
memID - Индекс memblock, используемый для изменения сетки

Пример кода


SetMeshMemblockVertexUV

Описание

Обеспечивает быстрый способ изменения УФ-значений вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и изменения значений UV. Вершины начинаются с индекса 0.

Определение

void agk::SetMeshMemblockVertexUV( UINT memID, UINT vertexIndex, float u, float v )

Параметры

memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
u - Новое значение U для этой вершины
v - Новое значение V для этой вершины

Пример кода


SetMeshMemblockVertexPosition

Описание

Обеспечивает быстрый способ изменения положения вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершины и изменения значений позиции. Вершины начинаются с индекса 0.

Определение

void agk::SetMeshMemblockVertexPosition( UINT memID, UINT vertexIndex, float x, float y, float z )

Параметры

memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
x - Новая позиция X для этой вершины
y - Новая позиция Y для этой вершины
z - Новая позиция Z для этой вершины

Пример кода


SetMeshMemblockVertexNormal

Описание

Обеспечивает быстрый способ изменения нормали вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и изменения нормальных значений. Вершины начинаются с индекса 0.

Определение

void agk::SetMeshMemblockVertexNormal( UINT memID, UINT vertexIndex, float x, float y, float z )

Параметры

memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
x - X компонент новой нормали для этой вершины
y - Компонент Y новой нормали для этой вершины
z - Z компонент новой нормали для этой вершины

Пример кода


SetMemblockString

Описание

Записывает строку в memblock в виде необработанных байтов. Первый найденный нулевой терминатор завершит строку, и один нулевой терминатор будет записан в данные memblock. Чтобы снова прочитать строку из memblock, вам нужно будет знать ее длину, поэтому рекомендуется также записать значение длины строки перед строковыми данными, чтобы помочь прочитать строку обратно позже. Смещение плюс длина строки, плюс 1 для нулевого терминатора, должно быть меньше размера memblock.

Определение

void agk::SetMemblockString( UINT memID, UINT offset, const char* value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Строка для записи.

Пример кода


SetMemblockShort

Описание

Записывает короткое (2 байта) значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 2, поскольку запись коротких значений, не выровненных по 2-байтовым границам, влечет за собой снижение производительности оборудования. Короткие значения хранятся в формате little endian, поэтому запись короткого числа 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, а байт со смещением 1 как 0. Данное значение будет усечено до диапазона -32768 и 32767.

Определение

void agk::SetMemblockShort( UINT memID, UINT offset, int value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.

Пример кода


SetMemblockInt

Описание

Записывает значение int (4 байта) с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку запись целочисленных значений, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Int хранятся в формате little endian, поэтому запись int 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, байт со смещением 1 как 0, байт со смещением 2 как 0 и байт со смещением 3 как 0.

Определение

void agk::SetMemblockInt( UINT memID, UINT offset, int value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.

Пример кода


SetMemblockFloat

Описание

Запишите значение float (4 байта) с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку запись значений с плавающей запятой, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Float хранятся в формате IEEE 754, поэтому запись float и последующее чтение его обратно в байтах вернут различные компоненты формата float.

Определение

void agk::SetMemblockFloat( UINT memID, UINT offset, float value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.

Пример кода


SetMeshMemblockVertexColor

Описание

Обеспечивает быстрый способ изменения значений цвета вершины внутри мемблока сетки. Он использует атрибутивные данные из начала memblock для определения смещения вершин и изменения значений цвета. Вершины начинаются с индекса 0. Значения цвета должны быть в диапазоне от 0 до 255.

Определение

void agk::SetMeshMemblockVertexColor( UINT memID, UINT vertexIndex, int red, int green, int blue, int alpha )

Параметры

memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
red - Новое красное значение для этой вершины
green - Новое зеленое значение для этой вершины
blue - Новое синее значение для этой вершины
alpha - Новое альфа - значение для этой вершины

Пример кода


SetMemblockByteSigned

Описание

Записывает однобайтовое значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Данное значение будет усечено до диапазона -128 и 127.

Определение

void agk::SetMemblockByteSigned( UINT memID, UINT offset, int value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.

Пример кода


SetMemblockByte

Описание

Записывает однобайтовое значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Данное значение будет усечено до диапазона 0 и 255.

Определение

void agk::SetMemblockByte( UINT memID, UINT offset, int value )

Параметры

memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.

Пример кода


GetMeshMemblockVertexZ

Описание

Обеспечивает быстрый способ получить Z-позицию указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.

Определение

float agk::GetMeshMemblockVertexZ( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexY

Описание

Обеспечивает быстрый способ получения Y-позиции указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.

Определение

float agk::GetMeshMemblockVertexY( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexX

Описание

Обеспечивает быстрый способ получения X-позиции указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.

Определение

float agk::GetMeshMemblockVertexX( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexV

Описание

Обеспечивает быстрый способ получения значения V указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений UV.

Определение

float agk::GetMeshMemblockVertexV( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexU

Описание

Обеспечивает быстрый способ получения значения U указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений UV.

Определение

float agk::GetMeshMemblockVertexU( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexRed

Описание

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

Определение

int agk::GetMeshMemblockVertexRed( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexNormalZ

Описание

Обеспечивает быстрый способ получить Z-компоненту нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.

Определение

float agk::GetMeshMemblockVertexNormalZ( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexNormalY

Описание

Обеспечивает быстрый способ получения Y-компонента нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.

Определение

float agk::GetMeshMemblockVertexNormalY( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexNormalX

Описание

Обеспечивает быстрый способ получения X-компонента нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.

Определение

float agk::GetMeshMemblockVertexNormalX( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexGreen

Описание

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

Определение

int agk::GetMeshMemblockVertexGreen( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexAlpha

Описание

Обеспечивает быстрый способ получения альфа - значения указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений цвета.

Определение

int agk::GetMeshMemblockVertexAlpha( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMeshMemblockVertexBlue

Описание

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

Определение

int agk::GetMeshMemblockVertexBlue( UINT memID, UINT vertexIndex )

Параметры

memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки

Пример кода


GetMemblockSize

Описание

Возвращает размер данного memblock в байтах.

Определение

int agk::GetMemblockSize( UINT memID )

Параметры

memID - Идентификатор мемблока для проверки.

Пример кода


GetMemblockShort

Описание

Возвращает короткое (2 байта) значение при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 2, поскольку чтение коротких значений, не выровненных по 2-байтовым границам, влечет за собой снижение производительности оборудования. Короткие значения хранятся в формате little endian, поэтому запись короткого числа 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, а байт со смещением 1 как 0. Возвращаемое значение будет коротким со знаком между -32768 и 32767.

Определение

int agk::GetMemblockShort( UINT memID, UINT offset )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.

Пример кода


GetMemblockSHA1

Описание

Хэширует memblock с помощью SHA1 и возвращает полученный хэш

Определение

char* agk::GetMemblockSHA1( uint32_t memID )

Параметры

memID - Идентификатор мемблока для хэширования

Пример кода


GetMemblockInt

Описание

Возвращает значение int (4 байта) при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку чтение целочисленных значений, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Int хранятся в формате little endian, поэтому запись int 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, байт со смещением 1 как 0, байт со смещением 2 как 0 и байт со смещением 3 как 0. Возвращаемое значение будет целым числом со знаком от -2,147,483,648 до 2,147,483,647.

Определение

int agk::GetMemblockInt( UINT memID, UINT offset )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.

Пример кода


GetMemblockExists

Описание

Возвращает 1, если существует memblock с заданным идентификатором, и 0, если нет.

Определение

int agk::GetMemblockExists( UINT memID )

Параметры

memID - Идентификатор мемблока для проверки.

Пример кода


GetMemblockByteSigned

Описание

Возвращает значение байта с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Возвращаемое значение будет байтом со знаком от -128 до 127.

Определение

int agk::GetMemblockByteSigned( UINT memID, UINT offset )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.

Пример кода


GetMemblockByte

Описание

Возвращает значение байта с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Возвращаемое значение будет байтом без знака между 0 и 255.

Определение

int agk::GetMemblockByte( UINT memID, UINT offset )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.

Пример кода


GetMemblockString

Описание

Возвращает заданное количество байтов с заданным смещением и интерпретирует их как строку. Смещение плюс длина должны быть меньше размера memblock. Первое значение имеет смещение 0. Строка будет завершаться null, даже если в memblock не будет найден нулевой терминатор. Если нулевой терминатор возникает до достижения длины, то все байты все равно будут считаны, но только символы до первого нулевого терминатора будут доступны в AGK. Если вы используете уровень 2, вы должны удалить указатель, возвращаемый этой функцией.

Определение

char* agk::GetMemblockString( UINT memID, UINT offset, UINT length )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
length - Количество байтов для чтения

Пример кода


GetMemblockSHA256

Описание

Хэширует memblock с помощью SHA256 и возвращает полученный хэш

Определение

char* agk::GetMemblockSHA256( uint32_t memID )

Параметры

memID - Идентификатор мемблока для хэширования

Пример кода


GetMemblockFloat

Описание

Возвращает значение float (4 байта) при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку чтение значений float, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Float хранятся в формате IEEE 754, поэтому запись float и последующее чтение его обратно в байтах вернут различные компоненты формата float.

Определение

float agk::GetMemblockFloat( UINT memID, UINT offset )

Параметры

memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.

Пример кода


DeleteMemblock

Описание

Удаляет memblock с заданным идентификатором. Если memblock не существует или уже был удален, то эта команда ничего не делает.

Определение

void agk::DeleteMemblock( UINT memID )

Параметры

memID - Идентификатор удаляемого мемблока.

Пример кода


CreateSoundFromOGGMemblock

Описание

Создает звук из мемблока. Memblock должен существовать, это создает новый звук и возвращает идентификатор. Это не повлияет ни на какие уже воспроизводимые звуковые экземпляры, только на будущие. Memblock должен содержать допустимый OGG-файл, например загруженный CreateMemblockFromFile(memID, sound.ogg)

Определение

uint32_t agk::CreateSoundFromOGGMemblock( uint32_t memID )
void agk::CreateSoundFromOGGMemblock( uint32_t soundID, uint32_t memID )

Параметры

memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
soundID - Идентификатор звука для создания или изменения.

Пример кода


CreateSoundFromMemblock

Описание

Создает звук из мемблока. Memblock должен существовать, это создает новый звук и возвращает идентификатор. Это не повлияет ни на какие уже воспроизводимые звуковые экземпляры, только на будущие. Первые 2 байта memlbock хранят количество каналов (1 или 2 поддерживаемых), следующие 2 байта хранят биты на выборку (8 или 16 поддерживаемых), следующие 4 байта хранят выборки в секунду, например 44100. Следующие 4 байта-это количество кадров в звуковых данных, размер звуковых данных в байтах можно вычислить из этого с помощью формулы numFrames*(BitsPerSample/8)*channels. В 2-канальном звуке кадр содержит 2 сэмпла, по одному для каждого канала. В моно-звуке кадр содержит 1 образец. Остальная часть memblock-это необработанные звуковые данные, например, в 8-битном стереозвуке с 3 кадрами необработанные данные будут выглядеть так. смещение байта 0 = Кадр 1, смещение байта данных левого канала 1 = Кадр 1, смещение байта данных правого канала 2 = Кадр 2, смещение байта данных левого канала 3 = Кадр 2, смещение байта данных правого канала 4 = Кадр 3, смещение байта данных левого канала 5 = Кадр 3, данные правого канала Возвращают идентификатор нового звука.

Определение

UINT agk::CreateSoundFromMemblock( UINT memID )
void agk::CreateSoundFromMemblock( UINT soundID, UINT memID )

Параметры

memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
soundID - Идентификатор звука для создания или изменения.

Пример кода


CreateObjectFromMeshMemblock

Описание

Создает объект с одной сеткой, построенной из данного memblock. Любые последующие изменения в memblock не повлияют на сетку, вы должны вызвать SetObjectMeshFromMemblock, чтобы изменить существующую сетку. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник.

Определение

UINT agk::CreateObjectFromMeshMemblock( UINT memID )
void agk::CreateObjectFromMeshMemblock( UINT objID, UINT memID )

Параметры

memID - Индекс memblock, используемый для создания сетки объекта
objID - Идентификатор создаваемого объекта

Пример кода


CreateMemblockFromObjectMesh

Описание

Создает memblock из сетки объектов. Объект может содержать одну или несколько сеток, индексы сетки находятся в диапазоне от 1 до GetObjectNumMeshes включительно. Сетка копируется в memblock, поэтому любые изменения в memblock не влияют сразу на сетку, вы должны использовать одну из других команд, таких как SetObjectMeshFromMemblock, чтобы скопировать memblock обратно в сетку. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда будет кратен 4, чтобы упростить проблемы выравнивания, сама строка может иметь немного меньше символов и быть дополнена нулевыми терминаторами, но прочитайте все указанные байты, и вы получите правильную строку длины. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник. Если вы планируете регулярно вносить изменения в сетку, вы должны сохранить memblock после использования SetObjectMeshFromMemblock вместо того, чтобы регенерировать его из объекта каждый раз, когда вы хотите внести изменения. Затем снова вызовите SetObjectMeshFromMemblock, когда вы хотите перенести свои новые изменения на объект.

Определение

UINT agk::CreateMemblockFromObjectMesh( UINT objID, UINT meshIndex )
void agk::CreateMemblockFromObjectMesh( UINT memID, UINT objID, UINT meshIndex )

Параметры

objID - Идентификатор объекта, содержащего сетку для чтения
meshIndex - Индекс сетки для копирования в memblock
memID - Идентификатор нового memblock

Пример кода


CreateMemblockFromImage

Описание

Создает memblock из загруженного изображения, субизображения atlas не поддерживаются. Изображение должно существовать и не подвержено влиянию этой команды. Первые 4 байта memlbock хранят ширину изображения, следующие 4 байта хранят высоту изображения, следующие 4 байта хранят битовую глубину, в настоящее время это всегда будет 32. После этого необработанные данные изображения начинаются в формате RGBA, причем каждый компонент хранится в одном байте, поэтому каждый пиксель занимает 4 байта. Размер данных изображения может быть вычислен по шириневысоте4 байта (на данный момент битовая глубина может быть принята равной 32 битам = 4 байтам). Обратите внимание, что из-за малого формата endian чтение данных изображения с байтами вернет смещения 0=R, 1=G, 2=B, 3=A, но чтение их всех как одного целого числа приведет к значению с A как наиболее значимым байтом, за которым следует B, затем G, затем R как наименее значимый байт. Пиксельные данные начинаются в верхнем левом углу изображения и продолжаются слева направо, а затем сверху вниз, в результате чего изображение сохраняется в виде последовательности строк, заканчивающихся в правом нижнем углу. Возвращает идентификатор, который можно использовать для ссылки на этот memblock в других командах.

Определение

UINT agk::CreateMemblockFromImage( UINT imageID )
void agk::CreateMemblockFromImage( UINT memID, UINT imageID )

Параметры

imageID - Идентификатор изображения для чтения.
memID - Идентификатор создаваемого мемблока.

Пример кода


CreateMemblockFromFile

Описание

Создает memblock из файла без какой-либо обработки данных файла, memblock будет байт за байтом копией файла. Возвращает идентификатор, который может быть использован для ссылки на этот memblock позже. Вы можете использовать относительные пути в имени файла для чтения из вложенных папок или использовать SetFolder для первого просмотра. Вы можете использовать абсолютные пути, добавив косую черту в начало имени файла, в этом случае папка, установленная с помощью SetFolder, игнорируется. Например /media/file.txt будет читать его из папки media, даже если SetFolder был использован для перехода к /media/somefolder

Определение

UINT agk::CreateMemblockFromFile( const char* filename )
void agk::CreateMemblockFromFile( UINT memID, const char* filename )

Параметры

filename - Имя файла для чтения, если он не существует, это не удастся.
memID - Идентификатор создаваемого мемблока.

Пример кода


CreateMemblock

Описание

Создает раздел памяти заданного размера для доступа на чтение или запись. Содержимое памяти не определено, пока вы не запишете в нее. Memblock не должен уже существовать с выбранным вами memID.

Определение

void agk::CreateMemblock( UINT memID, UINT size )
UINT agk::CreateMemblock( UINT size )

Параметры

memID - Идентификатор мемблока, который вы хотите использовать.
size - Размер мемблока в байтах. максимум 100 000 000.

Пример кода


CreateImageFromPNGMemblock

Описание

Создает изображение из memblock. Мемблок должен существовать, если образ существует, он будет перезаписан, если нет, то будет создан. Memblock должен содержать допустимый PNG-файл, например загруженный CreateMemblockFromFile(memID, image.png)

Определение

void agk::CreateImageFromPNGMemblock( uint32_t imageID, uint32_t memID )
uint32_t agk::CreateImageFromPNGMemblock( uint32_t memID )

Параметры

imageID - Идентификатор создаваемого изображения.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.

Пример кода


CreateMusicFromOGGMemblock

Описание

Создает музыкальную сущность из мемблока. Мемблок должен существовать. Это создаст новый идентификатор музыки и вернет его memblock должен содержать допустимый файл OGG, например загруженный с CreateMemblockFromFile(memID, music.ogg)

Определение

uint32_t agk::CreateMusicFromOGGMemblock( uint32_t memID )
void agk::CreateMusicFromOGGMemblock( uint32_t musicID, uint32_t memID )

Параметры

memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
musicID - Идентификатор создаваемой музыки.

Пример кода


CreateMemblockFromSound

Описание

Создает memblock из загруженного звукового файла. Звуковой файл должен быть загружен с помощью LoadSound и не подвержен влиянию этой команды. Первые 2 байта memlbock хранят количество каналов (1 или 2 поддерживаемых), следующие 2 байта хранят биты на выборку (8 или 16 поддерживаемых), следующие 4 байта хранят выборки в секунду, например 44100. Следующие 4 байта-это количество кадров в звуковых данных, размер звуковых данных в байтах можно вычислить из этого с помощью формулы numFrames*(BitsPerSample/8)*channels. В 2-канальном звуке кадр содержит 2 сэмпла, по одному для каждого канала. В моно-звуке кадр содержит 1 образец. Остальная часть memblock-это необработанные звуковые данные, например, в 8-битном стереозвуке с 3 кадрами необработанные данные будут выглядеть так. смещение байта 0 = Кадр 1, смещение байта данных левого канала 1 = Кадр 1, Смещение байта данных правого канала 2 = Кадр 2, Смещение байта данных левого канала 3 = Кадр 2, смещение байта данных правого канала 4 = Кадр 3, смещение байта данных левого канала 5 = Кадр 3, данные правого канала Продолжительность звука может быть рассчитана по следующей формуле: numFrames/samplesPerSecond. Эта команда не работает с идентификаторами звуковых экземпляров, а только с идентификаторами звуковых файлов. Возвращает идентификатор, который может быть использован для ссылки на этот memblock в других командах.

Определение

UINT agk::CreateMemblockFromSound( UINT soundID )
void agk::CreateMemblockFromSound( UINT memID, UINT soundID )

Параметры

soundID - Идентификатор звука для чтения.
memID - Идентификатор создаваемого мемблока.

Пример кода


CreateFileFromMemblock

Описание

Создает файл из memblock без какой-либо обработки данных memblock, файл будет байт за байтом копией данных memblock. Вы можете использовать относительные пути в имени файла для записи в подпапки или использовать SetFolder для просмотра там в первую очередь. Вы можете использовать абсолютные пути, добавив косую черту в начало имени файла, в этом случае папка, установленная с помощью SetFolder, игнорируется. Например /media/file.txt поместит его в папку media, даже если SetFolder был использован для перехода к /media/somefolder

Определение

void agk::CreateFileFromMemblock( const char* filename, UINT memID )

Параметры

filename - Имя создаваемого файла, если он уже существует, будет перезаписано.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.

Пример кода


CreateImageFromMemblock

Описание

Создает изображение из memblock. Мемблок должен существовать, если образ существует, он будет перезаписан, если нет, то будет создан. Первые 4 байта memlbock хранят ширину изображения, следующие 4 байта хранят высоту изображения, следующие 4 байта хранят битовую глубину, в настоящее время это должно быть 32. После этого необработанные данные изображения начинаются в формате RGBA, причем каждый компонент хранится в одном байте, поэтому каждый пиксель занимает 4 байта. Размер данных изображения может быть вычислен по шириневысоте4 байта (на данный момент битовая глубина может быть принята равной 32 битам = 4 байтам). Обратите внимание, что из-за малого формата endian запись данных изображения байтами приведет к смещениям 0=R, 1=G, 2=B, 3=A, но запись их всех в виде одного целого числа будет интерпретироваться как значение с A как наиболее значимым байтом, за которым следует B, затем G, затем R как наименее значимый байт. Пиксельные данные начинаются в верхнем левом углу изображения и продолжаются слева направо, а затем сверху вниз, в результате чего изображение сохраняется в виде последовательности строк, заканчивающихся в правом нижнем углу. Эта команда использует большую пропускную способность графического процессора, поэтому не рекомендуется вызывать эту команду каждый кадр на больших изображениях.

Определение

void agk::CreateImageFromMemblock( UINT imageID, UINT memID )
UINT agk::CreateImageFromMemblock( UINT memID )

Параметры

imageID - Идентификатор создаваемого или изменяемого изображения.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.

Пример кода


CopyMemblock

Описание

Копирует часть одного мемблока в другой. Оба memblocks должны существовать и могут быть разных размеров.

Определение

void agk::CopyMemblock( UINT memSrcID, UINT memDstID, UINT srcOffset, UINT dstOffset, UINT size )

Параметры

memSrcID - Идентификатор memblock для копирования.
memDstID - Идентификатор memblock для копирования.
srcOffset - Смещение в исходном memblock для начала копирования.
dstOffset - Смещение целевого мемблока для копирования.
size - Количество байтов для копирования.

Пример кода


AddObjectMeshFromMemblock

Описание

Добавляет новую сетку к объекту, построенному из данного memblock. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник.

Определение

void agk::AddObjectMeshFromMemblock( UINT objID, UINT memID )

Параметры

objID - Идентификатор объекта для изменения
memID - Индекс memblock, который будет использоваться для создания новой сетки

Пример кода