您的位置:首页 > 运维架构

OpenGL 纹理代理

2010-03-26 10:03 302 查看
一直认为,对于同一台电脑(尤其是显卡不变),OpenGL所支持的纹理图像是不变的。 但是,实际并非如此。 在同一个程序里,假如此时支持1024×768的纹理, 那么换了一个context, 就可能支持800×600的纹理了。 所以每次使用之前,都要测试一下。 关于测试的方法, OpenGL红宝书上给出了使用纹理代理的方法。

void drawtext()
{
GLint maxTexWidth = 0;
GLint maxTexHeight = 0;
glTexImage2D(GL_PROXY_TEXTURE_2D, 0, 2, allocw, alloch,0, GL_ALPHA,GL_UNSIGNED_BYTE, NULL); /*allocw是希望支持的纹理宽度,alloch是希望支持的纹理高度。此处最后一个参数设为NULL,不需要给出真正的data*/
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &maxTexWidth); /*如果maxTexWidth==0,就说明当前Context不支持allocw的宽度*/
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &maxTexHeight);/*如果maxTexHeight==0,就说明当前Context不支持alloch的高度*/
if (( maxTexWidth == 0 ) || ( maxTexHeight == 0 )) {
/*此处代码应为拆分纹理。 把纹理的高度减半或者宽度减半。 然后递归调用本函数*/
return;
}
/*以下应为正常使用纹理代码*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: