glTexSubImage2d не работает после добавления в систему частиц (с текстурами на каждой частице) - PullRequest
1 голос
/ 28 июля 2011

Мы с радостью использовали 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

1 Ответ

0 голосов
/ 29 июля 2011

Тупо мы установили VIDEO_WIDTH на высоту текстуры и VIDEO_HEIGHT на ширину текстуры.

Извините, если мы зря потратили время.

Может кто-нибудь заблокировать это или удалить это или что-нибудь?

Спасибо

Infinitifizz

...