#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";
}
1.7.2