//-------------------------------------------------------- void CRenderTextureLayer::update(float dt) { // 帧更新纹理偏移量 static float fOffsetLen = 0.0f; fOffsetLen += MOVE_PIXELS_PER_SECOND * dt; MoveTexture( fOffsetLen ); }
/** * \brief Loads a texture from an image file and fits into a GL-compatible size. * \param fileName The name of the image file. * \param filtering True for linear filtering, false for nearest-neighbor. * \param realW Returns the real width of the texture. * \param realH Returns the real height of the texture. * \return The OpenGL texture ID. */ long SDLGL_LoadTextureFromFileBestFit( std::string fileName, bool filtering, unsigned long &realW, unsigned long &realH ) { GLuint theTexture; SDL_Surface *loadSurface, *theSurface, *convertedSurface; Uint32 rmask, gmask, bmask, amask; loadSurface = IMG_Load( fileName.c_str() ); if ( loadSurface ) { #if SDL_BYTEORDER == SDL_BIG_ENDIAN rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x000000ff; #else rmask = 0x000000ff; gmask = 0x0000ff00; bmask = 0x00ff0000; amask = 0xff000000; #endif theSurface = SDL_CreateRGBSurface( SDL_SWSURFACE | SDL_SRCALPHA, NextPowerOfTwo(loadSurface->w), NextPowerOfTwo(loadSurface->h), 32, rmask, gmask, bmask, amask ); SDL_FillRect( theSurface, NULL, SDL_MapRGBA( theSurface->format, 0,0,0,255 ) ); convertedSurface = SDL_ConvertSurface( loadSurface, theSurface->format, SDL_SWSURFACE | SDL_SRCALPHA ); MoveTexture( convertedSurface, theSurface ); } else theSurface = NULL; if ( theSurface ) { glGenTextures( 1, &theTexture); glBindTexture( GL_TEXTURE_2D, theTexture ); if ( filtering ) { glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); } else { glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); } realW = loadSurface->w; realH = loadSurface->h; glTexImage2D( GL_TEXTURE_2D, 0, 4, theSurface->w, theSurface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, theSurface->pixels ); SDL_FreeSurface( theSurface ); SDL_FreeSurface( loadSurface ); SDL_FreeSurface( convertedSurface ); return theTexture; } else return 0; // GLspeak for "no texture" }