Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа, драйвера и контексты 
V
    Опции темы
xvr
Дата 13.8.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  13.8.2011,  07:50 Найти цитируемый пост)
Я имел в виду, что компании Microsoft не интересны нововведения в "API видеокарты" (если так можно назвать самые низкоуровневые команды, посылаемые непосредственно видеокарте от драйвера), что компанию Microsoft интересуют исключительно нововведения в драйверах данных фирм, т. к. GDI будет работать именно с ними.

Во первых Microsoft не делает видеокарт, она пишет Операционные Системы. Так что нововведения в 'API видеокарты' ее абсолютно не интересуют, т.к. она пользуется API на уровне именно драйверов.
Во вторых, GDI сам по себе предназначен для вывода окошек и интерфейса пользователя. Там высокие скорости не нужны. Для всякой мультимедии (видео и игры) используется другой стек со своими драйверами - DirectX. Эти драйвера более приближены к аппаратуре, и они позволяют приложениям пользователя получить максимум от каждой конкретной видеокарты.
Например Direct3D использует промежуточный язык (шейдеры), на котором пишется обработка видеопотока (пишется прикладными программистами), и эта программа напрямую попадает в драйвер видеокарты, где уже сам драйвер ее транслирует так, что бы максимально воспользоваться возможностями видеокарты. Вплоть до того, что программа транслируется в код графического процессора самой видеокарты и загружается непосредственно в нее. 
В последнее время некоторые производители видеопроцессоров открыли доступ к ним напрямую из пользовательских приложений (см. CUDA)


PM MAIL   Вверх
Hagrael
Дата 13.8.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Всем большое спасибо за объяснения! Будем ждать новых версий GDI с расширенным функционалом! smile

Минутку. Я тут подумал... зачем вообще нужен контекст, когда можно говорить драйверу (через GDI, разумеется) DrawAnything(0, 10, 20). А драйвер-то заточен под определенную видеокарту, и ему не нужна информация о ней, которая, как я выяснил, является контекстом устройства.
Цитата(Hagrael @  9.8.2011,  09:54 Найти цитируемый пост)
Контекст устройства - структура данных, содержащая информацию об устройстве. Используется для взаимодействия с драйвером

PM MAIL   Вверх
xvr
Дата 13.8.2011, 20:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  13.8.2011,  12:22 Найти цитируемый пост)
зачем вообще нужен контекст, когда можно говорить драйверу (через GDI, разумеется) DrawAnything(0, 10, 20). А драйвер-то заточен под определенную видеокарту, и ему не нужна информация о ней, которая, как я выяснил, является контекстом устройства.

Я так понял, что вы говорите о контексте устройства (Device Context). Он нужен в первую очередь, что бы определить к какому именно драйверу производится обращение. Дело в том, что вызовы GDI одни и те же для всех разновидностей того, на чем можно рисовать. И это не только видеокарта. Это может быть принтер, могут быть разные видеокарты (или разные дисплеи на одной видеокарте) или вообще не физическое устройство, а некая виртуальная сущность (например битмэп в памяти, удаленный рабочий стол, метафайл и т.д и т.п.) 


PM MAIL   Вверх
Hagrael
Дата 14.8.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Все понял, спасибо всем!  smile 
PM MAIL   Вверх
bsa
Дата 15.8.2011, 17:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Hagrael @  13.8.2011,  12:22 Найти цитируемый пост)
Будем ждать новых версий GDI с расширенным функционалом!

Ну и зачем? На этом GDI свет клином не сошелся. GDI нужен только для "офисных" нужд - создание окошек, вывод текста и простой графики. Большее от него и не требуется. А всякие хитрые эффекты вряд ли будут поддерживаться GDI, так как их придется уже самой МС реализовывать для устройств отличных от видеокарт. Когда нужны эффекты, то подключаются менеджеры окон и рабочего стола. И уже через мощные API (в Windows - DirectX, в остальных - OpenGL) делают все это.
PM   Вверх
Hagrael
Дата 16.8.2011, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Понятно. Т. е. GDI нужен для "кросс-устройственности", так? Чтобы одним и тем же кодом можно было рисовать и на принтере, и на видеокарте.
PM MAIL   Вверх
bems
Дата 16.8.2011, 09:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(Hagrael @  16.8.2011,  07:23 Найти цитируемый пост)
Т. е. GDI нужен для "кросс-устройственности", так?
На данный момент, он нужен в основном для обратной совместимости



--------------------
Обижено школьников: 8
PM MAIL   Вверх
IGanja
Дата 2.2.2012, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Если я правильно понял то цепочка следующая:

Приложение->GDI->драйвер->железо.

Но я все равно не догоняю какую роль тут играет контекст устройства?
Кто ни будь может на пальцах, желательно с примерами из жизни кукольных персонажей, объяснить что такое дескриптор и зачем мы его используем?
PM MAIL   Вверх
bsa
Дата 2.2.2012, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



дескриптор - в переводе это "описание". Это некая структура, которая содержит всю необходимую информацию для работы с чем-либо. Обычно, дескриптор скрыт за обезличенным указателем (handle в Windows) или числом (дескриптор файла в POSIX системах) с целью ограничения неконтролируемого доступа "пользователя".

Дескриптор в случае работы с графикой можно представить в виде художника с холстом. Ты ему говоришь: "нарисуй черную линию толщиной 1 мм от хх до уу"; и он ее рисует. И тебе совершенно по барабану в этот момент, рисует он карандашом, кистью, лазером или долотом.

Именно для этого и созданы дескрипторы - скрыть реализацию и предоставить одинаковый инструментарий для управления однотипными объектами (устройствами). В объектно-ориентированном программировании это называется инкапсуляцией.

В принципе, дескриптором можно представить указатель на базовый класс, например, ввода-вывода. Когда ты открываешь файл создается экземпляр класса File, когда сокет - класса Socket, когда pipe - Pipe. Но все они имеют общего предка. Ты можешь применять к нему стандартные методы и будут вызываться соответствующие методы классов (так как они виртуальные). Таким образом, тебе совершенно все равно откуда читать и куда писать - в эти моменты ты используешь общий функционал.
PM   Вверх
IGanja
Дата 2.2.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Спасибо, очень подробно и понятно, а про контекст устройства так же можно?
PM MAIL   Вверх
bsa
Дата 2.2.2012, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



IGanja, да.
PM   Вверх
bsa
Дата 2.2.2012, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(IGanja)
Будьте так любезны, я не одну статью прочитал, но там пишут просто, если вы хотите рисовать, вам нужно получить контекст устройства или что в контексте можно хранить графические атрибуты, но каждый раз на событие WM_PAINT я все равно должен перерисовывать от и до всю клиентскую область, зачем тогда хранить эти атрибуты, непонятно.
продолжим аналогию с художником... ты ему сказал нарисовать десяток линий, пару штриховок и две закраски. Он это сделал на холсте. тебе художник больше не нужен и ты освободил его... через какое-то время холст выцвел и тебе пришло сообщение WM_PAINT. Ты опять вызываешь художника, даешь ему нужные команды, он рисует. Затем ты его снова освобождаешь (чтобы его услугами мог воспользоваться кто-нибудь другой)...
Кстати, по приходу сообщения WM_PAINT ты должен перерисовать не все. Координаты областей для перерисовки можно как-то получить (я не самый большой специалист по WinAPI).
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1077 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.