OGL纹理之纹理代理

本文介绍了如何利用OpenGL的纹理代理技术来判断当前实现支持的纹理大小和格式。通过创建纹理代理并查询纹理状态变量,可以确定指定大小和格式是否被支持。
摘要由CSDN通过智能技术生成
对OGL程序员,纹理的大小是非常重要的,OGL纹理资源一般都是有限的。OGL提供了一种特殊的纹理目标称为代理纹理(Texture Proxy),用于判断当前的OGL实现在某种特定的纹理大小下是否支持某种特定的纹理格式。纹理代理存在一个主要的限制: 纹理代理回答的问题是一个指定格式的纹理大小是否能够被加载到纹理内存中。并不能回答是否有足够的能力处理所请求的纹理,比如不能确定这个纹理系统是否有足够的资源让其成为常驻纹理。

简单的判断当前OGL实现支持的纹理大小

 GLint texMaxSize;
     // intel OGL3.1大小为8192 pixel,AMD OGL4.2 为16342 pixel
	glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texMaxSize); 
	GLint texMax3DSize;
 // intel OGL3.1 为2048 pixel,AMD OGL4.2 为8192 pixel
	glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &texMax3DSize);
       GLint texMaxCubeSize;
   // intel OGL3.1大小为8192 pixel,AMD OGL4.2 为16342 pixel
	glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &texMaxCubeSize);

判断在指定的大小和格式下,当前的OGL实现支持否

因为纹理单元字节数越大,纹理宽高就会等比变化。要求有边框的纹理和mipmap纹理会进一步减少可用内存的数量。

1.创建纹理代理

glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight,
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
// 立方体纹理代理
/*glTexImage2D(GL_PROXY_TEXTURE_CUBE_MAP, 0, GL_RGBA, checkImageWidth, checkImageHeight,
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);*/

2.用glGetTexLevelParameter*()查询纹理状态变量的值

如果OGL没有足够资源容纳这个纹理代理,表示宽度,高度,边框宽度,以及level,纹理提取成分interna
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值