Hey,
Ik ben momenteel bezig met een programma dat gebruik maakt van grote hoeveelheden afbeeldingen en functies adhv de invidiuele pixel waarden (volume rendering).
Nu merk ik echter dat het volgende erg traag gaat:
- De alpha waarden vaan meerdere PNG's opslaan in één lange array
- Een for loop met hierin een if-then operatie op iedere waarde in de lange array
Mijn C++ kennis is redelijk beperkt, en ik ben na vandaag nog niet veel verder gekomen met dit optimalizeren.
Mijn vraag is of dit te optimalizeren valt en hoe ik dit het beste aan kan pakken.
Bvd!
Ik ben momenteel bezig met een programma dat gebruik maakt van grote hoeveelheden afbeeldingen en functies adhv de invidiuele pixel waarden (volume rendering).
Nu merk ik echter dat het volgende erg traag gaat:
- De alpha waarden vaan meerdere PNG's opslaan in één lange array
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| char* chBuffer = new char[iImageWidth*iImageHeight*iImageCount]; int i = 0, index = 0; while(pos2) { std::vector<unsigned char> image; error = lodepng::decode(image, width, height, CString2String(Files.GetNextPathName(pos2))); // PNG inlezen in vector image for(int x = 0; x < iImageWidth; ++x) { for(int y = 0; y < iImageHeight; ++y) { index = x*iImageWidth + y; chBuffer[i*iImageWidth*iImageHeight + index] = image[index*4 + 3]; // Alpha waarde opslaan in lange array } } ++i; } |
- Een for loop met hierin een if-then operatie op iedere waarde in de lange array
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| int index = 0; for(int i = 0; i < iImageCount; ++i) { for(int x = 0; x < iImageWidth; ++x) { for(int y = 0; y < iImageHeight; ++y) { index = i*iImageWidth*iImageHeight + x*iImageWidth + y; chBuffer[index] = func(chBuffer[index]); } } } |
Mijn C++ kennis is redelijk beperkt, en ik ben na vandaag nog niet veel verder gekomen met dit optimalizeren.
Mijn vraag is of dit te optimalizeren valt en hoe ik dit het beste aan kan pakken.
Bvd!
-- All science is either physics or stamp collecting