Texture.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "wrapper/Texture.h"
  2. Texture::Texture(const TextureFormat& format, int maxMipMaps) : format(format), texture(0), maxMipMaps(maxMipMaps) {
  3. glGenTextures(1, &texture);
  4. setNearestFilter();
  5. setRepeatWrap();
  6. }
  7. Texture::Texture(int maxMipMaps) : Texture(TextureFormat::unknown(), maxMipMaps) {
  8. }
  9. Texture::~Texture() {
  10. glDeleteTextures(1, &texture);
  11. }
  12. void Texture::setFormat(const TextureFormat& tf) {
  13. format = tf;
  14. }
  15. void Texture::setFilter(GLint minParam, GLint maxParam) {
  16. bind();
  17. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minParam);
  18. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, maxParam);
  19. }
  20. void Texture::setNearestFilter() {
  21. if(maxMipMaps > 0) {
  22. setFilter(GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST);
  23. } else {
  24. setFilter(GL_NEAREST, GL_NEAREST);
  25. }
  26. }
  27. void Texture::setLinearFilter() {
  28. if(maxMipMaps > 0) {
  29. setFilter(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR);
  30. } else {
  31. setFilter(GL_LINEAR, GL_LINEAR);
  32. }
  33. }
  34. void Texture::setWrap(GLint param) {
  35. bind();
  36. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, param);
  37. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, param);
  38. }
  39. void Texture::setRepeatWrap() {
  40. setWrap(GL_REPEAT);
  41. }
  42. void Texture::setClampWrap() {
  43. setWrap(GL_CLAMP_TO_EDGE);
  44. }
  45. void Texture::setData(int width, int height, const void* data) {
  46. bind();
  47. glTexImage2D(GL_TEXTURE_2D, 0, format.internalformat, width, height, 0, format.format, format.type, data);
  48. if(maxMipMaps > 0) {
  49. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
  50. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxMipMaps);
  51. glGenerateMipmap(GL_TEXTURE_2D);
  52. }
  53. }
  54. void Texture::bind() const {
  55. glBindTexture(GL_TEXTURE_2D, texture);
  56. }
  57. void Texture::bindTo(int index) const {
  58. glActiveTexture(GL_TEXTURE0 + index);
  59. bind();
  60. }