графика и Винда
Так же нужен код вывода точки на окно (созданное программой) (можно MASM).
Проблема вот в чем: не должны использоваться прерывания(но если есть код с ними, выкладывайте!!!) и функции API (!).
Работать должно очень быстро. быстрее АПИ и по скорости доходить до Direct & OpenGL.
("поищи в Яндекс" - ответы такого типа игнорируются, т.к. либо там по этому поводу ничего нет, либо я слепой).
Невозможно.
В Виндоусе без API делать нечего. Но если хочешь можно вывести в видео память, через мс-дос, но там с прерываниями. И нужно знать под какое разрешение.
В WIN98 без проблем можешь писать в видео память. Но будет медленее или на ровне с GDI.
вид рабочего стола находится в оперативной памяти
(вроде бы по адресу A000h:0000h начало),
но для вывода напрямую нужно переключаться на выбранный режим и прочая муть. Ведь можно как-то выводить графику на рабочий стол не переключаясь на другие режимы.
Слышал, что Direct выводит графику на аппаратном уровне. значит МОЖНО как-то.
А как ???
DirectDrow работает с драйвером видео карты, вывод почему-то осуществляется через оверлей. Скорее всего, это связанно с синхронизацией с монитором. Так вот DirectDrow вызывает необходимые функции из драйвера видео карты. GDI напротив работает со стандартным линейным буфером LFB. LFB линейный буфер в который отображается память видео карты, находиться в верхних адресах.
По адресу A000h:0000h-B000h:0000h =64КБ этого мала для разрешения 640*480*32бита поэтому существует переключения банков когда в эти адреса отображается определенный участок видео памяти но это неудобно. Для этих целей и был разработан линейный буфер. В защищенном режиме процессора, программисту доступно 4ГБ памяти (здесь я не вдоюсь в подробности). В общем, защищенный режим процессора позволяет работать с линейным адресным пространством в 4ГБ адрес в этом случаи выглядит так пример DS:C0000000h. Так вот где-то в 3ГБайте и лежит наш LFB (Можно получить адресс через прерывания VESA).
Вернемся к GDI, так вот GDI работает с LFB напрямую. Или же некоторые драйвера видео карт перекрывают его сервисы своими. В основном это касается функции bitblt- копирования картинки.
Драйвер видео карты отслеживает BitBlt как для GDI так и для DirectDraw
(разница там только в оверлеи картинка может выводиться быстрее)
Видео карта способна сама залесть в определенный участок памяти компьютера(конечно нужен толчке со стороны драйвера) скопировать от туда картинку в свою видео память минуя процессор (это называется DMA прямой доступ к памяти).
Так как передача данных из памяти компьютера в память видео карты вещь долгая часть картинок кэшируются в видео памяти.
Видео карта может обробатывать картинки с большей скоростью, чем процессор, особенно если картинка лежит в видео памяти =). Видео карта специально разработана для вывода графики, в нее уже заложено кучу возможностей.
Слышал, что Direct выводит графику на аппаратном уровне. значит МОЖНО как-то.
А как ???
Я уже говорил, что DirectX работает с драйверами мультимедиа устройств. В том числе и с драйвером видео карты.
Зачем нужны драйвера? Ответ прост драйвера нужны, для того чтобы работать на аппаратном уровне с железом. Но так как железо различно то и драйвера различаются. Мы не можем на ATI видео карту поставить драйвер от NVidea.
Но зато можно написать драйвер. Но, увы информацию о том как программировать видео карты закрытая. Конечно, часть кода открыта, или получена дизассемблированием драйверов видео карт или их БИОСов. Но полноценный драйвер она не заменит.
PS: Device Context, DirectDraw все что нужно и пример в гугле найти можно с пол пинка, если захотеть конечно, ибо писано по этому поводу достаточно.
Вообще я программировал на C++ (Builder) АПИ и мне показалось, что FPS там поменьше будет, чем, например, в OpenGL.
( цель открытия этой ветки форума : разобраться в создании библиотеки вывода (естественно, что быстрого) графики на экран. )
Что косается спрайтовой онимации. То здесь GDI хвотает, хотя некоторым мало. Что косается построение фигур то здесь безпорно ледирует OpenGL.
А чем OpenGL не угодил, или тот же DirectX? Быстрее их не выйдет.
И OpenGL меня вполне устраивает, но хочется разобраться в том как такую быструю вещь сделали. Т.к. с ассемблером быстрее всего работает, то в эту ветку форума и создал тему.
Если люди сделали такие быстрые графические библиотеки, то ето как-то можно. А как, в этом я и пытаюсь разобраться.
( Ритхера и прочую литературу по программированию я бы с радостью почитал. А так по ассемблеру есть только Пирогов и Финогенов )
Видео карты специально затачиваются под OpenGL и DirectX.
К примеру видео карты от Intel, чутьли не спициально заточенны под OpenGL, набор команд для отрисовки тех или иных фигур передаются видео карте, вот она их и ресует.
В GDI напротив отрисовка ложится на процессор. Ты можешь сам сделать библиотеку для рисования различных фигур используя ассемблер. Но не надейся, что она будет быстрее.
Лежит сдесь http://footballtabl.h15.ru/ivan/my_gdi.rar 170Кб