Jump to content
  • Advertisement
Sign in to follow this  
nickme

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

This topic is 2184 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
Advertisement
[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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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. Edited by nickme

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!