Аннотация:
Начиная с Windows 2000, компания Microsoft включила в состав операционной системы поддержку окон, созданных с расширенным стилем WS_EX_LAYERED. В результате стало возможным очень просто создавать окна с различной степенью прозрачности, объявлять прозрачные (для данного окна) цвета и так далее. Все это достигается при помощи двух функций WinAPI: SetLayeredWindowAttributes и UpdateLayeredWindow.
Однако когда автор попробовал работать с OpenGL-контекстом, результата, в смысле прозрачности окон, удалось добиться далеко не сразу. Эта статья рассказывает о том, как работать с OpenGL в полупрозрачных окнах.
bAlpha – степень прозрачности окна. При bAlpha, равном нулю, окно делается полностью прозрачным. При bAlpha, равном 255 (0xff), окно становится совершенно непрозрачным.
Либо стоит упомянуть стандартный термин Альфа-канал, либо сказать, что bAlpha – степень НЕпрозрачности окна.
Например, если указать
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0x0, LWA_COLORKEY)
то прозрачным окажутся только те части окна, которые закрашены в чёрный цвет.
Наоборот, если будет указано
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0x0, LWA_COLORKEY)
то прозрачными окажутся только те части, которые закрашены белым цветом.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Сапронов Андрей Юрьевич, Вы писали:
Ох как давно это было.
A>Либо стоит упомянуть стандартный термин Альфа-канал,
Альфа канал? Это лучше для текстур применять.
либо сказать, что bAlpha – степень НЕпрозрачности окна.
Согласен. Как по смыслу, так и по переводу термина opacity.
Хотя... прозрачность звучит лучше. Это конечно субъективно.
A>
A>Например, если указать
A>SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0x0, LWA_COLORKEY)
A>то прозрачным окажутся только те части окна, которые закрашены в чёрный цвет.
A>Наоборот, если будет указано
A>SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0x0, LWA_COLORKEY)
A>то прозрачными окажутся только те части, которые закрашены белым цветом.
A>Очепятки?
Да конечно. Дело в том, что между написанием статьи и ее выходом прошел немалый срок. Более полугода. Видимо какие то заминики в редакции. Так получилось, что моя и издательская версия не совпадают. Последние мои изменения внесены не были...
У меня это так:
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0x0, LWA_COLORKEY)
Здравствуйте, Сапронов Андрей Юрьевич, Вы писали: САЮ>Статья:
К сожалению, рендереинг в контекст в памяти происходит исключительно через software OpenGL реализацию.
Соответвенно версия доступна только 1.1 и прощай скорость и полезные расширения...
А вот рендеринг ч\з PBuffer — другое дело...
Здравствуйте, siv, Вы писали:
siv>Здравствуйте, Сапронов Андрей Юрьевич, Вы писали: САЮ>>Статья:
siv>К сожалению, рендереинг в контекст в памяти происходит исключительно через software OpenGL реализацию.
Да. Это так. siv>А вот рендеринг ч\з PBuffer — другое дело...
А что такое PBuffer
Re[3]: WS_EX_LAYERED и OpenGL
От:
Аноним
Дата:
08.10.04 11:34
Оценка:
siv>>А вот рендеринг ч\з PBuffer — другое дело... D>А что такое PBuffer
Pixel buffer...
См. WGL_ARB_pbuffer на http://oss.sgi.com/projects/ogl-sample/registry/
Поддерживают практически все адаптеры, за исключением некоторого "ацтоя" (например, S3 Graphics KM400/MMX/K3D 1.2)
Я пытаюсь создать прозрачное окно на основе АТЛ класса CAxWindow (контейнер для Ах-контролов). Но оно ну ни как не хочет принимать ExStyle. Вот пример кода:
Здравствуйте, mihauzen, Вы писали:
M>Здравствуйте, Сапронов Андрей Юрьевич, Вы писали:
M>...про WS_EX_LAYERED и OpenGL.
M>Я пытаюсь создать прозрачное окно на основе АТЛ класса CAxWindow (контейнер для Ах-контролов). Но оно ну ни как не хочет принимать ExStyle. Вот пример кода:
M>
D>Однако не забывайте, что скорость у такого рода приложений на порядок меньше, чем у “чистого” OpenGL.
То есть, получается чисто софтварный рендеринг, так? И ни какой HW акселерации. Если так, то смысл всего этого действа весьма сомнителен.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[2]: Раз уж подняли тему из глубины веков...
От:
Аноним
Дата:
14.07.06 21:49
Оценка:
MS>То есть, получается чисто софтварный рендеринг, так? И ни какой HW акселерации. Если так, то смысл всего этого действа весьма сомнителен.
Есть пример как можно это сделать с полной 3D акселлерацией. Только исходник довольно большой, не знаю
можно ли его постить здесь, сервер загрузить файл не дает. Если интересно, пиши. Как-нибудь договоримся.