По сути, я делаю какую-то обработку изображений, используя прямоугольник размером с экран, состоящий из двух треугольников и фрагментный шейдер, который выполняет всю обработку.Фактический эффект - это что-то вроде анимации, поскольку он зависит от единой переменной, которая называется current_frame
.
. Я очень заинтересован в измерении производительности в терминах "MPix / s".Я делаю что-то вроде этого:
/* Setup all necessary stuff, including: */
/* - getting the location of the `current_frame` uniform */
/* - creating an FBO, adding a color attachment */
/* and setting it as the current one */
double current_frame = 0;
double step = 1.0f / NUMBER_OF_ITERATIONS;
tic(); /* Start counting the time */
for (i = 0; i < NUMBER_OF_ITERATIONS; i++)
{
glUniform1f(current_frame_handle, current_frame);
current_frame += step;
glDrawArrays(GL_TRIANGLES, 0, NUMBER_OF_INDICES);
glFinish();
}
double elapsed_time = tac(); /* Get elapsed time in seconds */
/* Calculate achieved pixels per second */
double pps = (OUT_WIDTH * OUT_HEIGHT * NUMBER_OF_ITERATIONS) / elapsed_time;
/* Sanity check by using reading the output into a buffer */
/* using glReadPixels and saving this buffer into a file */
Что касается теории, есть ли что-то не так с моей концепцией?
Кроме того, у меня сложилось впечатление, что glFinish()
намобильное оборудование не обязательно ожидает предыдущие вызовы рендеринга и может выполнять некоторые оптимизации.
Конечно, я всегда могу заставить сделать это, выполнив glReadPixels()
после каждого розыгрыша, но это будетдовольно медленно, чтобы это не помогло.
Не могли бы вы посоветовать мне, насколько уместен мой сценарий тестирования и есть ли что-то еще, что можно сделать.