00001 #include "VImage.h"
00002 #include "VFramebufferObject.h"
00003
00004 #include "glew.h"
00005 #include "IL/il.h"
00006 #include "IL/ilu.h"
00007 #include "IL/ilut.h"
00008
00009 bool VImage::loadImage(std::string filename)
00010 {
00011 if(!VFramebufferObject::devIlInitialised)
00012 {
00013 VFramebufferObject::initialiseDevIl();
00014 }
00015
00016 deleteImage();
00017
00018 unsigned int ilImageHandle;
00019 ilGenImages(1, &ilImageHandle);
00020 ilBindImage(ilImageHandle);
00021 ilLoadImage(filename.c_str());
00022
00023 m_ImageHandle = ilutGLBindMipmaps();
00024
00025
00026 ilDeleteImages(1, &ilImageHandle);
00027 if(m_ImageHandle == 0)
00028 {
00029 return false;
00030 }
00031 return true;
00032 }
00033
00034 void VImage::deleteImage()
00035 {
00036 if(m_ImageHandle != 0)
00037 {
00038 glDeleteTextures(1,&m_ImageHandle);
00039 }
00040 }
00041
00042 void VImage::renderToLowerRightQuad()
00043 {
00044 glActiveTextureARB(GL_TEXTURE0_ARB);
00045 glEnable(GL_TEXTURE_2D);
00046 glBindTexture(GL_TEXTURE_2D,m_ImageHandle);
00047
00048 VFramebufferObject::getRenderToScreenProgram()->bind();
00049
00050 glUniform1i(VFramebufferObject::getRenderToScreenProgram()->getUniformLocation("mTexture"),0);
00051
00052 glBegin(GL_QUADS);
00053 glTexCoord2f(0.0f, 0.0f);
00054 glVertex3f(0.5f, -1.0f, -0.01f);
00055
00056 glTexCoord2f(1.0f, 0.0f);
00057 glVertex3f(1.0f, -1.0f, -0.01f);
00058
00059 glTexCoord2f(1.0f, 1.0f);
00060 glVertex3f(1.0f, -0.5f, -0.01f);
00061
00062 glTexCoord2f(0.0f, 1.0f);
00063 glVertex3f(0.5f, -0.5f, -0.01f);
00064 glEnd();
00065
00066 VFramebufferObject::getRenderToScreenProgram()->release();
00067
00068 glActiveTextureARB(GL_TEXTURE0_ARB);
00069 glBindTexture(GL_TEXTURE_2D, 0);
00070 glDisable(GL_TEXTURE_2D);
00071 }
00072
00073 void VImage::renderToLowerRightQuad( unsigned int m_ImageHandle )
00074 {
00075 glActiveTextureARB(GL_TEXTURE0_ARB);
00076 glEnable(GL_TEXTURE_2D);
00077 glBindTexture(GL_TEXTURE_2D,m_ImageHandle);
00078
00079 VFramebufferObject::getRenderToScreenProgram()->bind();
00080
00081 glUniform1i(VFramebufferObject::getRenderToScreenProgram()->getUniformLocation("mTexture"),0);
00082
00083 glBegin(GL_QUADS);
00084 glTexCoord2f(0.0f, 0.0f);
00085 glVertex3f(0.5f, -1.0f, -0.01f);
00086
00087 glTexCoord2f(1.0f, 0.0f);
00088 glVertex3f(1.0f, -1.0f, -0.01f);
00089
00090 glTexCoord2f(1.0f, 1.0f);
00091 glVertex3f(1.0f, -0.5f, -0.01f);
00092
00093 glTexCoord2f(0.0f, 1.0f);
00094 glVertex3f(0.5f, -0.5f, -0.01f);
00095 glEnd();
00096
00097 VFramebufferObject::getRenderToScreenProgram()->release();
00098
00099 glActiveTextureARB(GL_TEXTURE0_ARB);
00100 glBindTexture(GL_TEXTURE_2D, 0);
00101 glDisable(GL_TEXTURE_2D);
00102 }
00103
00104 void VImage::renderOuterScreen( unsigned int m_ImageHandle )
00105 {
00106 glActiveTextureARB(GL_TEXTURE0_ARB);
00107 glEnable(GL_TEXTURE_2D);
00108 glBindTexture(GL_TEXTURE_2D,m_ImageHandle);
00109
00110 VFramebufferObject::getRenderToScreenProgram()->bind();
00111
00112 glUniform1i(VFramebufferObject::getRenderToScreenProgram()->getUniformLocation("mTexture"),0);
00113
00114 glBegin(GL_QUADS);
00115 glTexCoord2f(0.0f, 0.0f);
00116 glVertex3f(-1.5f, -1.0f, -0.01f);
00117
00118 glTexCoord2f(1.0f, 0.0f);
00119 glVertex3f(1.0f, -1.0f, -0.01f);
00120
00121 glTexCoord2f(1.0f, 1.0f);
00122 glVertex3f(1.0f, -1.5f, -0.01f);
00123
00124 glTexCoord2f(0.0f, 1.0f);
00125 glVertex3f(-1.5f, -1.5f, -0.01f);
00126 glEnd();
00127
00128 VFramebufferObject::getRenderToScreenProgram()->release();
00129
00130 glActiveTextureARB(GL_TEXTURE0_ARB);
00131 glBindTexture(GL_TEXTURE_2D, 0);
00132 glDisable(GL_TEXTURE_2D);
00133 }