Конференция "Игры" » glReadPixels и glReadBuffer [C++ Builder, QNX]
 
  • lead-in (18.02.12 16:13) [0]
    Есть VMWare симулятор BlackBerry PlayBook и уже реальный девайс - планшет Panda. На обоих установлена UNIX-подобная ОС QNX, графическая библиотека - OpenEGL (так понимаю "расширенный" OpenGL).
    Задача сделать скриншот экрана нарисованного OpenGL'ем. Для этого использую функцию glReadPixels, на BlackBerry она замечательно работает, а вот на Панде - выдаёт "чёрную" картинку, то есть все байты буфера якобы равны нулю.
    Читал что перед чтением буфера его сначала нужно указать с помощью glReadBuffer, но в заголовочных файлах OpenEGL этой функции нет, видимо в спецификацию она не включена.

    Может кто подсказать, есть ли ещё способы сделать скриншот кроме исп-ия glReadPixels? Наверняка это не единственный путь.

    Спасибо заранее.
  • lead-in (23.02.12 17:18) [1]
    если кому пригодится...

    1) Создать новую "пиксельную поверхность":

    EGLSurface eglSurface= 0;
    EGLint attributes[] = { EGL_WIDTH, <ширина>, EGL_NONE, EGL_HEIGHT, <высота>, EGL_NONE };
    eglSurface = eglCreatePbufferSurface(eglDisplay, eglConfig, attributes);

    2) Затем сделать эту поверхность текущей:
    eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);

    3) После этого отрисовка будет идти не на экран, а в новую поверхность и glReadPixels может считать данные буфера. Вызывать eglSwapBuffers не нужно, т. о., можно рендерить сцену прямо в файл, без отображения её на экран вообще.
 
Конференция "Игры" » glReadPixels и glReadBuffer [C++ Builder, QNX]
Есть новые Нет новых   [106964   +38][b:0.001][p:0.001]