SamplerImpl.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Gr/gl/SamplerImpl.h>
  6. #include <AnKi/Gr/Texture.h>
  7. namespace anki {
  8. void SamplerImpl::init(const SamplerInitInfo& sinit)
  9. {
  10. glGenSamplers(1, &m_glName);
  11. ANKI_ASSERT(m_glName);
  12. if(sinit.m_addressing == SamplingAddressing::REPEAT)
  13. {
  14. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_S, GL_REPEAT);
  15. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_T, GL_REPEAT);
  16. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_R, GL_REPEAT);
  17. }
  18. else if(sinit.m_addressing == SamplingAddressing::CLAMP)
  19. {
  20. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  21. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  22. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
  23. }
  24. else
  25. {
  26. ANKI_ASSERT(!"TODO");
  27. }
  28. // Set filtering type
  29. GLenum minFilter = GL_NONE;
  30. GLenum magFilter = GL_NONE;
  31. convertFilter(sinit.m_minMagFilter, sinit.m_mipmapFilter, minFilter, magFilter);
  32. glSamplerParameteri(m_glName, GL_TEXTURE_MIN_FILTER, minFilter);
  33. glSamplerParameteri(m_glName, GL_TEXTURE_MAG_FILTER, magFilter);
  34. #if ANKI_GL == ANKI_GL_DESKTOP
  35. if(sinit.m_anisotropyLevel > 1)
  36. {
  37. glSamplerParameteri(m_glName, GL_TEXTURE_MAX_ANISOTROPY_EXT, GLint(sinit.m_anisotropyLevel));
  38. }
  39. #endif
  40. if(sinit.m_compareOperation != CompareOperation::ALWAYS)
  41. {
  42. glSamplerParameteri(m_glName, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
  43. glSamplerParameteri(m_glName, GL_TEXTURE_COMPARE_FUNC, convertCompareOperation(sinit.m_compareOperation));
  44. }
  45. glSamplerParameteri(m_glName, GL_TEXTURE_MIN_LOD, sinit.m_minLod);
  46. glSamplerParameteri(m_glName, GL_TEXTURE_MAX_LOD, sinit.m_maxLod);
  47. }
  48. } // end namespace anki