Выше, описаны основные функции рисования. Здесь Вы найдёте множество дополнительных функций, которые предлагают Вам больше возможностей. Прежде всего, существуют функции для рисования форм с цветами градиента. Во-вторых - имеются функции, чтобы рисовать более общие многоугольники (полигоны) и, наконец, имеется возможность рисовать отображаемую текстуру многоугольников.
Существуют следующие расширенные версии основных функций рисования. Каждая из них получает дополнительные цветовые параметры, которые используются для определения цвета в других гранях. Стандартный цвет для рисования не используется в этих функциях.
draw_point_color(x,y,col1) Рисует точку в позиции (x,y) в заданном цвете.
draw_line_color(x1,y1,x2,y2,col1,col2) Вырисовывает линию из (x1,y1) в (x2,y2), интерполируя цвет между col1 и col2.
draw_line_width_color(x1,y1,x2,y2,w,col1,col2) Вырисовывает линию из (x1,y1) в (x2,y2) с длиной w, интерполируя цвет между col1 и col2 draw_rectangle_color(x1,y1,x2,y2,col1,col2,col3,col4,outline) Рисует прямоугольник. Четыре цвета указываются для левой верхней, верхней правой, нижней правой, и нижней левой вершины. outline - указывает только схему, которая должна быть нарисована (истина) или должна быть заполнена (ложь).
draw_roundrect_color(x1,y1,x2,y2,col1,col2,outline) Рисует закруглённый прямоугольник. col1 - цвет в середине и col2 - цвет границы. outline - указывает только схему, которая должна быть нарисована (истина) или должна быть заполнена (ложь).
draw_triangle_color(x1,y1,x2,y2,x3,y3,col1,col2,col3,outline) Рисует треугольник. Три цвета - цвета трёх граней, которые интерполируются над треугольником. outline - указывает только схему, которая должна быть нарисована (истина) или должна быть заполнена (ложь).
draw_circle_color(x,y,r,col1,col2,outline) Рисует окружность в позиции (x,y) с радиусом r. col1 - цвет в середине и col2 - цвет границы. outline - указывает только схему, которая должна быть нарисована (истина) или должна быть заполнена (ложь).
draw_ellipse_color(x1,y1,x2,y2,col1,col2,outline) Рисует эллипс. icol1 - цвет в середине и col2 - цвет границы. outline - указывает только схему, которая должна быть нарисована (истина) или должна быть заполнена (ложь).
Вы можете также нарисовать большие примитивы. Это работает немного по-другому. Вы начинаете определять примитив и хотите его нарисовать. Затем Вы определяете грани для него и, наконец, Вы завершаете примитив, который уже нарисован. Доступно шесть типов примитивов:
pr_pointlist Грани являются набором точек.
pr_linelist Грани являются набором сегментов линии. Каждая пара граней формирует сегмент линии. Набор граней должен быть равным.
pr_linestrip Грани формируют ломаную линию, сначала присоединяясь ко вторым, вторые к третьим и т.п. Последние не присоединяется к первым граням. Вы должны определить дополнительную копию первой вершины для этого.
pr_trianglelist Грани являются набором треугольников. Каждое "утраивание" граней формирует треугольник. Так что количество граней должно быть кратно 3.
pr_trianglestrip Грани снова формируют треугольники, но на этот раз, по другому. Первые три формируют первый треугольник. Последние две, из этих граней, вместе со следующей вершиной, формируют второй треугольник и т.п. Итак, каждая новая вершина определяет новый треугольник, присоединённый к предшествующему.
pr_trianglefan Подобный списку треугольников, но на этот раз, первая вершина является частью всех треугольников. Кроме того, каждая новая вершина определяет новый треугольник, присоединённый к предшествующей и первой вершине.
Существуют следующие функции для рисования примитивов
draw_primitive_begin(kind) Запускает примитив указанного типа.
draw_vertex(x,y) Добавляет вершину (x,y) в примитив, используя цветовую и alpha величину установленных прежде.
draw_vertex_color(x,y,col,alpha) Добавляет вершину (x,y) в примитив, со своей собственной цветовой и альфа величиной. Это позволяет Вам создавать примитивы с "гладкоизменяющимися" цветовыми и аьлфа значениями.
draw_primitive_end() Заканчивает описание примитива. Эта функция действительно его рисует.
Наконец, возможно рисование примитивов, используя спрайты или фоны в качестве текстур. При использование текстуры, изображение устанавливается в примитиве, восстанавливая свою форму, чтобы установить примитив. Текстуры используются для добавления детализации к примитивам, например - кирпичная стена. Чтобы использовать текстуры, Вы сначала должны получить id (идентификатор) текстуры, которую Вы хотите использовать. Для этого существуют следующие функции:
sprite_get_texture(spr,subimg) Возвращает id текстуры, соответствующему кадру изображения subimg указанного спрайта.
background_get_texture(back) Возвращает id текстуры, соответствующему указанному фону.
Выбранная текстура может всё ещё не поместиться в видео память. Система поместит её, как только это потребуется, но иногда Вы захотите проделать это сами. Для этого существуют две функции:
texture_preload(texid) Устанавливает текстуру в видео память немедленно.
texture_set_priority(texid,prio) Когда остаётся слишком мало видео памяти, некоторые текстуры временно удаляются, чтобы освобождать память для других. Текстуры с самым низким приоритетом удаляться в первую очередь. По умолчанию, все имеют приоритет 0, но Вы здесь можете изменить приоритет. (Используйте положительные значения!)
Чтобы добавить текстуры к примитивам, Вы должны определить, какие части текстур должны быть помещены в примитив. Позиции в текстуре указываются с помощью значений между 0 и 1, но есть одна проблема. Размеры текстур должны быть пропорциональны (например, 32x32 или 64x64). Если Вы захотите использовать спрайты или фоны как текстуры, то Вы убедитесь, имеют ли они соответствующий размер. Если нет - тест будет чист. Чтобы обнаружить, какая часть текстуры действительно используется, Вы можете использовать следующие две функции. Они возвращают значения между 0 и 1, которая указывает ширину или высоту фактической части используемой текстуры. Определяйте эту величину как координату текстуры, указывая правую или нижнюю сторону текстуры.
texture_get_width(texid) Возвращает ширину текстуры с заданным id. Ширина пролегает в диапазоне 0-1.
texture_get_height(texid) Возвращает высоту текстуры с заданным id. Высота пролегает в диапазоне 0-1.
Чтобы рисовать текстурные примитивы, используйте следующие функции:
draw_primitive_begin_texture(kind,texid) Запускает примитив указанного типа с заданной текстурой.
draw_vertex_texture(x,y,xtex,ytex) Добавляет вершину (x,y) в примитив с позицией (xtex,ytex) в текстуре, смешивающейся с цветовой и альфа значением, установленных прежде. xtex и ytex - должны пролегать между 0 и 1, но также могут быть использованы большие значения, ведя к повторению текстуры (смотрите ниже).
draw_vertex_texture_color(x,y,xtex,ytex,col,alpha) Добавляет вершину (x,y) в примитив с позицией (xtex,ytex) в текстуре, смешивающейся со своей собственной цветовой и альфа величиной.
draw_primitive_end() Заканчивает описание примитива. Эта функция в действительности его рисует.
Имеются три функции, которые влияют на нарисованные текстуры:
texture_set_interpolation(linear) Указывает, использовать ли линейную интерполяцию (истина) или указывает ближайший пиксель (ложь). Линейная интерполяция преподносит более сглаженные текстуры, но они могут также быть немного размыты и требовать для обработки дополнительное время (иногда притормаживает). Эта установка также влияет на рисование спрайтов и фонов. По умолчанию - ложь. (Это может также быть изменено в основных установках игры.)
texture_set_blending(blend) Указывает, использовать ли смешивание с цветами и альфа значениями. Переключение эффекта может быть более быстрым на старом "железе". Эта установка также влияет на рисование спрайтов и фонов. По умолчанию - истина.
texture_set_repeat(repeat) Указывает, использовать ли повторение текстуры. Это работает следующим образом. Как указано, координаты текстуры пролегают в диапазоне 0-1. Если Вы определяете величину больше чем 1, по умолчанию - остальное не нарисуется. Устанавливая repeat (повтор) в истину - текстура повторяется. Отметьте, что спрайты и фоны не всегда рисуются повторяясь. Так как только Вы нарисуете спрайт фона, эта величина восстанавливается в значение - ложь. По умолчанию - ложь.
Имеется более двух функций, которые полезны не только для рисования текстур. Обычно примитивы смешиваются с фоном, используя альфа значение. Вы можете действительно указать, как это должно случиться. Кроме обычного способа, возможно также указание нового цвета, который должен быть добавлен к существующему цвету или вычтен из существующего цвета. Это может быть использоваться для создания освещения, например точек или теней. Также возможна сортировка взятых только что новых существующих цветов. Это поможет избежать определённых эффектов насыщения, которые могут возникнуть. Отметьте, что выбывшие и недавние цвета не берут полностью в счёт альфа значение (DirectX этого НЕ допускает). Итак, лучше убедитесь, что внешняя область чёрная. Существуют две функции. Первая - предоставляет Вам четыре вышеописанных пункта. Вторая - предоставит больше возможностей. Вы должны поэкспериментировать с несколькими из этих установок. Если использовать эффективно, то они могут использоваться для создания, например, интересных эффектов взрыва или сияния.
draw_set_blend_mode(mode) Указывает, какой режим смешивания использовать. Следующие величины возможны: bm_normal, bm_add, bm_subtract, и bm_max. Не забывайте восстанавливать режим на "норму" после использования, поскольку другие спрайты и даже фоны будут нарисованы с помощью нового режима смешивания.
draw_set_blend_mode_ext(src,dest) Указывает, какой режим смешивания использовать как для исходного, так и назначенного цвета. Новый цвет является некоторым фактором источника времени, а другой - фактор времени места назначения. Эти показатели устанавливаются этой функцией. Для того, чтобы это понять - источник и место назначения имеют оба: красный, зелёный, синий и alpha компонент. Так что источник - (Rs, Gs, Bs, As) и расположение - (Rd, Gd, Bd, Ad). Все они должны пролегать между 0 и 1. Показатели смешивания Вы можете выбрать для источника и расположить:Например, обычный режим смешивания устанавливает источник, смешивающийся в bm_src_alpha и расположение, смешивающееся в bm_inv_src_alpha. Не забывайте восстанавливать режим на "норму" после использования, поскольку другие спрайты и даже фоны будут нарисованы с помощью нового способа смешивания.
- bm_zero: Показатель смешивания (0, 0, 0, 0).
- bm_one: Показатель смешивания (1, 1, 1, 1).
- bm_src_color: Показатель смешивания (Rs, Gs, Bs, As).
- bm_inv_src_color: Показатель смешивания (1–Rs, 1–Gs, 1–Bs, 1–As).
- bm_src_alpha: Показатель смешивания (As, As, As, As).
- bm_inv_src_alpha: Показатель смешивания (1–As, 1–As, 1–As, 1–As).
- bm_dest_alpha: Показатель смешивания (Ad, Ad, Ad, Ad).
- bm_inv_dest_alpha: Показатель смешивания (1–Ad, 1–Ad, 1–Ad, 1–Ad).
- bm_dest_color: Показатель смешивания (Rd, Gd, Bd, Ad).
- bm_inv_dest_color: Показатель смешивания (1–Rd, 1–Gd, 1–Bd, 1–Ad).
- bm_src_alpha_sat: Показатель смешивания (f, f, f, 1); f = min(As, 1–Ad).
Рисования текстурных примитивов - небольшая работа, но может привести к большим результатам. Вы можете даже использовать эту возможность для "подделывания" 3D игр.