#include <mitkGPGPU.h>
Public Member Functions | |
Texture (mitk::GPGPU::TextureFormat format, int width, int height, int depth=0) | |
~Texture () | |
void | ActivateAsSource (int unit) |
void | ActivateAsDestination () |
void | Upload (mitk::GPGPU::TextureFormat inputformat, const void *src) |
void | Download (mitk::GPGPU::TextureFormat inputformat, void *dst) |
int | GetWidth () |
int | GetHeigth () |
int | GetDepth () |
Definition at line 66 of file mitkGPGPU.h.
mitk::GPGPU::Texture::Texture | ( | mitk::GPGPU::TextureFormat | format, |
int | width, | ||
int | height, | ||
int | depth = 0 |
||
) |
Definition at line 73 of file mitkGPGPU.cpp.
References convertTextureFormatToInternalFormatGL(), GL_CLAMP_TO_EDGE, GL_NEAREST, GL_RGBA, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_R, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_UNSIGNED_BYTE, glActiveTexture, glBindTexture(), glGenFramebuffers, glGenTextures(), glTexImage2D(), glTexImage3D, glTexParameteri(), GPGPU_CHECKGLERR, and OPERATING_TEXTURE.
{ if(depth==0) glTarget=GL_TEXTURE_2D; else glTarget=GL_TEXTURE_3D; myFormat=format; myWidth=width; myHeight=height; myDepth=depth; GLuint handle; glGenTextures(1,&handle); glTextureHandle = handle; glActiveTexture(OPERATING_TEXTURE); glBindTexture(glTarget,glTextureHandle); GPGPU_CHECKGLERR << "allocating texture handle"; if(glTarget==GL_TEXTURE_2D) { glTexImage2D(GL_TEXTURE_2D,0,convertTextureFormatToInternalFormatGL(myFormat),width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,0); // glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); } else { glTexImage3D(GL_TEXTURE_3D,0,convertTextureFormatToInternalFormatGL(myFormat),width,height,depth,0,GL_RGBA,GL_UNSIGNED_BYTE,0); // glGenerateMipmap(GL_TEXTURE_3D); glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); } GPGPU_CHECKGLERR << "declaring texture format&dimensions"; glGenFramebuffers(1,&handle); glFBOHandle = handle; GPGPU_CHECKGLERR << "allocating framebuffer object"; }
mitk::GPGPU::Texture::~Texture | ( | ) |
Definition at line 129 of file mitkGPGPU.cpp.
References glDeleteFramebuffers, glDeleteTextures(), and GPGPU_CHECKGLERR.
{ GLuint handle; handle=glFBOHandle; glDeleteFramebuffers(1,&handle); GPGPU_CHECKGLERR << "deleting framebufferobject"; handle=glTextureHandle; glDeleteTextures(1,&handle); GPGPU_CHECKGLERR << "deleting texture handle"; }
void mitk::GPGPU::Texture::ActivateAsDestination | ( | ) |
Definition at line 150 of file mitkGPGPU.cpp.
References GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_FRAMEBUFFER, GL_FRAMEBUFFER_COMPLETE_EXT, GL_FRAMEBUFFER_EXT, GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT, GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT, GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT, GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT, GL_FRAMEBUFFER_UNSUPPORTED_EXT, GL_NONE, glBindFramebuffer, glCheckFramebufferStatusEXT, glDrawBuffers, glFramebufferTexture2D, glViewport(), GPGPU_CHECKGLERR, and GPGPU_ERROR.
{ static GLenum buffers[5][4] = { { GL_NONE, GL_NONE, GL_NONE, GL_NONE }, { GL_COLOR_ATTACHMENT0, GL_NONE, GL_NONE, GL_NONE }, { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_NONE, GL_NONE }, { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_NONE }, { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 }, }; glBindFramebuffer( GL_FRAMEBUFFER, glFBOHandle ); glDrawBuffers(4, buffers[1]); glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, glTarget,glTextureHandle,0); GPGPU_CHECKGLERR << "associating texture to framebufferobject"; int error = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); switch(error) { case GL_FRAMEBUFFER_COMPLETE_EXT: break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: GPGPU_ERROR << "Incomplete attachment\n";break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: GPGPU_ERROR << "Missing attachment\n";break; case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: GPGPU_ERROR << "Incomplete dimensions\n";break; case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: GPGPU_ERROR << "Incomplete formats\n";break; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: GPGPU_ERROR << "Incomplete draw buffer\n";break; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: GPGPU_ERROR << "Incomplete read buffer\n";break; case GL_FRAMEBUFFER_UNSUPPORTED_EXT: GPGPU_ERROR << "Framebufferobjects unsupported\n";break; default: GPGPU_ERROR << "unknown framebuffer status\n";break; } glViewport(0,0,myWidth,myHeight); GPGPU_CHECKGLERR << "setting viewport"; }
void mitk::GPGPU::Texture::ActivateAsSource | ( | int | unit ) |
Definition at line 142 of file mitkGPGPU.cpp.
References GL_TEXTURE0, glActiveTexture, glBindTexture(), and GPGPU_CHECKGLERR.
{ glActiveTexture(GL_TEXTURE0 + unit); glBindTexture(glTarget,glTextureHandle); GPGPU_CHECKGLERR << "binding texture to unit"; }
void mitk::GPGPU::Texture::Download | ( | mitk::GPGPU::TextureFormat | inputformat, |
void * | dst | ||
) |
Definition at line 216 of file mitkGPGPU.cpp.
References convertTextureFormatToFormatGL(), convertTextureFormatToTypeGL(), GL_TEXTURE_2D, glActiveTexture, glBindTexture(), glGetTexImage(), GPGPU_CHECKGLERR, and OPERATING_TEXTURE.
{ glActiveTexture(OPERATING_TEXTURE); glBindTexture(glTarget,glTextureHandle); if(glTarget==GL_TEXTURE_2D) { glGetTexImage( GL_TEXTURE_2D,0,convertTextureFormatToFormatGL(inputformat),convertTextureFormatToTypeGL(inputformat),dst); GPGPU_CHECKGLERR << "texture download to cpu"; } else { } }
int mitk::GPGPU::Texture::GetDepth | ( | ) |
Definition at line 70 of file mitkGPGPU.cpp.
{return myDepth;}
int mitk::GPGPU::Texture::GetHeigth | ( | ) |
Definition at line 69 of file mitkGPGPU.cpp.
{return myHeight;}
int mitk::GPGPU::Texture::GetWidth | ( | ) |
Definition at line 68 of file mitkGPGPU.cpp.
{return myWidth;}
void mitk::GPGPU::Texture::Upload | ( | mitk::GPGPU::TextureFormat | inputformat, |
const void * | src | ||
) |
Definition at line 197 of file mitkGPGPU.cpp.
References convertTextureFormatToFormatGL(), convertTextureFormatToTypeGL(), GL_TEXTURE_2D, GL_TEXTURE_3D, glActiveTexture, glBindTexture(), glTexSubImage2D(), glTexSubImage3D, GPGPU_CHECKGLERR, and OPERATING_TEXTURE.
{ glActiveTexture(OPERATING_TEXTURE); glBindTexture(glTarget,glTextureHandle); if(glTarget==GL_TEXTURE_2D) { glTexSubImage2D(GL_TEXTURE_2D,0,0,0,myWidth,myHeight,convertTextureFormatToFormatGL(inputformat),convertTextureFormatToTypeGL(inputformat),src); } else { glTexSubImage3D(GL_TEXTURE_3D,0,0,0,0,myWidth,myHeight,myDepth,convertTextureFormatToFormatGL(inputformat),convertTextureFormatToTypeGL(inputformat),src); } GPGPU_CHECKGLERR << "texture upload to gpu"; }