NoiseTexture.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <png.h>
  2. #include <vector>
  3. #include <cstdlib>
  4. #include "client/rendering/NoiseTexture.h"
  5. NoiseTexture::NoiseTexture(u32 width, u32 height)
  6. {
  7. glGenTextures(1, &texture);
  8. glBindTexture(GL_TEXTURE_2D, texture);
  9. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  10. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  11. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  12. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  13. std::vector<float> data;
  14. for(u32 x = 0; x < width; x++)
  15. {
  16. for(u32 y = 0; y < height; y++)
  17. {
  18. data.push_back(getRandom());
  19. data.push_back(getRandom());
  20. data.push_back(getRandom());
  21. }
  22. }
  23. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, height, 0, GL_RGB, GL_FLOAT, data.data());
  24. }
  25. NoiseTexture::~NoiseTexture()
  26. {
  27. glDeleteTextures(1, &texture);
  28. }
  29. void NoiseTexture::bind(unsigned int index) const
  30. {
  31. glActiveTexture(GL_TEXTURE0 + index);
  32. glBindTexture(GL_TEXTURE_2D, texture);
  33. }
  34. float NoiseTexture::getRandom() const
  35. {
  36. float r = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
  37. return r * 2.0f - 1.0f;
  38. }