Всем привет! Подскажите пожалуйста, есть ли в видеоадаптерах встроенные функции для построения 2D-графических примитивов? Задача заключается в том, чтобы на экране за максимально короткий промежуток времени нарисовать большое количество закрашенных прямоугольников и линий. Программа на ассемблере работает в ДОСе, в нереальном режиме процессора, используя VBE2. Напомню, что графика двухмерная. Решается задача путем прямого копирования данных о цвете пикселей в линейный кадровый буфер. В данном случае рисованием графики занимается центральный процессор. Хотелось бы знать, можно ли задачу по прорисовке примитивов переложить на видеокарту! Бедному CPU и без того работы хватает. В общем, как говорится, "Баба с возу - кобыле легче"... Заранее благодарен за ответ!
Мне тоже кажется, что GPU должен быть шустрым и смышленым малым. Только вот информации по нему нигде не встречал пока. К тому же на разных адаптерах и процы наверное разные. Может существует некий стандарт или интерфейс для подобных проделок?!
Ммм, не понял. У каждой видеокарты свой GPU, и наверное у видеокарт одного семейства существует обратная совместимость. ОСь врятли использует видеокарту напрямую, к примеру где-то слышал, что для создания ГУИ MacOS юзали SDL, уж не знаю насколько достоверная информация.
dess По поводу стандарта. Есть DirectX, OpenGL, GDI. Но реализуются через дрйвера. Так что в вашем случае не подходят и можете считать что стандарта нет. А так можете взять исходники XFree86, это часть видео системы линукса. Там уже есть дрйвера. Квадраты относятся к BitBlt.
Я думал что возможно в видяхе есть нечто высокоразвитое, аналогичное системе прямого доступа к памяти: задал координаты, размеры, цвет и... видюшное железо метнулось рисовать в видеопамять. Кстати спасибо за ссылочку на исходники, пойду покопаюсь.
Есть, но только оно зашито в драйверах и не документировано производителями. На драйвера Линукса тоже надежда плохая, т.к. железячная часть там в виде объектных модулей, а не в исходниках. Давно же уже есть VBE3 - может там что есть для ДОС
dess 2Д-подсистема похожа во многих видюхах (принципиальные различия в 3Д). То есть что бы что-то нарисовать, надо сформировать нечто на языке конкретного адаптера типа (не так на самом деле, но упрощенно) 02 36 100 100 200 200 3с3сff , закинуть это дело в специальную область памяти видеоадаптера и записать в его регистры "обработать". Далее мы можем делать что-то с процессором, а видюха параллельно и самостоятельно определит, что 02 - прямоугольник, 36 - операция "заливка одним цветом", 100,100 - 200, 200 - координаты углов, 3c3cff - цвет заливки. И это дело запишет в отображаемую видеопамять. Вся беда в том, что - вот та самая область памяти, в которую надо писать такие команды, различается в зависимости от производителя и модели - регистр и/или способ, посредством которого подается команда "исполнить", так же различается - управляющие коды операций (команд видеопроцессора) и формат данных различаются И вот для того, чтобы некую операцию записать соответственно данному адаптеру и выполнить, и нужен драйвер. Который поставляется производителем, и не всегда с (или всегда без?) исходного кода и открытой документации. Ну вот например по интегрированным интеловским картам: http://download.intel.com/design/chipsets/datashts/29068801.pdf попадались такие же доки вплоть до 845 (810, 815, 845) чипсета. Описаны порты ввода-вывода, отображаемые на память регистры, назначение и т.д. и т.п. Иметь хотя бы такую же информацию о NVIDIA и ATI - и можно что-то сделать ) ЗЫ: может быть имеет смысл так же почитать что-нибудь из найденного по ключевым словам "шейдеры", "OpenCL" и "CUDA". Истина где-то там...
Всем огромное спасибо за информацию! Вижу, что тема обширная. Вероятно потребуется экскаватор для произведения раскопок. Производители постарались на славу )) В общем то ответ на поставленный вопрос получен: встроенные функции есть и профессиональное ПО умеет этим пользоваться. А в самопальной home-made системе вряд ли удастся учесть все случаи жизни. Всё! Направление, куда копать, получил. Чайную ложку приготовил. Удаляюсь. Надеюсь, что данная тема пока не закрыта.