簡體   English   中英

我可以將一個紋理單位用於5種不同的2D紋理嗎

[英]Can I use one Texture unit for 5 different 2D textures

我知道OpenGL程序中可以有GL_MAX_TEXTURE_IMAGE_UNITS紋理單元。 但是,假設我只使用一個。 假設我有5個2D紋理。 我可以將它們“映射”到單個紋理單元(TEXTURE0)來渲染所有它們。 我的意思是我會這樣做:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//specify tex data and tex params for tex1

glBindTexture(GL_TEXTURE_2D, tex2);
//specify tex data and tex params for tex1

..依此類推,所有5種紋理

渲染循環:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//draw

glBindTexture(GL_TEXTURE_2D, tex2);
//draw

..依此類推,所有5種紋理

在片段着色器中,我僅使用1個sampler2d變量,該變量初始化為零(對於紋理單元0)

如果這不能正常工作,那么我應該使用5個不同的紋理單位( TEXTURE0, TEXTURE0+1, ....TEXTURE0+5 ),並將每個紋理“映射”到不同的紋理單位。

最重要的問題:如果我的第一種方法是正確的,我可以“映射”到一個Texture單元上多少個2D紋理(現在僅談論2D紋理)?

只要您不想在單個幾何圖形上同時使用多個紋理,這是完全可行的。 實際上,這是通常的事情,因為多重紋理和紋理單元的目的不是為不同的對象保留不同的紋理,而是為同一對象使用不同的紋理層。

將紋理單位想像成Photoshop中的圖層。

好吧,據我了解OpenGL紋理單元:

文本單元是着色器指向紋理進行采樣的一種方式。 如果着色器必須訪問多個紋理,則必須將它們分成不同的紋理單元。

在您的情況下,由於您似乎只需要同時使用1個紋理,因此glActiveTexture是無用的,僅讓我們讓Opengl使用默認的GL_TEXTURE0即可。

因此,是的,您的渲染循環是正確的。

紋理單位的限制是多少? 48歲以上,綽綽有余!

注意:請記住,OpenGL是一個狀態機,因此要配置多個紋理同時工作,您需要一種選擇它們的方法,這正是glActiveTexture所做的。

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM