Skip to main content
GameDev.net gamedev.net
🔒 Locked

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

Started by nickme Nov 23, 2012 at 4:20 AM 7 replies 1.9k views
Original Post
nickme
nickme
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
nickme
nickme
[source lang="cpp"]#include
#include
#include
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.
nickme
nickme
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.
21st Century Moose
21st Century Moose
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. 
nickme
nickme
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
nickme
nickme
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.
nickme
nickme
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.
nickme
nickme
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.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.