vs 2010 C++:can i use texture1D and texture2D at the same program?

Started by
7 comments, last by nickme 11 years, 4 months ago
hi

i'd recently written a program about fractals. i would like to show a png file to the screen at the beginning of the program to illustrate the various key broad commands for using the program. in my fractal program, i used a raw file texture1D for palette for the fractals. because the splashscreen is 2d, when i ran the program, the color of my fractals is different. i wonder if that is the problem with my program or that opengl does not allow one to use both texture 1D and 2D at the same time.

thanks
Advertisement

is the problem with my program

Yes. There should be no issues using 1D,2D,3D,cube whatever textures concurrently :D
[source lang="cpp"]#include <math.h>
#include <stdio.h>
#include <gl/glut.h>
GLuint SplashScreen;

const GLint win_sizeX = 1024, win_sizeY = 1024;
const GLint w = 1024.0, h = 1024;
const GLdouble wleft = -win_sizeX *0.5, wright = win_sizeX *0.5, wtop = win_sizeY * 0.5, wbottom = - win_sizeY * 0.5;

void clear()
{
glClearColor(1.0, 1.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
}

GLuint LoadTexture2D( const char * filename, int width, int height)
{
GLuint texture;
FILE * file;

file = fopen( filename, "rb" );
if ( file == NULL ) {
system("PAUSE");
exit(1);
}

GLubyte * data = new unsigned char [width * height * 4];

fread( data, 1, width * height * 4, file );
fclose( file );
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures( 1, &texture );

glBindTexture( GL_TEXTURE_2D, texture );

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

delete [] data;
return texture;
}

void display_splash_screen(int time)
{
clear();
glEnable( GL_TEXTURE_2D );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBindTexture( GL_TEXTURE_2D, SplashScreen);

glBegin( GL_QUADS );

glTexCoord2d(0.0,0.0); glVertex2d(wleft, wtop);
glTexCoord2d(1.0,0.0); glVertex2d(wright, wtop);
glTexCoord2d(1.0,1.0); glVertex2d(wright, wbottom);
glTexCoord2d(0.0,1.0); glVertex2d(wleft, wbottom);

glEnd();
glFlush();
Sleep(time);
}

void init()
{
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
SplashScreen = LoadTexture2D("SplashScreen.raw", w, h);
}

void render() {
clear();
display_splash_screen(0);
}

void winReshapeFcn(GLint newWidth, GLint newHeight)
{
glutReshapeWindow(w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(wleft, wright, wbottom, wtop);
glMatrixMode(GL_MODELVIEW);
}

void processNormalKeys(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(0, 0);
glutInitWindowSize(win_sizeX, win_sizeY);
glutCreateWindow(" Texture testing ");

init();
glutIgnoreKeyRepeat(0);
glutReshapeFunc(winReshapeFcn);
glutDisplayFunc(render);
glutKeyboardFunc(processNormalKeys);

glutMainLoop();
glDeleteTextures(1, &SplashScreen);

return 0;
}
[/source]
hi

i copy and paste the program to a smaller program to test the 2d texture loading function. i include the source code for the program below. following that is the splashscreen that it suppose to render and finally the actual output from the program.

thank in advance.
apparrently, i can only attach one image at one time. here is the splash screen of the actual file. it seem i can not upload the raw file so i loaded the equivalent png file instead.
Is your .raw file a 32-bpp 1024x1024 image? If not, this can be expected to look wrong.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

hi mhagain:

i checked the dimension of the raw file with photo shop, it is 1024X1024. but i am not sure what the bpp is. how to find that out or change it? i originally created the splashscreen in png format, because i don't know how to load png file, i convert it to raw file with "total image converter" i found on the web.

thanks
hi

finally, i got the above program to works. however, when i added the LoadTexre2D to my fractals program, it messed up the color of my fractals when rendered after the display splash screen. i tried to put glLoadIdentity() and glPushMatrix and glPopMatrix between display as it to insulate the color buffer but the problem still persists. i know, that is not very smart.

what should i look at? is it because i used texture1D and texture2D?

any advice will be appreciated.
the following attached file show a image when i ran the fractal program without the splashscreen 2D texture. the next attachment show the fractal rendered with splashscreen 2D texture, it looks like a negative film.
hi,

i finally figured out what was wrong with my program. i did not but the glDisable(GL_TEXTURE_2D); after i finished using it. so when i used texture2D, i had the problem that it did.

This topic is closed to new replies.

Advertisement