添加粒子系统后glTexSubImage2d不起作用(每个粒子上有纹理)

时间:2011-07-28 10:39:44

标签: opengl textures texture-mapping texture2d glteximage2d

我们很高兴使用glTexSubImage2d来更新每隔几帧的纹理,这些纹理已在我们的GL初始化中用glTexImage2d初始化。在粒子系统中添加每个粒子纹理本身后,我们的四边形显示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()以及如上所述设置四边形纹理。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

很抱歉,如果我们浪费了任何人的时间。

任何人都可以锁定或删除此内容或其他内容吗?

谢谢,

Infinitifizz