2014-10-16 4 views
-3

Есть ли у кого-нибудь опыт использования библиотеки freeimage для сохранения буфера opengl?Почему я всегда получаю черное изображение при попытке сохранить буфер opengl с помощью freeimage libarary?

Вот мой код:

void screenshot(const char *ptr){ 
    GLint viewPort[4]; 
    glGetIntegerv(GL_VIEWPORT, viewPort); 
    GLubyte *pixels=new GLubyte[3*winWidth*winHeight]; 
    glPixelStorei(GL_PACK_ALIGNMENT, 1); 
    glReadPixels(0, 0, viewPort[2],viewPort[3], GL_RGB, GL_UNSIGNED_BYTE, pixels); 
    FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels,viewPort[2], viewPort[3],3*viewPort[2] 
    ,24,FI_RGBA_RED, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK,false); 
    FreeImage_Save(FIF_BMP, image, ptr, 0); 
    FreeImage_Unload(image); 
    delete pixels; 
} 

Почему я всегда получаю черное изображение?

+0

Вы вообще пробовали отлаживать? Попробуйте проверить varles 'pixels' после вызова' glReadPixels'. Убедитесь, что вы вызываете это после рисования своих объектов, а не сразу после 'glClear'. –

+0

да, вы правы, это происходит неправильно, спасибо –

ответ

0

Вы не задаете, с какого буфера читать. Если вы хотите сделать снимок экрана после буфер обмена, то вы должны прочитать из переднего буфера. Если вы хотите сделать снимок экрана до, буферный своп, прочитанный из заднего буфера.

+0

, но как я могу прочитать передний буфер, просто добавьте функцию glreadbuffer (GL_FRONT) перед использованием функции скриншота? –

+0

@XiaojunZhao: Да, именно так вы это делаете. – datenwolf

 Смежные вопросы

  • Нет связанных вопросов^_^