-
> А возможно используется поверхность последней операции.
> которая может быть пребуфером в RAM или VRAM(но не являться
> front поверхностью).
И поэтому в зависимости от ее положения она либо DIB либо DEVICE формата. Соответствующим образом ведет себя и Getobject.
Я именно к этому склоняюсь.
-
> Я имею мнение, что существует поверхность растра, для устройства,
> на которой в итоге и производится рисование, как методами
> GRE (ядерная часть GDI)m так и методами адаптера, которые
> методы вызываются общими фукциями для ядерной части GDI.
>
Я все таки думаю нужно различать местоположение поверхности.
Вы согласны с тем, что если поверхность device - то рисует устройство, но не x86 код?
А если GRE поверхность значит она в RAM - и рисовать может как x86 код (программный отрисовщик), либо использовать отражение видеопамяти на RAM память, что честно говоря менее эффективно чем использование VRAM.
-
oxffff © (26.03.08 23:30) [179]
Давайте пойдем не от логики - мы все таки не на философском диспуте, Windows вполне конкретная программа, работает по вполне конкретным алгоритмам, их можно проверить. Вот от этого и пойдем.
> А поскольку device формат может не является DIB форматом,
> то и получить его описание через вызов упомянутой функции
> приводит к промаху.
А что, в DC может сидеть объект, который нельзя опросить функцией GetObject ? Наверное его можно опросить другой функцией ?
-
> А что, в DC может сидеть объект, который нельзя опросить
> функцией GetObject ?
Так я ваш пример поправил как раз на провале GetObject.
>Наверное его можно опросить другой функцией ?
Знаете скажите.
-
> Вы согласны с тем, что если поверхность device - то рисует
> устройство, но не x86 код?
Нет, не согласен.
Это всего лишь формат растра.
На растрах DDB может рисовать GDI, что он вполне успешно и делает.
-
> Игорь Шевченко © (26.03.08 23:48) [182]
GetObject(a,sizeof(b),@b);
Дальше sysenter я естественно не добрался.
-
> Игорь Шевченко © (26.03.08 23:55) [184]
Скажите а где расположены device поверхности(в какой памяти)?
И как туда (VRAM) доберется x86 код?
-
> Наверное его можно опросить другой функцией ?
HGDIOBJ
The 24th bit position says whether it is a stock object or not.
Как раз GetObject и валится на одном из таких.
-
-
> HGDIOBJ
>
> The 24th bit position says whether it is a stock object
> or not.
ADC := GetDC(Wnd);
try
HBM := GetCurrentObject (ADC, OBJ_BITMAP);
ShowMessageFmt('%.8x', [Integer(HBM)]);
Показывает 01050050. 24-й бит установлен в единицу (01)
-
> ли ты помнишь, разговор начался с того, имеет ли оконный
> DC буфер. Я сильно надеюсь, что мы уже убедились в том,
> что не имеет ?
С вами разговор начался с этого. С этим я согласен, в том смысле что нет у него персонального буфера, но есть общий и не один при отрисовке.
-
01050050 shr 16
gdi_objtypeb_bitmap = 0x05,
-
> Что есть "device поверхности" ?
В моем понимании, это поверхность device формата расположенная в видеопамяти или отображенной RAM памяти, доступная видеоадаптеру и над которой он(видеоадаптер) выполняет аппаратные операции.
GRE поверхность поверхность RAM памяти, над которой выполняются операции программно, либо аппаратно в случае отображения (однако это менее эффективно чем аппаратные операции в видеопамяти)
-
oxffff © (27.03.08 00:31) [191]
> 01050050 shr 16
>
> gdi_objtypeb_bitmap = 0x05,
Да, потому что GetCurrentObject(ADC, OBJ_BITMAP)
осталось сделать shr 24 и убедиться, что бит stock object установлен.
-
> Игорь Шевченко © (27.03.08 00:23) [189]
Наша задача установить причину поведения Getobject.
Я свое мнение озвучил. А где ваше? :)
P.S. Пошел спать. Завтра(сегодня) я очень надеюсь продолжим изыскания.
Может и Юаня успею прочитать, относящееся к теме.
-
> Да, потому что GetCurrentObject(ADC, OBJ_BITMAP)
Вообще то OBJ_BITMAP=7.
-
oxffff © (27.03.08 00:41) [195]
> Вообще то OBJ_BITMAP=7.
Это несвязанные константы. Типы handle GDI и типы выбираемых объектов.
Опять же, Фэнь Юань. Я кстати ссылку на книжку дал.
-
> Это несвязанные константы. Типы handle GDI и типы выбираемых
> объектов.
> Опять же, Фэнь Юань. Я кстати ссылку на книжку дал.
Юань, Юань.
Google HGDIOBJ structure. :)
Но вопрос о Getobject остается и о типе поверхности остается.
Кстати а у tooltip_class32 какой интересно тип для которого Getobject отрабатывает.
P.S. Все теперь точно спать.
-
> Кстати а у tooltip_class32 какой интересно тип для которого
> Getobject отрабатывает.
HBITMAP
-
> Игорь Шевченко © (27.03.08 12:59) [198]
:).
Вид handle побитово.