ура, не совсем понятно, что вы пытаетесь достичь. Вы можете либо пытаться сделать прозрачный шрифт поверх какой-либо другой геометрии OpenGL, либо вы хотите визуализировать содержимое окна с помощью OpenGL и сделать части окна прозрачными (чтобы вы могли видеть окна за ним).
Чтобы сделать окно прозрачным, необходимо использовать:
// Set WS_EX_LAYERED on this window
SetWindowLong(hwnd,
GWL_EXSTYLE,
GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// Make this window transparent
int transparentColor = RGB(x, y, z);
SetLayeredWindowAttributes(hwnd, transparentColor, 255, LWA_COLORKEY);
Это включает так называемую цветовую маркировку в окне, что означает, что все, что отрисовывается с использованием RGB (x, y, z), становится прозрачным, и окно не видно в этих частях. Обратите внимание, что эта прозрачность является двоичной, она либо полностью прозрачна, либо полностью непрозрачна. Кроме того, вам нужно использовать GDI для рендеринга в ваше окно. Это означает, что либо вообще не используйте OpenGL, а используйте функцию вроде BitBlt () или StretchBlt (), либо используйте OpenGL для рендеринга в P-буфер (или в FBO, объект framebuffer), затем используйте glReadPixels () для копирования вывод, а затем снова используйте BitBlt () для отображения результатов с использованием GDI. В вашем случае, когда вы пытаетесь отобразить фрагмент текста, вам может быть лучше без использования OpenGL.
Итак, в вашем примере вы могли бы сделать черный цвет прозрачным, т.е. x = y = z = 0, не использовать OpenGL и создать вместо него растровое изображение, не зависящее от устройства (DIB), используя CreateDIBSection (), заполнить его изображением вместо передача его в glDrawPixels () и рендеринг в окно с помощью BitBlt ().