Texture.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "wrapper/Texture.h"
  2. Texture::Texture(const TextureFormat& format) : format(format), texture(0) {
  3. glGenTextures(1, &texture);
  4. setNearestFilter();
  5. setRepeatWrap();
  6. }
  7. Texture::~Texture() {
  8. glDeleteTextures(1, &texture);
  9. }
  10. void Texture::setFilter(GLint param) {
  11. bind();
  12. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, param);
  13. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, param);
  14. }
  15. void Texture::setNearestFilter() {
  16. setFilter(GL_NEAREST);
  17. }
  18. void Texture::setLinearFilter() {
  19. setFilter(GL_LINEAR);
  20. }
  21. void Texture::setWrap(GLint param) {
  22. bind();
  23. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, param);
  24. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, param);
  25. }
  26. void Texture::setRepeatWrap() {
  27. setWrap(GL_REPEAT);
  28. }
  29. void Texture::setClampWrap() {
  30. setWrap(GL_CLAMP_TO_EDGE);
  31. }
  32. void Texture::setData(int width, int height, const void* data) {
  33. glBindTexture(GL_TEXTURE_2D, texture);
  34. glTexImage2D(GL_TEXTURE_2D, 0, format.internalformat, width, height, 0, format.format, format.type, data);
  35. }
  36. void Texture::bind() const {
  37. glBindTexture(GL_TEXTURE_2D, texture);
  38. }
  39. void Texture::bindTo(int index) const {
  40. glActiveTexture(GL_TEXTURE0 + index);
  41. bind();
  42. }