我目前正在编写一个使用2D OpenGL输出和sdl的游戏,并尝试使用SDL_ttf加载文本。然而,由于普通的OpenGL不支持非2次幂纹理,我必须用空白像素填充文本。我听说有一个名为GL_ARB_texture_non_power_of_two
的OpenGL扩展可以启用非2次幂纹理。截至今天,有多少张卡片与此扩展不兼容,我该如何加载它?
我目前正在编写一个使用2D OpenGL输出和sdl的游戏,并尝试使用SDL_ttf加载文本。然而,由于普通的OpenGL不支持非2次幂纹理,我必须用空白像素填充文本。我听说有一个名为GL_ARB_texture_non_power_of_two
的OpenGL扩展可以启用非2次幂纹理。截至今天,有多少张卡片与此扩展不兼容,我该如何加载它?
任何OpenGL 2.0或更高版本都支持非幂次方纹理,这意味着几乎2005年之后制造的所有显卡都支持。这包括GeForce FX和6xxx及以上系列。还包括Radeon 9500及以上系列(尽管在Radeon HD系列之前,Radeons不允许NPOTs拥有mipmaps)。
顺便说一句,我希望你不要试图将每个字符放入单独的纹理中,因为从性能角度来看那样做非常糟糕。将所需使用的所有字符放在一个纹理中,并挑选出需要的字符即可。甚至不需要使用NPOT。
至于mrazza关于仅使用POTs的评论,对于NPOT纹理,我们没有必要害怕(只要硬件支持)。虽然在性能上可能会有轻微的惩罚,但对于明显情况下无法进行填充或缩放的情况(渲染目标等),使用它们是毫无问题的,不应该视为首选。