簡體   English   中英

OpenGL采樣沒有紋理綁定

[英]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.

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