我们很高兴使用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()以及如上所述设置四边形纹理。
有什么想法吗?
答案 0 :(得分:0)
愚蠢的是,我们将VIDEO_WIDTH设置为纹理的高度,将VIDEO_HEIGHT设置为纹理的宽度。
很抱歉,如果我们浪费了任何人的时间。
任何人都可以锁定或删除此内容或其他内容吗?
谢谢,
Infinitifizz