1#include "backend_base.h"
2#include <base/system.h>
3#include <engine/gfx/image_manipulation.h>
4
5uint8_t *CCommandProcessorFragment_GLBase::Resize(const uint8_t *pData, int Width, int Height, int NewWidth, int NewHeight, int BPP)
6{
7 return ResizeImage(pImageData: pData, Width, Height, NewWidth, NewHeight, BPP);
8}
9
10bool CCommandProcessorFragment_GLBase::Texture2DTo3D(uint8_t *pImageBuffer, int ImageWidth, int ImageHeight, size_t PixelSize, int SplitCountWidth, int SplitCountHeight, uint8_t *pTarget3DImageData, int &Target3DImageWidth, int &Target3DImageHeight)
11{
12 Target3DImageWidth = ImageWidth / SplitCountWidth;
13 Target3DImageHeight = ImageHeight / SplitCountHeight;
14
15 const size_t FullImageWidth = (size_t)ImageWidth * PixelSize;
16
17 for(int Y = 0; Y < SplitCountHeight; ++Y)
18 {
19 for(int X = 0; X < SplitCountWidth; ++X)
20 {
21 for(int Y3D = 0; Y3D < Target3DImageHeight; ++Y3D)
22 {
23 int DepthIndex = X + Y * SplitCountWidth;
24
25 size_t TargetImageFullWidth = (size_t)Target3DImageWidth * PixelSize;
26 size_t TargetImageFullSize = (size_t)TargetImageFullWidth * Target3DImageHeight;
27 ptrdiff_t ImageOffset = (ptrdiff_t)(((size_t)Y * FullImageWidth * (size_t)Target3DImageHeight) + ((size_t)Y3D * FullImageWidth) + ((size_t)X * TargetImageFullWidth));
28 ptrdiff_t TargetImageOffset = (ptrdiff_t)(TargetImageFullSize * (size_t)DepthIndex + ((size_t)Y3D * TargetImageFullWidth));
29 mem_copy(dest: pTarget3DImageData + TargetImageOffset, source: pImageBuffer + (ptrdiff_t)(ImageOffset), size: TargetImageFullWidth);
30 }
31 }
32 }
33
34 return true;
35}
36