Конференция "Прочее" » Двойная буфферизация(выдернуто из "Вакансия Delphi программист")
 
  • oxffff © (26.03.08 23:34) [180]

    > А возможно используется поверхность последней операции.
    > которая может быть пребуфером в RAM или VRAM(но не являться
    > front поверхностью).


    И поэтому в зависимости от ее положения она либо DIB либо DEVICE формата. Соответствующим образом ведет себя и Getobject.
    Я именно к этому склоняюсь.
  • oxffff © (26.03.08 23:41) [181]

    > Я имею мнение, что существует поверхность растра, для устройства,
    >  на которой в итоге и производится рисование, как методами
    > GRE (ядерная часть GDI)m так и методами адаптера, которые
    > методы вызываются общими фукциями для ядерной части GDI.
    >


    Я все таки думаю нужно различать местоположение поверхности.

    Вы согласны с тем, что если поверхность device - то рисует устройство, но не x86 код?

    А если GRE поверхность значит она в RAM - и рисовать может как x86 код (программный отрисовщик), либо использовать отражение видеопамяти на RAM память, что честно говоря менее эффективно чем использование VRAM.
  • Игорь Шевченко © (26.03.08 23:48) [182]
    oxffff ©   (26.03.08 23:30) [179]

    Давайте пойдем не от логики - мы все таки не на философском диспуте, Windows вполне конкретная программа, работает по вполне конкретным алгоритмам, их можно проверить. Вот от этого и пойдем.


    > А поскольку device формат может не является DIB форматом,
    >  то и получить его описание через вызов упомянутой функции
    > приводит к промаху.


    А что, в DC может сидеть объект, который нельзя опросить функцией GetObject ? Наверное его можно опросить другой функцией ?
  • oxffff © (26.03.08 23:54) [183]

    > А что, в DC может сидеть объект, который нельзя опросить
    > функцией GetObject ?


    Так я ваш пример поправил как раз на провале GetObject.

    >Наверное его можно опросить другой функцией ?

    Знаете скажите.
  • Игорь Шевченко © (26.03.08 23:55) [184]

    > Вы согласны с тем, что если поверхность device - то рисует
    > устройство, но не x86 код?


    Нет, не согласен.
    Это всего лишь формат растра.
    На растрах DDB может рисовать GDI, что он вполне успешно и делает.
  • oxffff © (26.03.08 23:58) [185]

    > Игорь Шевченко ©   (26.03.08 23:48) [182]


    GetObject(a,sizeof(b),@b);
    Дальше sysenter я естественно не добрался.
  • oxffff © (27.03.08 00:00) [186]

    > Игорь Шевченко ©   (26.03.08 23:55) [184]


    Скажите а где расположены device поверхности(в какой памяти)?
    И как туда (VRAM) доберется x86 код?
  • oxffff © (27.03.08 00:19) [187]

    > Наверное его можно опросить другой функцией ?


    HGDIOBJ

    The 24th bit position says whether it is a stock object or not.
    Как раз GetObject и валится на одном из таких.
  • Игорь Шевченко © (27.03.08 00:20) [188]
    oxffff ©   (27.03.08 00:00) [186]

    Если ты помнишь, разговор начался с того, имеет ли оконный DC буфер. Я сильно надеюсь, что мы уже убедились в том, что не имеет ?

    В противном случае я продолжаю ждать доказательств.

    Кстати: http://www.delphimaster.ru/books/978531800297/

    и http://www.dasbook.ru/index.php?book=290


    > Скажите а где расположены device поверхности(в какой памяти)?


    Что есть "device поверхности" ?
  • Игорь Шевченко © (27.03.08 00:23) [189]

    > 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)
  • oxffff © (27.03.08 00:29) [190]

    > ли ты помнишь, разговор начался с того, имеет ли оконный
    > DC буфер. Я сильно надеюсь, что мы уже убедились в том,
    > что не имеет ?


    С вами разговор начался с этого. С этим я согласен, в том смысле что нет у него персонального буфера, но есть общий и не один при отрисовке.
  • oxffff © (27.03.08 00:31) [191]
    01050050 shr 16

    gdi_objtypeb_bitmap      = 0x05,
  • oxffff © (27.03.08 00:36) [192]

    > Что есть "device поверхности" ?


    В моем понимании, это поверхность device формата расположенная в видеопамяти или отображенной  RAM памяти, доступная видеоадаптеру и над которой он(видеоадаптер) выполняет аппаратные операции.

    GRE поверхность поверхность RAM памяти, над которой выполняются операции программно, либо аппаратно в случае отображения (однако это менее эффективно чем аппаратные операции в видеопамяти)
  • Игорь Шевченко © (27.03.08 00:37) [193]
    oxffff ©   (27.03.08 00:31) [191]


    > 01050050 shr 16
    >
    > gdi_objtypeb_bitmap      = 0x05,


    Да, потому что GetCurrentObject(ADC, OBJ_BITMAP)

    осталось сделать shr 24 и убедиться, что бит stock object установлен.
  • oxffff © (27.03.08 00:39) [194]

    > Игорь Шевченко ©   (27.03.08 00:23) [189]


    Наша задача установить причину поведения Getobject.
    Я свое мнение озвучил. А где ваше? :)

    P.S. Пошел спать. Завтра(сегодня) я очень надеюсь продолжим изыскания.
    Может и Юаня успею прочитать, относящееся к теме.
  • oxffff © (27.03.08 00:41) [195]

    > Да, потому что GetCurrentObject(ADC, OBJ_BITMAP)


    Вообще то  OBJ_BITMAP=7.
  • Игорь Шевченко © (27.03.08 00:42) [196]
    oxffff ©   (27.03.08 00:41) [195]


    > Вообще то  OBJ_BITMAP=7.


    Это несвязанные константы. Типы handle GDI и типы выбираемых объектов.
    Опять же, Фэнь Юань. Я кстати ссылку на книжку дал.
  • oxffff © (27.03.08 00:48) [197]

    > Это несвязанные константы. Типы handle GDI и типы выбираемых
    > объектов.
    > Опять же, Фэнь Юань. Я кстати ссылку на книжку дал.


    Юань, Юань.  
    Google  HGDIOBJ structure.  :)

    Но вопрос о Getobject остается и о типе поверхности остается.
    Кстати а у tooltip_class32 какой интересно тип для которого Getobject отрабатывает.

    P.S. Все теперь точно спать.
  • Игорь Шевченко © (27.03.08 12:59) [198]

    > Кстати а у tooltip_class32 какой интересно тип для которого
    > Getobject отрабатывает.


    HBITMAP
  • oxffff © (27.03.08 13:32) [199]

    > Игорь Шевченко ©   (27.03.08 12:59) [198]


    :).

    Вид handle побитово.
 
Конференция "Прочее" » Двойная буфферизация(выдернуто из "Вакансия Delphi программист")
Есть новые Нет новых   [134433   +22][b:0.001][p:0.001]