Поэтому я много читал о средах исполнения (Python, JVM …), и я начинаю реализовывать их самостоятельно. Это основанная на регистре среда, написанная на C. У меня определен базовый формат байт-кода, и выполнение пока идет довольно гладко. Мой вопрос заключается в том, как VE визуализируют GUI. В более подробном описании моей работы у моего VE есть экранный буфер (экспериментируя с ним). Каждый раз, когда я нажимаю на него, я полностью выводю экранный буфер, чтобы узнать результат.
Пока все хорошо с базовыми вычислениями и прочим, но я столкнулся с трудностями, когда захотел понять, как визуализировать GUI. Я нигде с этим. Любая помощь будет оценена. Даже если я думаю об этом совершенно неправильно, любые указатели в качестве начала в правильном направлении были бы действительно хороши. Благодарю.
Все инструменты GUI на Python являются оболочкой для кода C / C ++. В Java есть некоторые «чистые» Java-инструментарии, такие как Swing, но на самом низком уровне они зависят от кода C для рисования и обработки пользовательского ввода. В Java VM нет особой поддержки таких вещей, как графика.
От того, как графический интерфейс отображается на самом низком уровне, зависит. В Windows программному обеспечению пользовательского режима запрещен прямой доступ к видеооборудованию. В конечном итоге любой код графического интерфейса C / C ++ должен проходить через GDI или Direct3D для визуализации. Код GDI режима ядра способен выполнять всю визуализацию самостоятельно, записывая в кадровый буфер, но также поддерживает ускорение путем передачи операций в драйвер дисплея. С другой стороны, код ядра Direct3D передает практически все драйверу, который, в свою очередь, передает все на графический процессор. Почти весь код режима ядра написан на C, в то время как код, работающий на графическом процессоре, представляет собой смесь сборки, написанной вручную, и кода, написанного на языках затенения более высокого уровня.
Обратите внимание, что язык ассемблера GPU сильно отличается от языка ассемблера Intel x86 и значительно различается у разных производителей и поколений графических процессоров.
Я не уверен, что в настоящее время практикуется в Linux и других операционных системах типа Unix, но раньше было обычным делом дать X-серверу, который является процессом пользовательского режима, прямой доступ к кадровому буферу. Код C на X-сервере в конечном итоге отвечал за рендеринг. Предположительно, это изменилось, по крайней мере, несколько сейчас, когда ускорение GPU встречается чаще.