9 void boxFilterScanline(
float* dst,
14 auto s = 1.f / (2.f*radius + 1.f);
15 auto n =
static_cast<uint32_t
>(radius);
19 for (uint32_t k = 1; k <= n; k++) {
24 for (uint32_t i = 0; i < N; i++) {
26 if (i + n + 1 < N) sum += (1.f - f)*src[i + n + 1];
27 if (i + n + 2 < N) sum += f*src[i + n + 2];
28 if (i - n < N) sum -= (1.f - f)*src[i - n];
29 if (i - n - 1 < N) sum -= f*src[i - n - 1];
35void Blur::BoxFilterPassXTask::operator()()
37 for (uint32_t k = a; k < b; k++) {
38 for (uint32_t j = 0; j < size.y; j++) {
39 for (uint32_t i = 0; i < size.x; i++) {
40 ptrA[i] = src[(k*size.y + j)*size.x + i];
42 for (uint32_t l = 0; l < iterations; l++) {
43 boxFilterScanline(ptrB, ptrA, size.x, radius);
44 std::swap(ptrA, ptrB);
46 for (uint32_t i = 0; i < size.x; i++) {
47 dst[(k*size.y + j)*size.x + i] = ptrA[i];
53void Blur::BoxFilterPassYTask::operator()()
55 for (uint32_t k = a; k < b; k++) {
56 for (uint32_t i = 0; i < size.x; i++) {
57 for (uint32_t j = 0; j < size.y; j++) {
58 ptrA[j] = src[(k*size.y + j)*size.x + i];
60 for (uint32_t l = 0; l < iterations; l++) {
61 boxFilterScanline(ptrB, ptrA, size.y, radius);
62 std::swap(ptrA, ptrB);
64 for (uint32_t j = 0; j < size.y; j++) {
65 dst[(k*size.y + j)*size.x + i] = ptrA[j];
71void Blur::BoxFilterPassZTask::operator()()
73 for (uint32_t j = a; j < b; j++) {
74 for (uint32_t i = 0; i < size.x; i++) {
76 for (uint32_t k = 0; k < size.z; k++) {
77 ptrA[k] = src[(k*size.y + j)*size.x + i];
79 for (uint32_t l = 0; l < iterations; l++) {
80 boxFilterScanline(ptrB, ptrA, size.z, radius);
81 std::swap(ptrA, ptrB);
83 for (uint32_t k = 0; k < size.z; k++) {
84 dst[(k*size.y + j)*size.x + i] = ptrA[k];
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....