- void ShaderBlurMeanFilter::init(void) {
 - // Load texture from file
 - loadTexture("TmpTex1.bmp", &tmpTex1);
 - loadTexture("TmpTex2.bmp", &tmpTex2);
 - std::string vertShaderSource;
 - std::string fragShaderSource;
 - const char* tmpVertShaderSource;
 - const char* tmpFragShaderSource;
 - GLint result = -1;
 - GLenum status;
 - /* ****** *
 - * Pass 0 *
 - * ****** */
 - // Init vertex Shader
 - vertShaderPass0 = glCreateShader(GL_VERTEX_SHADER);
 - vertShaderSource = loadShader("Shader/Pass0.vert");
 - tmpVertShaderSource = vertShaderSource.c_str();
 - glShaderSourceARB(vertShaderPass0, 1, &tmpVertShaderSource, NULL);
 - glCompileShaderARB(vertShaderPass0);
 - result = -1;
 - glGetShaderiv(vertShaderPass0, GL_COMPILE_STATUS, &result);
 - if(GL_FALSE == result) {
 - GLchar errorMessage[1024];
 - glGetShaderInfoLog(vertShaderPass0, 1024, NULL, errorMessage);
 - std::cout << "Can't compile vertex shader:" << errorMessage << std::endl;
 - exit(-1);
 - }
 - // Init fragment Shader
 - fragShaderPass0 = glCreateShader(GL_FRAGMENT_SHADER);
 - fragShaderSource = loadShader("Shader/Pass0.frag");
 - tmpFragShaderSource = fragShaderSource.c_str();
 - glShaderSourceARB(fragShaderPass0, 1, &tmpFragShaderSource, NULL);
 - glCompileShaderARB(fragShaderPass0);
 - result = -1;
 - glGetShaderiv(fragShaderPass0, GL_COMPILE_STATUS, &result);
 - if(GL_FALSE == result) {
 - GLchar errorMessage[1024];
 - glGetShaderInfoLog(fragShaderPass0, 1024, NULL, errorMessage);
 - std::cout << "Can't compile fragment shader:" << errorMessage << std::endl;
 - exit(-1);
 - }
 - // Shader programm
 - shaderProgramHandlePass0 = glCreateProgram();
 - glAttachShader(shaderProgramHandlePass0, vertShaderPass0);
 - glAttachShader(shaderProgramHandlePass0, fragShaderPass0);
 - glLinkProgramARB(shaderProgramHandlePass0);
 - //FBO
 - glGenFramebuffersEXT(1, &fboPass0);
 - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboPass0);
 - glGenRenderbuffersEXT(1, &fboDepthBufferPass0);
 - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fboDepthBufferPass0);
 - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, 1024, 1024);
 - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fboDepthBufferPass0);
 - glGenTextures(1, &renderResultPass0);
 - glBindTexture(GL_TEXTURE_2D, renderResultPass0);
 - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
 - glGenerateMipmapEXT(GL_TEXTURE_2D);
 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, renderResultPass0, 0);
 - status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
 - if(GL_FRAMEBUFFER_COMPLETE_EXT != status) {
 - std::cout << "FBO Pass0 Error!" << std::endl;
 - exit(-1);
 - }
 - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 - }
 - void ShaderBlurMeanFilter::renderToScreen(void) {
 - int uniformLocation0 = -1;
 - int uniformLocation1 = -1;
 - // Set uniform variablen
 - uniformLocation0 = glGetUniformLocationARB(shaderProgramHandlePass0, "tmpTex1");
 - if(-1 == uniformLocation0) {
 - std::cout << "Can't find tmpTex1 in Pass0" << std::endl;
 - }
 - glActiveTexture(GL_TEXTURE0);
 - glBindTexture(GL_TEXTURE_2D, tmpTex1);
 - glUniform1iARB(uniformLocation0, 0);
 - uniformLocation1 = glGetUniformLocationARB(shaderProgramHandlePass0, "tmpTex2");
 - if(-1 == uniformLocation1) {
 - std::cout << "Can't find tmpTex2 in Pass0" << std::endl;
 - }
 - glActiveTexture(GL_TEXTURE1);
 - glBindTexture(GL_TEXTURE_2D, tmpTex2);
 - glUniform1iARB(uniformLocation1, 1);
 - // Use shader
 - glUseProgram(shaderProgramHandlePass0);
 - // Render to fboPass0
 - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboPass0);
 - glPushAttrib(GL_VIEWPORT_BIT);
 - glViewport(0, 0, 1024, 1024);
 - glBegin(GL_QUADS);
 - glMultiTexCoord2f(GL_TEXTURE0, 0.0, 0.0);
 - glMultiTexCoord2f(GL_TEXTURE1, 0.0, 0.0);
 - glVertex2f(-1.7f, -1.7f);
 - glMultiTexCoord2f(GL_TEXTURE0, 0.0, 1.0);
 - glMultiTexCoord2f(GL_TEXTURE1, 0.0, 1.0);
 - glVertex2f(-1.7f, 1.7f);
 - glMultiTexCoord2f(GL_TEXTURE0, 1.0, 1.0);
 - glMultiTexCoord2f(GL_TEXTURE1, 1.0, 1.0);
 - glVertex2f(1.7f, 1.7f);
 - glMultiTexCoord2f(GL_TEXTURE0, 1.0, 0.0);
 - glMultiTexCoord2f(GL_TEXTURE1, 1.0, 0.0);
 - glVertex2f(1.7f, -1.7f);
 - glEnd();
 - glPopAttrib();
 - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 - // Render to screen
 - glUseProgram(NULL);
 - glActiveTexture(GL_TEXTURE0);
 - glBindTexture(GL_TEXTURE_2D, renderResultPass0);
 - glEnable(GL_TEXTURE_2D);
 - glBegin(GL_QUADS);
 - glTexCoord2f(0.0, 0.0);
 - glVertex2f(-1.7f, -1.7f);
 - glTexCoord2f(0.0, 1.0);
 - glVertex2f(-1.7f, 1.7f);
 - glTexCoord2f(1.0, 1.0);
 - glVertex2f(1.7f, 1.7f);
 - glTexCoord2f(1.0, 0.0);
 - glVertex2f(1.7f, -1.7f);
 - glEnd();
 - glDisable(GL_TEXTURE_2D);
 - glBindTexture(GL_TEXTURE_2D, 0);
 - }
 
