gl_FragColor и glReadPixels

Я все еще пытаюсь прочитать пиксели из фрагментного шейдера, и у меня есть несколько вопросов. Я знаю, что gl_FragColor возвращается с vec4, что означает RGBA, 4 канала. {{ 1}} После этого я использую glReadPixels для чтения FBO и записи его в данные

GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

. Это нормально работает, но действительно имеет проблемы со скоростью. Вместо этого я хочу просто читать RGB, поэтому игнорируйте альфа-каналы. Я попробовал:

GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);

вместо этого, но это не сработало. Я думаю, это потому, что gl_FragColor возвращает 4 канала, и, может быть, мне стоит что-то сделать перед этим? На самом деле, поскольку мое возвращенное изображение (gl_FragColor) имеет оттенки серого, я сделал что-то вроде

float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);

. Есть ли эффективный способ использовать glReadPixels вместо использования метода первых 4 каналов? Любое предложение? Кстати, это код opengl es 2.0.

5
задан user2168 1 December 2011 в 09:47
поделиться