Rgb lighting rust что такое

Rgb lighting rust что такое. 594g2r1de. Rgb lighting rust что такое фото. Rgb lighting rust что такое-594g2r1de. картинка Rgb lighting rust что такое. картинка 594g2r1de

Улучшения Underwater Labs
С момента выпуска Underwater Labs мы внимательно следим за вашими отзывами. Большинство отзывов касалось высокой плотности добычи и отсутствия взаимодействия с игроками. Мы сократили количество лабораторий на карте с 6 до 3, убрали появление красных и синих карточек-ключей, кроме того, ящики с добычей больше не будут появляться, пока игроки находятся поблизости.

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

Многие из вас наверняка заметили, что вода лунного бассейна была пуленепробиваемой. Это был непреднамеренный эффект из-за сложности работы с объемами резьбы по воде, и теперь он исправлен.

Говоря о лунных лужах, в микс была добавлена ​​версия размером с человека, чтобы обеспечить больше точек входа в лаборатории.

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no

Наконец, мы устранили ряд небольших сбоев в процедурной генерации, которые могли вызвать перекрытие коридора, айсберга и растительности.

Субмарины
StorageBoth типа подводной лодки теперь имеют хранения с 12 слотами.

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no
Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no

Торпеды: Надводная торпеда была удалена из-за того, что игроки разбили лагерь под водой с минимальным риском или без него. Торпеды по-прежнему могут быть запущены по надводным целям путем всплытия подводной лодки и стрельбы стандартной торпедой.

Кислородные подводные лодки теперь также должны всплывать на поверхность каждые десять минут, будь то на поверхности океана или в лунном бассейне. В противном случае через десять минут вы начнете медленно получать урон.

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

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка noRgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка noRgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no

Другое: Задний пассажир в сдвоенном сабвуфере теперь может полностью развернуться. Сигналы сонара появляются только для других работающих подлодок, а не для каждой подлодки, припаркованной на чьей-то базе. А подлодки перестают двигаться намного быстрее, когда кто-то спешивается, а это означает, что они не убежат от вас, если вы случайно слезете под водой.

Подводные лодки теперь получают дополнительный урон от пуль.

Магазин в рыбацкой деревне В рыбацких деревнях был добавлен индивидуальный магазин, в котором можно найти все ваши рыболовные снасти.

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no
Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no

Основные улучшения и исправления

Остров Гравис Остров Гравис работает последний месяц на официальных серверах Facepunch, вот списки изменений карты:

Интеграция RGB
Для людей с оборудованием Razer и / или SteelSeries мы добавили некоторые эффекты клавиатуры RGB для различных состояний в игре.

Кроме того, для тех, кто любит RGB и пользовательские привязки, есть консольная команда, которая заставит ваши RGB мигать пользовательским цветом столько, сколько вы пожелаете. Следующее будет мигать фиолетовым в течение 0,2 секунды: rgbeffects.pulse 255,0,255 0,2

Обновление NVIDIA Reflex
В мае мы добавили поддержку Nvidia Reflex, которая снизила задержку системы до 38%, но теперь это число еще больше с выпуском Обновление Reflex SDK 1.5.

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no
С сегодняшнего дня по 9 сентября 18:00 для стримеров Rust Twitch доступны дропы по UTC Twitch. Вы можете заработать особые и уникальные скины, просто наблюдая за вашими любимыми стримерами Rust Twitch.

Мы объединились с Blazed, Jewer, Eltk, CNDBLOOD, Terpsicat, Elxocas, Agustabell212, Silithur, Ricoy23 и Kira, чтобы предложить вам особые уникальные дропы, которые можно заработать, только просматривая их каналы.

Rgb lighting rust что такое. no. Rgb lighting rust что такое фото. Rgb lighting rust что такое-no. картинка Rgb lighting rust что такое. картинка no

В течение последних 24 часов кампании Rust Twitch все выпадения будут перемещены в категорию общих.

Источник

Как работает RGB-подсветка в компьютерных комплектующих и периферии

Rgb lighting rust что такое. q93 f316690226c1c9cd77229d77e3ff63ab251ee81fead80294886c06df4a01c248. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 f316690226c1c9cd77229d77e3ff63ab251ee81fead80294886c06df4a01c248. картинка Rgb lighting rust что такое. картинка q93 f316690226c1c9cd77229d77e3ff63ab251ee81fead80294886c06df4a01c248

Rgb lighting rust что такое. q93 90881529b5e3785a9bb2bac9f428472759b4746c295b977d4d6a7156b681cb3a. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 90881529b5e3785a9bb2bac9f428472759b4746c295b977d4d6a7156b681cb3a. картинка Rgb lighting rust что такое. картинка q93 90881529b5e3785a9bb2bac9f428472759b4746c295b977d4d6a7156b681cb3a

Содержание

Содержание

Разноцветная подсветка проникла во все виды компьютерных комплектующих: от клавиатур и мышек до блоков питания и SSD. Но что это и как она работает? Давайте разбираться.

Начнем немного издалека. Человеческий глаз имеет три вида рецепторов: по одному для красного, синего и зеленого цвета (части спектра, если точнее). Основываясь на этих знаниях (почти), была разработана RGB-модель представления/описания цвета, по заглавным буквам трех основных цветов: Red — красный, Green — зеленый, Blue — синий.

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

Чем создается RGB-подсветка?

Но вернемся к нашей «радуге». Все видели индикаторы на различной технике — выключения/выключения на телевизоре, портов, режимов работы на модемах и роутерах и т. д. Свечение обеспечивают одноцветные светодиоды. Но в какой-то момент этого оказалось мало. Нужна была возможность одним элементом воспроизводить больше цветов, чем один фиксированный оттенок. Решение было найдено — RGB-светодиоды.

Rgb lighting rust что такое. q93 2773ece1526d715085831688c422d553721c8753038e63e0b869fa3b14086d9b. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 2773ece1526d715085831688c422d553721c8753038e63e0b869fa3b14086d9b. картинка Rgb lighting rust что такое. картинка q93 2773ece1526d715085831688c422d553721c8753038e63e0b869fa3b14086d9b

Что же такое RGB-светодиоды и какие они бывают?

Что представляет собой одноцветный светодиод (СД, LED)? Это полупроводниковый прибор, преобразующий электрический ток непосредственно в световое излучение.

Rgb lighting rust что такое. q93 f10f574c9085494c9830cfaa14508f1cd8326e887ce97151e3fa9fd71399454c. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 f10f574c9085494c9830cfaa14508f1cd8326e887ce97151e3fa9fd71399454c. картинка Rgb lighting rust что такое. картинка q93 f10f574c9085494c9830cfaa14508f1cd8326e887ce97151e3fa9fd71399454c

Углубляться в физику процессов мы не будем, достаточно знания того, что мы подаем ток — получаем свет.

Для создания разноцветных светодиодов была взята за основу RGB-цветовая модель. Конструкция такого светодиода проста — внутри него, на подложке, находятся три независимых кристалла, каждый из которых отвечает за свой цвет. Они накрыты общей линзой.

Rgb lighting rust что такое. q93 c26ae156dcdb1e4a77108f9e6b77f65071cb4100953ff0fc0bcf1af1fd18f986. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 c26ae156dcdb1e4a77108f9e6b77f65071cb4100953ff0fc0bcf1af1fd18f986. картинка Rgb lighting rust что такое. картинка q93 c26ae156dcdb1e4a77108f9e6b77f65071cb4100953ff0fc0bcf1af1fd18f986

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

Rgb lighting rust что такое. q93 deb998f29897519e9cdbbf6e0c94ae9e9bf7f852c51c4241be29035c9ea5e803. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 deb998f29897519e9cdbbf6e0c94ae9e9bf7f852c51c4241be29035c9ea5e803. картинка Rgb lighting rust что такое. картинка q93 deb998f29897519e9cdbbf6e0c94ae9e9bf7f852c51c4241be29035c9ea5e803

RGB-светодиоды выпускаются в разных типах корпусов:

Rgb lighting rust что такое. q93 210acf92ae66b5d0c3376747c4e2e3ef6b21bd8db484f5fcb355031bce9d991f. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 210acf92ae66b5d0c3376747c4e2e3ef6b21bd8db484f5fcb355031bce9d991f. картинка Rgb lighting rust что такое. картинка q93 210acf92ae66b5d0c3376747c4e2e3ef6b21bd8db484f5fcb355031bce9d991f

Rgb lighting rust что такое. q93 3b7a0e93052b099a39c81bfbfe62274b11fee54e2e3a321fde13b017210b3c1f. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 3b7a0e93052b099a39c81bfbfe62274b11fee54e2e3a321fde13b017210b3c1f. картинка Rgb lighting rust что такое. картинка q93 3b7a0e93052b099a39c81bfbfe62274b11fee54e2e3a321fde13b017210b3c1f

Rgb lighting rust что такое. q93 324ba9b4cf93bfca652ce4aa7dd9cf40524c607bd377ef47047f38f6be4da79c. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 324ba9b4cf93bfca652ce4aa7dd9cf40524c607bd377ef47047f38f6be4da79c. картинка Rgb lighting rust что такое. картинка q93 324ba9b4cf93bfca652ce4aa7dd9cf40524c607bd377ef47047f38f6be4da79c

Источники питания и контроллеры управления

Для того, чтобы светодиод заработал, нам нужно как минимум подать на него питание, а как максимум — как-то управлять и задавать его цвет.

К питанию светодиодов предъявляются определенные требования. Так, для нормальной работы им требуется источник постоянного стабилизированного тока, обычно напряжением 3-5 Вольт.

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

Поэтому в качестве источников питания применяются «драйверы» (стабилизируют ток) и блоки питания (стабилизируют напряжение, реже — и то, и другое). Первые применяются для питания отдельных светодиодов и светодиодных матриц, а вторые — для светодиодных лент, где уже установлена микросхема драйвера или балансный резистор.

Rgb lighting rust что такое. q93 104daf173642cece112a88246216d2180e4dbe4cc9e0951fa9a636693bc43dae. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 104daf173642cece112a88246216d2180e4dbe4cc9e0951fa9a636693bc43dae. картинка Rgb lighting rust что такое. картинка q93 104daf173642cece112a88246216d2180e4dbe4cc9e0951fa9a636693bc43dae

Rgb lighting rust что такое. q93 15a3ad6d828339621d9901161a148de82312d1053f21c47b66fad3116bb4f764. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 15a3ad6d828339621d9901161a148de82312d1053f21c47b66fad3116bb4f764. картинка Rgb lighting rust что такое. картинка q93 15a3ad6d828339621d9901161a148de82312d1053f21c47b66fad3116bb4f764

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

Итак, поскольку мы имеем фактически три элемента в одном, ими надо управлять. Есть несколько разновидностей распиновки таких светодиодов.

Rgb lighting rust что такое. q93 b2169ea6fe71f2bee8617a5c5ae9d68b148b14368253f44f9a06a22c0d2ae646. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 b2169ea6fe71f2bee8617a5c5ae9d68b148b14368253f44f9a06a22c0d2ae646. картинка Rgb lighting rust что такое. картинка q93 b2169ea6fe71f2bee8617a5c5ae9d68b148b14368253f44f9a06a22c0d2ae646

В первых двух случаях корпус диода имеет 4 вывода, а в последнем — шесть.

Управлять каждым из трех (красный, синий, зеленый) элементов светодиода можно несколькими путями, но наиболее часто в данный момент применяется метод широтно-импульсной модуляции (ШИМ).

Rgb lighting rust что такое. q93 f5bf12a8d1314c8f6fa403b36a73d268e61315eb2b1c3bf3f8b7b897ede432da. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 f5bf12a8d1314c8f6fa403b36a73d268e61315eb2b1c3bf3f8b7b897ede432da. картинка Rgb lighting rust что такое. картинка q93 f5bf12a8d1314c8f6fa403b36a73d268e61315eb2b1c3bf3f8b7b897ede432da

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

Rgb lighting rust что такое. q93 a879ce55c483dc751484ebe58ff9fc73bfd894690450ab0c29e5d6035d32d200. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 a879ce55c483dc751484ebe58ff9fc73bfd894690450ab0c29e5d6035d32d200. картинка Rgb lighting rust что такое. картинка q93 a879ce55c483dc751484ebe58ff9fc73bfd894690450ab0c29e5d6035d32d200

Если не требуется раздельное управление большим количеством светодиодов, это достаточно хорошее решение. Но, допустим, у вас есть 10 светодиодов и вы хотите сделать эффект змейки или волны. Делать 10 независимых каналов затратно, а при последовательном соединении диодов мы сможем управлять сразу всеми чипами одного цвета.

Исправить такое положение дел призваны модели со встроенным микрочипом — драйвером управления RGB-светодиодом. Также их называют адресными (ARGB).

Rgb lighting rust что такое. q93 bc0e3b03db6c49c17eb4e7c0dfd4e3e4a01777b0ce4777cec7f8272e5749cd13. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 bc0e3b03db6c49c17eb4e7c0dfd4e3e4a01777b0ce4777cec7f8272e5749cd13. картинка Rgb lighting rust что такое. картинка q93 bc0e3b03db6c49c17eb4e7c0dfd4e3e4a01777b0ce4777cec7f8272e5749cd13

Такие светодиоды имеют 4 и более вывода, позволяют подключать большое количество LED и управлять отдельно каждым светодиодом. Соединяются светодиоды последовательно, питаются от стабилизатора напряжения, а управляются микроконтроллером.

Rgb lighting rust что такое. q93 3ddbdabafffac25f380534178e267fcbe7e1a8f5a07827e34bc4659bac50fcd7. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 3ddbdabafffac25f380534178e267fcbe7e1a8f5a07827e34bc4659bac50fcd7. картинка Rgb lighting rust что такое. картинка q93 3ddbdabafffac25f380534178e267fcbe7e1a8f5a07827e34bc4659bac50fcd7

Контроллер по последовательному интерфейсу передает на светодиоды информацию о заданном цвете в виде цифрового кода (последовательности бит). Первый светодиод считывает первые n-бит информации, а остальное передает дальше к следующему. Второй СД делает то же самое, и таким способом вся цепочка получает данные о заданном цвете.

Какое количество цветов могут воспроизвести RGB-светодиоды?

Доступно 16,7 млн цветов. Знакомая фраза? Если вас всегда интересовало, почему именно такое число, то все и просто, и сложно одновременно.

На практике для хранения информации о цвете каждой точки в модели RGB обычно отводится по 8 бит на один цвет или 24 бита на все три. Таким образом, каждый из трех цветов может принимать значение в диапазоне от 0 до 255 (всего 2 в 8 степени = 256 значений). Где 0 — отсутствие свечения, а 255 — максимальная яркость.

В результате можно получить 256 х 256 х 256 = 16 777 216 цветов, смешивая цвета в различных пропорциях и изменяя яркость каждой составляющей. Это можно представить в виде куба, где любая точка внутри него будет иметь определенный цвет и координаты.

Rgb lighting rust что такое. q93 bbeb0bc953ce1c6ac08eacd61afeda3fa2c309f84c3b6e2b0075db098e936cfc. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 bbeb0bc953ce1c6ac08eacd61afeda3fa2c309f84c3b6e2b0075db098e936cfc. картинка Rgb lighting rust что такое. картинка q93 bbeb0bc953ce1c6ac08eacd61afeda3fa2c309f84c3b6e2b0075db098e936cfc

С другой стороны, это лишь только теория. Восприятие цвета человеком — достаточно сложная вещь. Здесь много как индивидуальных, так и общих особенностей, сформированных в процессе эволюции. Так, например, глаз по-разному реагирует на разные длины волн (собственно цвета). Кроме того, существует такая особенность, как метамери́я, благодаря которой, в общем-то, мы можем воспринимать солнечный свет и свет от RGB-светодиодов как белый оттенок.

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

Применение RGB-подсветки в компьютерной технике

Основное применение в подсветке вообще и в компьютерной сфере в частности нашли именно SMD RGB LED. Подсветка настолько широко проникла в компьютерные девайсы, что уже прочно с ними ассоциируется и становится трудно сказать, где производители ее еще не применили.

Rgb lighting rust что такое. q93 5d6d43581fe7efd95c733286dd0549efaffb4fa16de9203212da8db3afd0ce5a. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 5d6d43581fe7efd95c733286dd0549efaffb4fa16de9203212da8db3afd0ce5a. картинка Rgb lighting rust что такое. картинка q93 5d6d43581fe7efd95c733286dd0549efaffb4fa16de9203212da8db3afd0ce5a

Rgb lighting rust что такое. q93 e75cbbc31d702829edef80ef2fe8ad338ca00fdc0a0e84472821787034a3341f. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 e75cbbc31d702829edef80ef2fe8ad338ca00fdc0a0e84472821787034a3341f. картинка Rgb lighting rust что такое. картинка q93 e75cbbc31d702829edef80ef2fe8ad338ca00fdc0a0e84472821787034a3341f

Rgb lighting rust что такое. q93 f652adf647e79cca35e38f4cf744e16feac3f516e9d044035c61582b106af77c. Rgb lighting rust что такое фото. Rgb lighting rust что такое-q93 f652adf647e79cca35e38f4cf744e16feac3f516e9d044035c61582b106af77c. картинка Rgb lighting rust что такое. картинка q93 f652adf647e79cca35e38f4cf744e16feac3f516e9d044035c61582b106af77c

Как видите, мир компьютерных комплектующих и периферии, дополненных RGB-подсветкой, очень велик. Посмотреть обзоры таких товаров можно на страницах Клуба ДНС.

Источник

Пишем свой упрощенный OpenGL на Rust — часть 1 (рисуем линию)

Наверное, мало кто на хабре не в курсе, что такое Rust — новый язык программирования от Mozilla. Уже сейчас он привлекает много интереса, а недавно наконец вышла первая стабильная версия Rust 1.0, что знаменует собой стабилизацию языковых возможностей. Мне всегда импонировали системные ЯП, а уж идея системного языка, предлагающего безопасность превосходящую языки высокого уровня, заинтересовала еще больше. Захотелось новый язык попробовать в деле и, заодно, интересно провести время, программируя что-нибудь увлекательное. Пока думал, что бы такого на расте написать, вспомнился недавний цикл статей про компьютерную графику, который я лишь бегло просмотрел. А очень интересно было бы попробовать все-таки написать все эти красивости самостоятельно. Вот так и родилась идея этого хобби-проекта, а также данной статьи.

Поскольку в оригинальной статье тщательно разжевываются все нюансы, касающиеся программирования непосредственно графической составляющей, то я в своем цикле статей буду сосредотачиваться главным образом на том, что касается непосредственно Rust’а. Постараюсь описать те грабли, на которые довелось наткнуться, а также как решал возникающие проблемы. Расскажу о личных впечатлениях от знакомства с языком. И, конечно, упомяну список ресурсов, которыми пользовался при разработке. Итак, кому интересно, добро пожаловать под кат.

Предупреждение: статья написана с позиции новичка и описывает тупые ошибки новичка. Если вы профи раста, возможно, посмотрев на мои потуги, вы захотите меня больно огреть чем-нибудь тяжелым. В таком случае рекомендую воздержаться от ее чтения.

Rgb lighting rust что такое. b91b69e03d194248ab653a4019314d13. Rgb lighting rust что такое фото. Rgb lighting rust что такое-b91b69e03d194248ab653a4019314d13. картинка Rgb lighting rust что такое. картинка b91b69e03d194248ab653a4019314d13
Here is the Rust, which i hope to get at the end. (игра слов, Rust по-английски «ржавчина»)

Подготовка

Описывать установку компилятора, я не буду, там все достаточно очевидно. Установочный пакет с официального сайта установился на моей Ubuntu 14.04 парой команд. Следует лишь отметить, что есть репозиторий для Ubuntu, используя который также теоретически можно установить Rust. Однако у меня с этим репозиторием не задалось. Почему-то Rust устанавливался, но без Cargo. Synaptic даже не показывал Cargo в списке доступных пакетов. Rust без Cargo — это довольно бессмысленная штуковина, так что указанный PPA я не использовал.

Итак, как и всегда, знакомство с новым языком мы начинаем с Hello World. Создадим файл main.rs:

Результат запуска этого в консоли очевиден:

Код можно писать с использованием Gedit. Расцветка синтаксиса Rust для этого редактора может быть найдена по следующей ссылке. Сразу она не заработала, но в трекере был багрепорт, который объяснял причину проблемы. Простенький pull request решил проблему, поэтому сейчас у вас должна расцветка заработать без лишних плясок с бубном.

Первая же ссылка в Google привела меня на сайт проекта Rust-SDL2 — привязки к SDL2 для Rust. Чтобы задействовать эту библиотеку добавляем в конец cargo.toml следующее объявление зависимости:

Это добавляет в проект т. н. контейнер (crate) sdl2. Для компиляции библиотека использует заголовочные файлы SDL, поэтому надо не забыть их установить. В Ubuntu 14.04 это делает команда:

После этого команда cargo build успешно соберет нам проект со всеми необходимыми зависимостями.

Эксперименты с SDL

Всю функциональность, связанную со взаимодействием с SDL (или же другой графической библиотекой в перспективе), я решил вынести в отдельный класс — canvas.rs. Поначалу просто для проверки работы библиотеки я скопировал туда содержимое теста из репозитория Rust-SDL2, собираясь на основе его впоследствии написать готовый класс.

Тут у меня были первые грабли. Оказалось, что любое объявление extern crate package_name в библиотеке должно быть также продублировано в main.rs приложения. Потребовалось время, чтобы разобраться в этом, но после всех мучений, у меня наконец получился проект, который вы можете увидеть в снапшоте на github.

В итоге в файле canvas.rs был такой код:

Этот код выводит вот такое вот замечательное окошко:

Rgb lighting rust что такое. image loader. Rgb lighting rust что такое фото. Rgb lighting rust что такое-image loader. картинка Rgb lighting rust что такое. картинка image loader

Пишем код

Стоит отметить, что до этого мой процесс разработки неплохо характеризовался словами «Stack Overflow Driven Development». Я просто дергал разные куски кода из разных мест и компоновал их вместе даже не зная синтаксиса языка. Это типичный для меня способ изучения нового языка или технологии — просто начать писать код. К различным ресурсам же я обращаюсь как к справочнику, чтобы понять, как сделать конкретный нужный мне кусочек. Нужен цикл, прочитать статью про циклы в языке. Нужно IoC, нагуглить хороший ответ на Stackoverflow. Ну вы поняли. Большинство языков и технологий довольно похожи, поэтому проблем при подобном подходе не возникает. Можно начать сразу программировать, даже еще толком не зная язык. С Rust такой номер не прошел. Язык довольно своеобразен и уже на попытке понять, как сделать класс или объект, произошел затык. В книге раста не было статей с названием Classes/Objects/Constructors и т. п. Стало понятно, что сначала придется немного подучить матчасть. Поэтому, чтобы составить общее впечатление о синтаксисе языка, были пройдены уроки Guessing Game и Dining Philosophers из официальной документации Rust’а. Она на английском, стоит отметить существование перевода на русский. Правда тогда я еще этого не знал, читал на языке оригинала.

В общем после этого, работа пошла. Хотя еще пришлось повоевать с системой владения и заимствования Rust. Официальная документация отмечает, что этот этап проходит каждый новичок, но ободряет нас тем, что по мере практики код можно будет писать легко и непринужденно, привыкнув к ограничениям, накладываемым компилятором. Во вступлении говорится, что сложность обучения — цена, которую приходится платить за безопасность без накладных расходов. Конкретно проблема была в том, что в методе new(), создающем структуру, поля вновь созданной структуры необходимо проинициализировать несколькими объектами из SDL, чтобы потом использовать их в методах структуры. Если я пытался проинициализировать поле ссылкой, компилятор ругался, что не может сделать изменяемое заимствование ( error: cannot borrow data mutably in a `&` reference ). Вот в таком коде:

Компилятор жаловался, что не может заимствовать неизменяемое поле renderer как изменяемое ( error: cannot borrow immutable field `self.renderer` as mutable ). Ларчик открывался просто. Оказывается в Rust все поля в структуре рассматриваются как изменяемые или неизменяемые в зависимости от того, была ли передана сама структура в метод как изменяемая или неизменяемая. Таким образом правильный код таков:

Как видите, здесь я изменил сигнатуру метода point.

Теперь еще немного о граблях:
Были большие сложности в работе с кодом, взаимодействующим с библиотекой Rust-SDL2. У нее есть документация, но там пока мало чего сказано, а существование некоторых методов вообще умалчивается. Например о методе sdl2::init() в документации ничего. Словно его и не существует. Система автоматического вывода типов Rust упрощает и ускоряет написание кода, но она же сыграла со мной и злую шутку, когда мне понадобилось понять, какой же тип возвращает вызов sdl2::init().video().unwrap(), потому-что этот результат надо было сохранить в поле в структуре, а там тип указывается явно всегда. Пришлось читать исходники библиотеки, хотя чуть позже я нашел и менее трудоемкий выход. Просто указываешь у поля любой произвольный тип, Rust при компиляции ругается на несоответствие типов, выводя в сообщении об ошибки тип, который должен быть. Вуаля!

В других участках кода все упоминания lifetime можно убрать.

Rgb lighting rust что такое. image loader. Rgb lighting rust что такое фото. Rgb lighting rust что такое-image loader. картинка Rgb lighting rust что такое. картинка image loader

Думаю, кому-то мои мытарства могут показаться экспериментами обезьяны с гранатой. Но я вас предупреждал.

Пишем линию

Rgb lighting rust что такое. image loader. Rgb lighting rust что такое фото. Rgb lighting rust что такое-image loader. картинка Rgb lighting rust что такое. картинка image loader

Дальше пошло проще, потому-что серьезного взаимодействия с библиотекой Rust-SDL2 уже не требовалось. Ее неочевидный и недокументированный, местами даже недоделанный API был постоянным источником трудностей. Всякая арифметика и управляющие конструкции в Rust не слишком отличаются от других ЯП. Поэтому линия была написана всего за несколько часов (в отличии от нескольких дней на предыдущих этапах). И то большая часть работы была из-за того, что я решил не реализовывать готовый алгоритм, а написать свой, используя уравнение прямой y=kx+b, как основу, а все остальные формулы выведя самостоятельно. Вот такая функция у меня получилась в итоге:

Знаю, она у меня страшненькая, длинная, неэффективная. Но зато своя — родная. 🙂 Я почти сразу пришел к тому, чтобы писать целочисленную версию, не используя вещественную арифметику. В Rust нет неявных преобразований типов, а явные получаются очень многословными. Поэтому от идеи написать сначала вещественную версию я отказался. Много кода, а ее потом все равно в итоге переписывать, чтобы она не тормозила.

В ходе написания этой портянки мне понадобилось логгирование, поскольку проверенной временем IDE для Rust пока нет. Есть несколько свежих, но я не хотел залипать на их бета(альфа?)-тесте. Если кто-то пользовался и увидел, что оно стабильно и хорошо работает, отпишитесь, пожалуйста, в комментариях. Пользоваться отладчиком из консоли мне не в радость. Да и вообще логгирование штука полезная. Стараюсь приучать себя использовать логи вместо отладчика, потому-что это помогает писать логи, по которым потом реально разобраться, в чем возникла проблема у конечного пользователя (по крайней мере, если он сумеет запустить в режиме логгирования debug).

Итак, логгирование. Для логгирования в поставке Rust есть библиотека log. Но это просто абстрактное API, а конкретную его реализацию надо выбрать самому. Я использовал env_logger, который предлагается в документации к log. Пишем следующее в cargo.toml:

Пользоваться этим набором очень просто:

Надо только не забыть, что контейнер (crate) env_logger настраивается посредством переменных окружения. Я использую следующую команду перед запуском проекта:

Это задает модулю rust_project уровень логгирования debug. Все остальные модули остаются с уровнем по умолчанию, поэтому лог при запуске программы не засоряется всяким отладочным мусором от cargo или sdl. Итог работы на этом этапе можно увидеть в срезе репозитория. При запуске наша программа выводит вот такую вот красоту:

Rgb lighting rust что такое. image loader. Rgb lighting rust что такое фото. Rgb lighting rust что такое-image loader. картинка Rgb lighting rust что такое. картинка image loader

Впечатления

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *