Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

графика и Винда

4.4K
13 августа 2006 года
erzik
47 / / 08.04.2006
Нужно вывести точку (заланного цвета) на рабочий стол (в заданных координатах). Подскажите, как.

Так же нужен код вывода точки на окно (созданное программой) (можно MASM).

Проблема вот в чем: не должны использоваться прерывания(но если есть код с ними, выкладывайте!!!) и функции API (!).
Работать должно очень быстро. быстрее АПИ и по скорости доходить до Direct & OpenGL.

("поищи в Яндекс" - ответы такого типа игнорируются, т.к. либо там по этому поводу ничего нет, либо я слепой).
551
13 августа 2006 года
Pavia
357 / / 22.04.2004
Цитата:
быстрее АПИ и по скорости доходить до Direct & OpenGL.


Невозможно.
В Виндоусе без API делать нечего. Но если хочешь можно вывести в видео память, через мс-дос, но там с прерываниями. И нужно знать под какое разрешение.
В WIN98 без проблем можешь писать в видео память. Но будет медленее или на ровне с GDI.

4.4K
13 августа 2006 года
erzik
47 / / 08.04.2006
а как тогда происходит вывод графики в DirectDraw (DirectX) ???

вид рабочего стола находится в оперативной памяти
(вроде бы по адресу A000h:0000h начало),
но для вывода напрямую нужно переключаться на выбранный режим и прочая муть. Ведь можно как-то выводить графику на рабочий стол не переключаясь на другие режимы.

Слышал, что Direct выводит графику на аппаратном уровне. значит МОЖНО как-то.

А как ???
551
13 августа 2006 года
Pavia
357 / / 22.04.2004
Первое API - это набор функций. Поэтому DirectX это тоже API.
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.
Но зато можно написать драйвер. Но, увы информацию о том как программировать видео карты закрытая. Конечно, часть кода открыта, или получена дизассемблированием драйверов видео карт или их БИОСов. Но полноценный драйвер она не заменит.

349
13 августа 2006 года
Phantom-84
656 / / 27.10.2005
Вывести точку именно на Рабочий стол Windows без использования API (обычного или DD) лично мне не представляется возможным... Если конечно пытаться это делать из приложения...
260
13 августа 2006 года
Ramon
1.1K / / 16.08.2003
Ну и темы заводят и отвечают на них - угар, особенно в низкоуровневом программировании. Windows - это Вам не DOS, и здесь как во всех нормальных системах все делается через сответствующий программный интерфейс. Если автору не хватает стандартных средств, ему стоит задуматься о своей квалификации. И сразу встает вопрос - а как же все игрушки трехмерные пашут, а это вам не точку выводить на рабочем столе? Видимо пишут по 0xA0000:D.

PS: Device Context, DirectDraw все что нужно и пример в гугле найти можно с пол пинка, если захотеть конечно, ибо писано по этому поводу достаточно.
4.4K
13 августа 2006 года
erzik
47 / / 08.04.2006
то есть если я хочу вывести графику на окно программы, то остается только АПИ ?

Вообще я программировал на C++ (Builder) АПИ и мне показалось, что FPS там поменьше будет, чем, например, в OpenGL.

( цель открытия этой ветки форума : разобраться в создании библиотеки вывода (естественно, что быстрого) графики на экран. )
551
13 августа 2006 года
Pavia
357 / / 22.04.2004
Графика она разная бывает. Бывает 2D бывает 3D.
Что косается спрайтовой онимации. То здесь GDI хвотает, хотя некоторым мало. Что косается построение фигур то здесь безпорно ледирует OpenGL.
А чем OpenGL не угодил, или тот же DirectX? Быстрее их не выйдет.
551
13 августа 2006 года
Pavia
357 / / 22.04.2004
Ежик, советую тебе найти ветку по СИ и по Win API. Ты не знаешь простых истин. В виндовсе не орентируешься. Ритхера почитай.
4.4K
14 августа 2006 года
erzik
47 / / 08.04.2006
По Ритхеру нашел только про фракталы, но кажется, что ето не то.

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

Если люди сделали такие быстрые графические библиотеки, то ето как-то можно. А как, в этом я и пытаюсь разобраться.

( Ритхера и прочую литературу по программированию я бы с радостью почитал. А так по ассемблеру есть только Пирогов и Финогенов )
551
14 августа 2006 года
Pavia
357 / / 22.04.2004
OpenGL тоже работает с драйвером видео карты. Зачастую при установки драйвера, ставиться и OpenGL от производителя драйвера.
Видео карты специально затачиваются под OpenGL и DirectX.
К примеру видео карты от Intel, чутьли не спициально заточенны под OpenGL, набор команд для отрисовки тех или иных фигур передаются видео карте, вот она их и ресует.
В GDI напротив отрисовка ложится на процессор. Ты можешь сам сделать библиотеку для рисования различных фигур используя ассемблер. Но не надейся, что она будет быстрее.
551
14 августа 2006 года
Pavia
357 / / 22.04.2004
Вот тут набросал пример как быстро выводить окружность рисуется раз в 7 быстрее чем на GDI. Правдо на дельфи, но на Bulder все делается аналогично.
Лежит сдесь http://footballtabl.h15.ru/ivan/my_gdi.rar 170Кб
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог