Jump to content

  • Log In with Google      Sign In   
  • Create Account

Texture fail OPENGL/SDL


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 eL_Pancho   Members   -  Reputation: 100

Like
0Likes
Like

Posted 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;
}


Sponsor:

#2 DemonRad   Members   -  Reputation: 290

Like
0Likes
Like

Posted 03 May 2012 - 02:51 AM

pretty common error. You are loading a texture without any GL context active. Try to load after SDL initialization and window creation.

A side note. Why are you using
glGenTextures(2,&id)

it should be

glGenTextures(1,&id)

since you have
uint32 id;

and not
uint32 id[2];

of course your case will work anyway but is a bit inconsistent generating 2 names and then using only 1, and even if you have
uint32 id[2];

that's wrong since you are returning just only 1 name. In a scenario where you are loading/unloading many textures there will be a resource leak (the resource in that case are the names). So after loading/unloading 2^31-1 textures you end up available names ^^ (and that is just the best thing that can happen)

Edited by DemonRad, 03 May 2012 - 03:05 AM.

Peace and love, now I understand really what it means! Guardian Angels exist! Thanks!


#3 www.gamegugu.com   Members   -  Reputation: 73

Like
0Likes
Like

Posted 03 May 2012 - 02:58 AM

hi, if you gave up to use GLUT, you may ignore many little things, for example, how did you deal with your camera? have you focus the camera on the stuff you want to show?

#4 DemonRad   Members   -  Reputation: 290

Like
0Likes
Like

Posted 03 May 2012 - 03:02 AM

cross posting should be avoided. Anyway I answered you in your topic in OpenGL forum.

http://www.gamedev.net/topic/624401-texture-doesn%c2%b4t-work-opengl-sdl/

Peace and love, now I understand really what it means! Guardian Angels exist! Thanks!


#5 Brother Bob   Moderators   -  Reputation: 8631

Like
0Likes
Like

Posted 03 May 2012 - 03:29 AM

Yeah, don't cross post. Merged the topics into one since there were replies in both threads already.

#6 eL_Pancho   Members   -  Reputation: 100

Like
0Likes
Like

Posted 03 May 2012 - 03:45 AM

I´m sorry about the cross posting thing, but i did not know where should i post my doubt, talking about it , its working, was that DemonRad mentioned before, loading the texture after the initialization of SDL and the window, thank you for your kindness :D

#7 xXDreamXx   Members   -  Reputation: 114

Like
0Likes
Like

Posted 03 May 2012 - 01:19 PM

Did you get the answer to your question?




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS