Problem rendering a texture using ARB multitexture and texture rectangle extensions

Started by
-1 comments, last by _NoISeR_ 16 years, 1 month ago
Hello to all, I'm novice on GPU programming. I've spent the last two days trying to deal with this, but can't understand what is happening. I'm just trying to render the AD (Absolute Difference) of two images using a very simple Cg shader. The problem is that when I try to render the image to a framebuffer it shows a black image, and all the previous textures are "destroyed" (black). If I use the shader to render directly to the screen it works!! I've pasted the code of my display function. Hope that you can help me. If you need I can bring you the full program. Thank you!! -------------------------------------------------------------------------------- GLuint ADTexture; // First we generate the texture glGenTextures(1, &ADTexture); // Bind the first framebuffer glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBuffer); // Attach texture to the frame buffer glBindTexture(GL_TEXTURE_RECTANGLE_NV, ADTexture); // Set properties to the output texture glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, iWinWidth, iWinHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_RECTANGLE_NV,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_NV,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Attach the texture to the color buffer of the previous defined FBO glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_NV, ADTexture, 0); // Check if the FBO is valid isValidFBO(); // Render the AD texture cgGLEnableProfile(cgFragmentProfile); // Bind Cg Program cgGLBindProgram(cgFragmentSAD); // Bind the two input textures glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_RECTANGLE_NV); glBindTexture(GL_TEXTURE_RECTANGLE_NV, initialTextures[0]); glActiveTextureARB(GL_TEXTURE1_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_NV, initialTextures[1]); glEnable(GL_TEXTURE_RECTANGLE_NV); // Clear Color And Depth Buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Draw the rectangular area glBegin(GL_QUADS); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0, 0.0); glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0, 0.0); glVertex3f(0.0, 0.0, -1.0); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0, iWinHeight); glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0, iWinHeight); glVertex3f(0.0, 1.0, -1.0); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, iWinWidth, iWinHeight); glMultiTexCoord2fARB( GL_TEXTURE1_ARB, iWinWidth, iWinHeight); glVertex3f(1.0, 1.0, -1.0); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, iWinWidth, 0.0); glMultiTexCoord2fARB( GL_TEXTURE1_ARB, iWinWidth, 0.0); glVertex3f(1.0, 0.0, -1.0); glEnd(); glActiveTextureARB(GL_TEXTURE0_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); glActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); // Disable the fragment profile cgGLDisableProfile(cgFragmentProfile); // After, display the rendered AD texture glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Enable the texture rectanlge extension glEnable(GL_TEXTURE_RECTANGLE_NV); // Bind the texture glBindTexture(GL_TEXTURE_RECTANGLE_NV, initialTextures[0]); // Draw the rectangular area glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex3f(0.0, 0.0, -1.0); glTexCoord2i(0, iWinHeight); glVertex3f(0.0, 1.0, -1.0); glTexCoord2i(iWinWidth, iWinHeight); glVertex3f(1.0, 1.0, -1.0); glTexCoord2i(iWinWidth , 0); glVertex3f(1.0, 0.0, -1.0); glEnd(); // Disable the texture rectanlge extension glDisable(GL_TEXTURE_RECTANGLE_NV); // Swap display buffers glutSwapBuffers();

This topic is closed to new replies.

Advertisement