Итак, если исходить из того, что начал Найл Райан, если производительность является проблемой, вы можете сделать еще один шаг вперед, оптимизировав математику и поместив ее в класс.
Итак, начнем с математики. Напомним, что 800 можно записать в степени 2 как:
800 = 512 + 256 + 32 = 2^5 + 2^8 + 2^9
Таким образом, мы можем написать нашу функцию адресации как:
int index = y << 9 + y << 8 + y << 5 + x;
Итак, если мы заключим все в хороший класс, мы получим:
class ZBuffer
{
public:
const int width = 800;
const int height = 800;
ZBuffer()
{
for(unsigned int i = 0, *pBuff = zbuff; i < width * height; i++, pBuff++)
*pBuff = 0;
}
inline unsigned int getZAt(unsigned int x, unsigned int y)
{
return *(zbuff + y << 9 + y << 8 + y << 5 + x);
}
inline unsigned int setZAt(unsigned int x, unsigned int y, unsigned int z)
{
*(zbuff + y << 9 + y << 8 + y << 5 + x) = z;
}
private:
unsigned int zbuff[width * height];
};