Мы с радостью использовали glTexSubImage2d для обновления текстуры каждые несколько кадров, которые были инициализированы с помощью glTexImage2d в нашей инициализации GL.После добавления в систему частиц с каждой текстурированной самой частицей наш квад, показывающий, что текстура glTexSubImage2d не отображается.
Текстуры частиц имеют формат PNG, поэтому мы используем SDL для загрузки PNG на поверхность SDL, а затем glTexImage2d:используется для привязки PNG к текстуре.
Если мы изменим вызов glTexSubImage2d четырехъядерного вызова на вызов glTexImage2d, который показывает текстура, но это крайне неэффективно и сокращает частоту кадров как минимум вдвое, и поэтому лучше использовать glTexSubImage2dкак это было раньше).
Кто-нибудь знает, почему мы не можем использовать glTexSubImage2d?
Ниже приведены соответствующие фрагменты кода для инициализации и привязки текстур:
Загрузка в текстуру частицы
//Load smoke texture
SDL_Surface *surface;
SDL_Surface *alpha_image;
if( (surface = IMG_Load("smoke_particle.png")))
{
SDL_PixelFormat *pixf = SDL_GetVideoSurface()->format;
alpha_image = SDL_CreateRGBSurface( SDL_SWSURFACE, surface->w, surface->h, 32, pixf->Bmask, pixf->Gmask, pixf->Rmask, pixf->Amask );
SDL_SetAlpha(surface,0,0);
SDL_BlitSurface( surface, NULL, alpha_image, NULL );
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0,
GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels );
}
Настройка текстуры квада:
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texVid);
glBindTexture(GL_TEXTURE_2D, texVid);
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, 3, VIDEO_WIDTH, VIDEO_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
Единственные вызовы в initGL ()это включение GL_TEXTURE_2D, GL_BLEND, настройка glBlendFunc () и настройка текстуры квада, как указано выше.
Любая идеяs