Нужно буквально следующее: полноэкранное приложение и возможность рисовать пиксель, желательно без всяких сообщений WM_PAINT, ведь в полноэкранном приложении нет необходимости разделять экран между приложениями. Возможно ли такое? Дайте наводку, где читать, какие апи (или не апи) функции использовать? Спасибо всем, кто ответит.
Используй DirectDraw. Там нет функции, которая рисует пиксел, там можно изменять видеопамять. То есть изображение - это квадратная матрица цветов, где можно менять значения, а соответственно меняется и цвет пиксела на экране. Читать можно MSDN на сайте микрософт. Это всё подходит, если хочешь рисовать 2d рисунки, или просчитывать 3d вручную.
И ещё. На сайте микрософт было написано что DirectDraw работает быстрее, чем GDI. Наверное сейчас это не так... Почему же тогда в 8 версии FlashPlayer'а не используется DDraw?
Полез в майкрософтовский MSDN, нашёл там такую вещь: Warning: Microsoft® DirectDraw® has been deprecated. Deprecated components of Microsoft DirectX® 9.0 for Managed Code are considered obsolete. While these components are still supported in this release of DirectX 9.0 for Managed Code, they may be removed in the future. When writing new applications, you should avoid using these deprecated components. When modifying existing applications, you are strongly encouraged to remove any dependency on these components. Перевод: Не используй DirectDraw, ибо его скоро удалят из DirectX Может быть поэтому он там и не используется
Да это микрософт говорит, что DDraw устарело и тд. и вообще, теперь они хотят развивать технологию управляемогого кода, то есть исползование скриптовых языков таких как C#, но тогда ты и за секунду все пикселы на экран не выведешь, потому что тормоза нереальные. Вобщем, если обычные приложение перестанут поддерживаться, то на асме програмировать не получится, придется переходить на P-код( асм для виртуальной машины) )))))))))
themind В GDI есть два способа: с помощью SetPixel установить какой-то пиксел (один, если вздумаешь картинку выводить через эту функцию, получишь зверские тормоза) либо создать в памяти картинку, нарисовать, что надо (просто работая с памятью) и скопировать в контекст. В DirectDraw есть метод для залочивания видеобуфера, в результате получаем указатель на память и с ней работаем. Что в OpenGL — не помню, смотри спецификацию.
так что можно сделать что бы вывести картинку в окно, притом что картинка в памяти уже есть(типа врукопашку наваяли 3д)
Кстати, а можно ли получить доступ к видеокарте или видеопамяти, вообще не пользуясь сервисами винды типа DirectX и т.п. Например, вывод в порт или доступ к видеопамяти, как в досе?
themind Угу. Только если мне кто скажет в какие порты и что писать... По сути фигня - только свой драйвер видео написать. Одна проблема - не знаю как для Intel'а, на котором строится большинство онбордных видеоадаптеров, но ATI с nVidia зашифровались насмерть. То есть низкоуровневой документации, как то описания портов видюхи, на сих монстров я не нашел, хотя искал очень усердно. Вопрос - но пишут же? На тот же линух например... Им документацию производитель что, продает за деньги?
Ustus А нельзя ли использовать драйвера, поставляемые для операционной системы, чтобы получить такую инфу? Ведь винда точно должна знать куда и что писать. Ещё я встречал такое понятие, как стандарт VESA, оно здесь никак помочь не может?
themind Драйвера уже успешно выдержали три моих приступа энтузиазма Там все непросто, ибо используется инфа, уже определенная системой, привязаная к конкретному железу (ведь драйвера например ATI заточены не под конкретную железяку, а под семейство, скажем евойные Catalyst'ы делаются под всю линейку RADEON) и не перерыв еще кучу всякого дорыться невозможно. И потом - ну подсмотрю я как оно режим устанавливает - увижу множество операций с портами... можно втупую сдирать, но смысл останется непостигнут. Что же касается VESA - это на совести производителя. У nVidia таки хватило совести реализовать 3.0, а ATI забили, у них 2.0, а это значит, что управлять частотой развертки никак, что, в свою очередь, означает биосовский рефреш рейт - как правило 60Гц в графических режимах. На 17-ти дюймовке глаза вылазиют Единственно что мне так и не понятно - ну блин, ну что за коммерческая тайна! Ну что, трудно доки в сеть выкинуть? Или боятся, что народ устрашится корявости? Так меня после CGA/EGA/VGA уже врядли что-то устрашит
Использовать OpenGL или DirectX только для того, чтобы нарисовать пиксель в окне - это просто не рационально. Тут банальный SetPixel надо использовать и работать будет хоть на Windows 95 без ускорителя. Если пикселей много - SetDIBits.