2
0

SamplerImpl.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. {
  9. void SamplerImpl::init(const SamplerInitInfo& sinit)
  10. {
  11. glGenSamplers(1, &m_glName);
  12. ANKI_ASSERT(m_glName);
  13. if(sinit.m_addressing == SamplingAddressing::REPEAT)
  14. {
  15. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_S, GL_REPEAT);
  16. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_T, GL_REPEAT);
  17. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_R, GL_REPEAT);
  18. }
  19. else if(sinit.m_addressing == SamplingAddressing::CLAMP)
  20. {
  21. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  22. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  23. glSamplerParameteri(m_glName, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
  24. }
  25. else
  26. {
  27. ANKI_ASSERT(!"TODO");
  28. }
  29. // Set filtering type
  30. GLenum minFilter = GL_NONE;
  31. GLenum magFilter = GL_NONE;
  32. convertFilter(sinit.m_minMagFilter, sinit.m_mipmapFilter, minFilter, magFilter);
  33. glSamplerParameteri(m_glName, GL_TEXTURE_MIN_FILTER, minFilter);
  34. glSamplerParameteri(m_glName, GL_TEXTURE_MAG_FILTER, magFilter);
  35. #if ANKI_GL == ANKI_GL_DESKTOP
  36. if(sinit.m_anisotropyLevel > 1)
  37. {
  38. glSamplerParameteri(m_glName, GL_TEXTURE_MAX_ANISOTROPY_EXT, GLint(sinit.m_anisotropyLevel));
  39. }
  40. #endif
  41. if(sinit.m_compareOperation != CompareOperation::ALWAYS)
  42. {
  43. glSamplerParameteri(m_glName, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
  44. glSamplerParameteri(m_glName, GL_TEXTURE_COMPARE_FUNC, convertCompareOperation(sinit.m_compareOperation));
  45. }
  46. glSamplerParameteri(m_glName, GL_TEXTURE_MIN_LOD, sinit.m_minLod);
  47. glSamplerParameteri(m_glName, GL_TEXTURE_MAX_LOD, sinit.m_maxLod);
  48. }
  49. } // end namespace anki