glTexSubImage2d在添加粒子系统后不工作(每个粒子上都有纹理)



我们很高兴地使用glTexSubImage2d每隔几帧更新一个纹理,在我们的GL初始化中使用glTexImage2d初始化。在添加粒子系统后,每个粒子本身都有纹理,我们的四边形显示glTexSubImage2d纹理就不显示了。

粒子的纹理是PNG,所以我们使用SDL将PNG加载到SDL表面,然后使用glTexImage2d将PNG绑定到纹理。

如果我们将quad的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 );
}

设置quad的纹理:

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()和如上设置quad的纹理。

任何想法?

我们愚蠢地将VIDEO_WIDTH设置为纹理的高度,将VIDEO_HEIGHT设置为纹理的宽度。

如果浪费了大家的时间,我很抱歉。

谁能锁定或删除这个或其他东西吗?

谢谢,

Infinitifizz

最新更新