[英]OpenGL Sampling with no texture bound
在GLSL中對紋理進行采樣時,如下所示:
vec4 color = texture(mySampler, myCoords);
如果沒有綁定到mySampler的紋理,則顏色似乎總是( 0,0,0,1 )。
這是標准行為嗎? 或者在某些實現中可能未定義 ? 我在規格中找不到任何東西。
實際上沒有“未綁定”這樣的東西 - 你只是綁定到初始紋理對象,稱為紋理0.根據OpenGL維基( http://www.opengl.org/wiki/OpenGL_Objects ),
You are strongly encouraged to think of texture 0 as a non-existent texture.
最終,您將在着色器中獲得的值取決於當時紋理對象0中發生的情況。 我真的找不到任何東西,除了一個論壇帖子實際上說這應該是什么:
The texture 0 represents an actual texture object, the default texture.
All textures start out as 1x1 white textures.
我當然不相信在所有GPU驅動程序中保持一致,你可能會將它初始化為全零,或者它可能被認為是不完整的紋理,在這種情況下,OpenGL規范(至少2.0及更高版本)說:
If a fragment shader uses a sampler whose associated texture object is not
complete, the texture image unit will return (R, G, B, A) = (0, 0, 0, 1).
......所以,最明智的做法似乎是“不要這樣做”。 如果要運行采樣器,請確保有一個有效的(非零id)紋理綁定。
內森是正確的(但我太新/聲譽太低,不能upvote)。
我有/當然/看到在某些OpenGL ES平台上,使用未綁定的紋理會在屏幕上呈現垃圾(圖形內存的隨機內容)。 您不能相信所有驅動程序供應商都遵循該規范。
永遠不會引用未綁定的OpenGL對象或狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.