mudlord
not banned.
    
Posts: 507
Joined: Feb 2009
Reputation: 5
|
RE: Image Processing Algorithms
Heheheh, ran into a interesting optimization problem.....
Code:
void post_process_cpu()
{
glPushMatrix();
glLoadIdentity();
glTranslatef(0.0,0.0f,-4.0f);
glColor3f(1.0f,1.0f,1.0f);
//RGB-888, 32 bits
GLuint scratchtex;
int bufsize = window_width * window_height * 4;
int pitch = window_width*4;
unsigned char* ImageBuffer = (unsigned char*)malloc(bufsize);
glDisable(GL_TEXTURE_2D);
glReadPixels ( 0, 0, window_width, window_height, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char*)ImageBuffer);
//do 2xSai/HQ2X/bloom/whatever on ImageBuffer
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &scratchtex);
glBindTexture(GL_TEXTURE_2D, scratchtex);
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexImage2D( GL_TEXTURE_2D, 0, 3, window_width, window_height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, ImageBuffer);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDeleteTextures(1, &scratchtex);
free(ImageBuffer);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
I know, unoptimized.
As I said, I worked out a way.
Render the scene into a 512*512 viewport, then copy the texture. However, for some odd reason, I do not know, the texture in the rendered scene is off centre, by exactly half (only half the image is displayed). Any help with the usage of glViewport and the tex coords would be great. Unfortunately, I lost the code in the past thats perfect for scaling textures according to aspect ratio, viewport size and texture size.
|
|