Jump to content

  • Log In with Google      Sign In   
  • Create Account


eL_Pancho

Member Since 03 May 2012
Offline Last Active May 09 2012 05:46 PM

Topics I've Started

Texture fail OPENGL/SDL

03 May 2012 - 02:31 AM

I don´t know why the texture is not appearing at the screen, i ve tryid with GLUT and it works verywell, but i switch to SDL because i think it is a best event handler.

i can load the texture because i am using the same method that i used before with glut.




Here is my code:
#include "stdafx.h"
using namespace std;
//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//The frame rate
const int FRAMES_PER_SECOND = 60;
//The attributes of the square
const int SQUARE_WIDTH = 20;
const int SQUARE_HEIGHT = 20;
//pos
double left_pos = 0.0;
double up_pos   = 0.0;
//mov
double movimento = 1.0;
//Event handler
SDL_Event event;
unsigned int tex[100];
unsigned int loadTexture(const char* filename,int x,int y)
{
SDL_Surface* img = SDL_LoadBMP(filename);
unsigned int id;
glGenTextures(2,&id);
glBindTexture(GL_TEXTURE_2D,id);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,x,y,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,img->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
SDL_FreeSurface(img);
return id;
}
bool init_GL()
{
	//Set clear color
	glClearColor( 0, 0, 0, 0 );
	//Set projection
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1 );
	//Initialize modelview matrix
	glMatrixMode( GL_PROJECTION);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
  
	//If there was any errors
	if( glGetError() != GL_NO_ERROR )
	{
		return false;
	}

	//If everything initialized
	return true;
}
bool Init()
{
	//Initialize SDL
	if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
	{
		return false;  
	}
  
	//Create Window
	if( SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE | SDL_OPENGL ) == NULL )
	{
		return false;
	}
  
	//Initialize OpenGL
	if( init_GL() == false )
	{
		return false;  
	}
  
	//Set caption
	SDL_WM_SetCaption( "OpenGL Test", NULL );
	SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
	return true;  
}
void clean_up()
{
	//Quit SDL
	SDL_Quit();
}


void squareShow()
{

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,tex[0]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0,1.0);
	glVertex2f(100+left_pos,200+up_pos);glTexCoord2f(1.0,1.0);
	glVertex2f(200+left_pos,200+up_pos);glTexCoord2f(1.0,0.0);
	glVertex2f(200+left_pos,100+up_pos);glTexCoord2f(0.0,0.0);
	glVertex2f(100+left_pos,100+up_pos);

	glEnd();
}
int main( int argc, char* args[] )
{
  tex[0] = loadTexture("minecraft_s1.bmp",256,256);

  //initialize SDL
  SDL_Init(SDL_INIT_EVERYTHING);

	bool quit = false;
  
	if( Init() == false )
	{
		return 1;
	}

   bool left	= false;
   bool right   = false;
   bool up	  = false;
   bool down	= false;
  
  

while( quit == false )
{
	  
	  
	   if(up == true || down == true || left == true || right == true)
   {
  
	cout <<"X: "<<left_pos<<" Y: "<<up_pos<<endl;
   }
  
	  //EVENTS
	  while ( SDL_PollEvent(&event) )
		{
		
   if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
   {
	quit = true;
   }
	// left right move
	if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_d )
			{
			  right = true;
			}
	 if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_d )
			{
			  right = false;
			}
	  if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_a )
			{
			  left = true;
			}
	 if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_a )
			{
			  left = false;
			}
	   // up down move
	  if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_w )
			{
			  up = true;
			}
	 if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_w )
			{
			  up = false;
			}
	  if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_s )
			{
			  down = true;
			}
	 if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_s )
			{
			  down = false;
			}
		  if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_r )
			{
			  glClearColor(1,0,0,1);
			}

		}

  if(right == true)
   {
   left_pos = left_pos + movimento;
   }
  if(left == true)
   {
	left_pos = left_pos - movimento;
   }
  if(up == true)
   {
	up_pos = up_pos - movimento;
   }
  if(down == true)
   {
	up_pos = up_pos + movimento;
   }
   if( event.type == SDL_QUIT )
   {
				quit = true;
			}

  
	 //Clear the screen
   glClear( GL_COLOR_BUFFER_BIT );
  
	squareShow();
  
  

  glFlush();
	 //Update screen
	 SDL_GL_SwapBuffers();

}



   clean_up();

  return 0;
}

PARTNERS