Guest User

Untitled

a guest
Oct 10th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include "ShadowMap.h"
  2.  
  3. ShadowMap::ShadowMap(vec2 size, vec2 pixelOffset){
  4.     m_size = size;
  5.     m_pixelOffset = pixelOffset;
  6.  
  7.     glGenTextures(1, &m_texture);
  8.     glBindTexture(GL_TEXTURE_2D, m_texture);
  9.  
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  12.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  13.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  14.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
  15.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
  16.     glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
  17.    
  18.     glTexImage2D(GL_TEXTURE_2D,
  19.                  0,
  20.                  GL_DEPTH_COMPONENT,
  21.                  GLsizei(m_size.x),
  22.                  GLsizei(m_size.y),
  23.                  0,
  24.                  GL_DEPTH_COMPONENT,
  25.                  GL_UNSIGNED_BYTE,
  26.                  NULL);
  27.  
  28.     glBindTexture(GL_TEXTURE_2D, 0);
  29.  
  30.     glGenFramebuffers(1, &m_fbo); // FBO erstellen
  31.     glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
  32.  
  33.     glDrawBuffer(GL_NONE);
  34.     glReadBuffer(GL_NONE);
  35.  
  36.     glFramebufferTexture2D(GL_FRAMEBUFFER,
  37.                            GL_DEPTH_ATTACHMENT,
  38.                            GL_TEXTURE_2D,
  39.                            m_texture,
  40.                            0);
  41.        
  42.     if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
  43.         cerr<<"Framebuffer could not be initalized!"<<endl;
  44.     }
  45.  
  46.     glBindFramebuffer(GL_FRAMEBUFFER, 0);
  47. }
  48.  
  49. ShadowMap::~ShadowMap(){
  50.     glDeleteBuffers(1, &m_texture);
  51.     glDeleteBuffers(1, &m_fbo);
  52.  
  53.     delete &m_size;
  54.     delete &m_pixelOffset;
  55. }
  56.  
  57. void ShadowMap::updateTexture(vec2 v){
  58.     m_size = v;
  59.  
  60.     glBindTexture(GL_TEXTURE_2D, m_texture);
  61.  
  62.     glTexImage2D(GL_TEXTURE_2D,
  63.                  0,
  64.                  GL_DEPTH_COMPONENT,
  65.                  GLsizei(m_size.x),
  66.                  GLsizei(m_size.y),
  67.                  0,
  68.                  GL_DEPTH_COMPONENT,
  69.                  GL_UNSIGNED_BYTE,
  70.                  NULL);
  71.  
  72.     glBindTexture(GL_TEXTURE_2D, 0);
  73. }
  74.  
  75. void ShadowMap::updateTexture(float x, float y){
  76.     updateTexture(vec2(x, y));
  77. }
  78.  
  79. void ShadowMap::setPixelOffset(vec2 v){
  80.     m_pixelOffset = v;
  81. }
  82.  
  83. void ShadowMap::setPixelOffset(float x, float y){
  84.     setPixelOffset(vec2(x, y));
  85. }
  86.  
  87. GLuint ShadowMap::getTextureID(){
  88.     return m_texture;
  89. }
  90.  
  91. GLuint ShadowMap::getFBO(){
  92.     return m_fbo;
  93. }
  94.  
  95. vec2 ShadowMap::getTextureSize(){
  96.     return m_size;
  97. }
  98.  
  99. float ShadowMap::getTextureWidth(){
  100.     return m_size.x;
  101. }
  102.  
  103. float ShadowMap::getTextureHeight(){
  104.     return m_size.y;
  105. }
  106.  
  107. vec2 ShadowMap::getPixelOffset(){
  108.     return m_pixelOffset;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment