Я все еще пытаюсь прочитать пиксели из фрагментного шейдера, и у меня есть несколько вопросов.Я знаю, что gl_FragColor возвращает с vec4, что означает RGBA, 4 канала.После этого я использую 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.