Операции инкремента лучше префиксные использовать, они производительнее. Кроме этого больше ничего не могу сказать.Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 190523
У тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.ты имеешь ввиду, так сделать?
Но это декремент. Инкремент в принципе уже везде был сделан, где идёт нагрузка.
Посмотреть вложение 190530
*(++BuffPos)
Добавил, прибавилось +- 3 фпс :)А у тебя буффер вообще очищается?
щас, пробую спасибоУ тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.
Советую сделать так:*(++BuffPos)
Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 190523
Спасибо огромноеВо первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])
Я считываю весь массив для получения всех пикселей.Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz