openGL可编程笔记四——支持多重纹理并封装


在编写的Shader中的变量与GPU插槽相对应,而在纹理设置时,有额外的一组插槽,叫做纹理单元。

在绑定纹理时,设置一个map容器, 表示某个名字的纹理在加载过后对应的纹理数据是什么

void Shader::SetTexture(const char*name, const char *imagePath) {
	auto iter = mUniformTextures.find(name);
	if (iter==mUniformTextures.end() ){
		GLint location = glGetUniformLocation(mProgram, name);
		if (location != -1) {
			UniformTexture* t = new UniformTexture;
			t->mLocation = location;
			t->mTexture = CreateTexture2DFromBMP(imagePath);
			mUniformTextures[name]=t;
		}
	}
	else {
		glDeleteTextures(1, &iter->second->mTexture);
		iter->second->mTexture= CreateTexture2DFromBMP(imagePath);
	}
} 


在画图之前 ,指定纹理数据的初始化操作如下::


纹理对象是指图片, 可以i通过

		glActiveTexture(GL_TEXTURE0 + iIndex);

来激活纹理一个纹理单元(从0开始);

之后通过glBind将某个纹理对象设置为当前纹理对象,并指派个这个纹理单元

		glBindTexture(GL_TEXTURE_2D, iter->second->mTexture);

之后通过glUnifrom1i表示 某个插槽需要从第几个纹理单元中采集纹理。

又因为插槽关联了Shader中的Sample2D,因此Sample2D知道去哪里采集纹理


代码如下:

https://github.com/ycb577114589/Shader_openGL/tree/master/Multi_Texture


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值