Pull to refresh

Comments 33

на своей первой работе делал кросплатформенный гуй для кассовой проги на основе sdl и opengl. до сих пор в шоке.

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

там не сложно, вьюшку сделать с кнопками под проект, например вью для базы данных по назначению, или еще чонить на СДЛ не так сложно сделать, или лаунчер, да любую вьюшку, opengl если, то скорее всего вы так отозвались потомучто есть 2 вида матриц 3д матрица и 2д - ортогональная, вы задаёте просто координаты квадрата в кратце и рисуете вашу область нужную 2д, а 2д в 3д просто убираете z в шейдере, вообщем просто матешу чуть чуть потдянуть, там не сложно на самом деле, тоесть это двух матричное рисование в окне

Скрытый текст

это вводная в партиклы, в отображение текста в мире и прочее, ну кароче плоская плоскость в 3д

вот вы делаете сейчас функционал под окна я хотел еще вчера вам напомнить что в рисовании окон тоже матеша есть

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

но как по мне основная проблема гуя на "видюхе" это нормальный рендер текста

вот не помню почему я не использовал средства sdl, но текст рендерил руками через libfreetype - загружаешь ttf глиф, текстурируешь его, помойму где то там еще учитывался кернинг.

При случае сделайте в оупенсор создание нативного GUI (мобильники+винда) из Json.

Заслуживающих внимание GUI библиотек - туча. Есть библиотеки:

  • дающие кросплатформенный канвас - рисуй что хошь:

This library provides the most minimal and highly opinionated way to display a cross-platform 2D canvas. If you remember Borland BGI or drawing things in QBASIC or INT 10h- you know what I mean. One C99 header of ~300LOC, easy to understand and extend.

https://github.com/zserge/fenster

  • дающие zerodependency (почти) stb Ebedded GUI - встраивай:

µGUI is a free and open source graphic library for embedded systems. It is platform-independent and can be easily ported to almost any microcontroller system. As long as the display is capable of showing graphics

https://github.com/achimdoebler/UGUI

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platform-independent API for creating windows, contexts and surfaces, reading input, handling events, etc. GLFW natively supports Windows, macOS and Linux and other Unix-like systems. On Linux both X11 and Wayland are supported.

https://github.com/glfw/glfw/

  • дающие кросплатформенные native GUI

tighter OS integration (especially for document-based programs), to allow programs to fully feel native, rather than merely look and act native

https://github.com/andlabs/libui

A library for creating native cross-platform GUI apps.
https://github.com/yue/yue

Но, чтоб строили кросплатформенный stb GUI из Json, я не встречал.

GUI Json можно генерить здесь:

GUI->Json (Editor)

Прежде чем кому-либо советовать wxWidgets рекомендую обратить внимание на то, что главная страница данного проекта содержит политические заявления. Было бы не очень здорово, если бы кому-нибудь из пользователей софтины ничего не подозревающего JordanCpp отформатировало ЖД за неправильную юрисдикцию.

GLFW только пк, SDL даёт порты в большее количество платформ

да жесон это просто способ настройки коммуникации с бинарником, суть в том что сдл на 2д своём даёт простоту кода для создания нужного 2д функционала, а на опенжль просто тоже самое, но с шейдерами, но есть прям гуй либы тут да вы правы

я крайнюю игру делал под пк/андроид на сдл3 и там у меня был свой бинарник ассета(менеджер - загрузчик), врятли на данном этапе сделаю жесон, жесон же можно получить из SQLite - пока я пользовался максимум скулайтом, а жесоном не пользовался

это надо gltf читать разбираться, а тут ассимп он поудобнее и нет имгуя как вы видите всё родное то что в игре будет (ну скорее не в игре, а демосцене - игра очень амбициозно)

жесон же можно получить из SQLite

SQLite - излишен. Я немного математик.

В качестве бонуса. Полноценная реализация SQL на Pure JS в 482 LOC (не моя).

https://github.com/myfoundation/SQLike

То есть, таблицы в +- пару млн записей (что для GUI, и не только, - крыша), можно гонять в Json-е. :)

Очень интересно было в DOS работать с экраном char (*screen)[80][2]=0xB000;
И для вывода на экран можно просто заполнять массив char.

И правила именования с типом переменной вначале lpszClassNameя не встречал с тех времен.

Также тогда в Windows активно использовались диалоги, и хранение форм для окна в ресурсах. Что-то типа VCL форм от Delphi.

охх, тем диалоговым формам до VCL было как до луны. Там эти диалоги делались через редактор ресурса, так-же как и иконки, строки и прочее. Во всяком случае в четвертом борланде (не билдер естественно). Это был мрак, закат и рассвет солнца вручную.

Заплюсовал за codestyle, олдскульно.

Теперь по сути: на 2025-й год называть рисование через MoveToEx, LineTo, FillRect со всеми прелестями вроде HWND, WNDCLASSA, PAINTSTRUCT "ненормальным программированием" - можно, "демосценой" - нельзя.

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

Что по демосцене - так это вообще от другом.

PS Из истории

"Демосцен" было две:

  1. стерильная русская демосцена (https://ru.wikipedia.org/wiki/Русскоязычная_демосцена) , где пара-тройка мажор-кексов из МГУ, МФТИ и иже с ними с хорошей физ и мат. подготовкой создало пару графических нетленок вроде Zoom 3 by AND https://www.youtube.com/watch?v=n92Is47luCI .
    В годы расцвета ~1993-2003 эта "демосцена" умещалась в ~30 человек. Затем - всё.
    (нельзя писания на ассемблере Zilog Z80 называть "демосценой" в 2025 году).

    Краткая история русской демосцены
  2. "демосцена" - как часть международного андеграунда, где демки - были лишь intro (вступлениями) и greetings (приветами) в среде андеграундных групп.

Так что, статья:
- на олдскул - тянет;
- на демосцену "по-русски" *** (ассемблер Zilog Z80+) - да;
- на демосцену иную - увольте. Впрочем, к этому не привыкать. ;)

***

игра слов, аллюзия на Пинбол по-русски https://small-games.info/?go=game&c=21&i=2617 (кто знает - тот знает)

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

Да можно. Выделяй в памяти буфер и рисуй на нём чем угодно - хоть тензорами (хотя они не для этого), хоть - попиксельно, а затем через memcpy перекидывай битовую картинку в Виндовое окно.

Кроссплатформ до повсеместной аппаратной поддержки Graphics Languages (вроде DX, OpenGL, GLSL итд) так и писался

*

Кто такой Андре Ламот и почему вам следует прочесть его книги?

https://habr.com/ru/articles/693660/

Милые обезьянки на GL-е.

Что до меня, так считаю, что писать графику на Си-подобных языках - мовитон. Правильней делать специальный язык+vm-ку и кодировать графику на нём. Поэтому у меня любовь с первой ложки к SideFX Houdini (хоть язык там и кривоват).

есть и такие проекты

Использовал для графики DOS/4GW на Watcom C.

Много экономило времени и сил.

Ненормальность в том, в каждом процессоре уже сидит тензорная алгебра, а мы всё юзаем BRUSH.

Это только начало. Этот режим нужен для совместимости со старыми windows. Потом будет режим рисования в буфер, потом opengl и directx. Поверх 2d абстракции с единып api. В этом цель.

Идея понятна сразу - уйти от тухлятины вроде многотомных stdlib-ов с их несовместимостями в разных версиях винды. Сделать lightweight + zero dependency в бинарниках.

Но я не вижу продолжения. Нет аудитории , понимающей и принимающей задумку.

PS Картинка IDE VC6 в Пилим движок Arcanum. Урок 03 - "резанула глаз" ;) . Это самая продуманная и лучшая IDE (+ VisualAssist от Tomato Software) за время существовования кодирования. ;)

Но я не вижу продолжения. Нет аудитории , понимающей и принимающей задумку.

В первую очередь это интересно мне. Это мое желание рассказать и показать. И я понимаю и принимаю, что это скорей всего интересно паре десятков человек. Я не создаю платный контент, просто пилю статьи в удовольствие. Поэтому мне не нужны подписчики в ТГ, на Ютубе, что бы впаривать им рекламу. Меня это полностью устраивает.

И у меня нет таймингом и сроков. Захотел написал одно, потом другое.

Идея понятна сразу - уйти от тухлятины вроде многотомных stdlib-ов с их несовместимостями в разных версиях винды. Сделать lightweight + zero dependency в бинарниках.

Да именно так.

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

Omg, эта строчка сидит в мозгах глубоко, как заклинание из детства! В 1999 году я много раз её повторял, развлекаясь с Visual C++ 😎

О. Буду этим баловаться на 98 винде в рамках ностальгии)

Но не могу понудеть.

  1. С чего автор взял, что это легаси? Если винапи - это легаси, то ассемблер - что?

  2. Слабо верится в прошаренность автора по теме, когда он пишет, что directx, opengl - это какие-то последователи gdi. Это разные библиотеки для разных задач, существовавшие параллельно с незапамятных времен.

  3. Комменты жутко напоминают чатгпт)

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

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

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

Код идеален.

плюсы надо запретить!

Не сразу понял, что это был сарказм. Но оценил )

Но у такого способа есть свои недостатки, даже сейчас.

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

Sign up to leave a comment.

Articles