當GLSL採樣紋理是這樣的:OpenGL的採樣,沒有質感結合
vec4 color = texture(mySampler, myCoords);
如果沒有質感勢必mySampler,顏色似乎總是(0,0,0, 1)。
這是標準行爲嗎?或者在某些實現中可能是undefined?我在規格中找不到任何東西。
當GLSL採樣紋理是這樣的:OpenGL的採樣,沒有質感結合
vec4 color = texture(mySampler, myCoords);
如果沒有質感勢必mySampler,顏色似乎總是(0,0,0, 1)。
這是標準行爲嗎?或者在某些實現中可能是undefined?我在規格中找不到任何東西。
這確實爲「綁定」沒有這樣的事 - 你只是綁定到哪個被稱爲紋理0。根據維基的OpenGL(http://www.opengl.org/wiki/OpenGL_Objects)初始紋理對象,
You are strongly encouraged to think of texture 0 as a non-existent texture.
最終,您將在着色器中獲得的值取決於當時Texture對象0中發生的情況。我真的不能找到除了一個forum post東西,實際上說,這應該是什麼:
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)紋理。
內森是正確的(但我太新/名聲太低而無法投票)。
我已經/當然/看到在某些OpenGL ES平臺上,使用未綁定紋理會在屏幕上顯示亂碼(隨機內存的圖形內存)。你不能相信所有的驅動程序供應商遵循規範。
永遠不會引用未綁定的OpenGL對象或狀態。
請參閱http://stackoverflow.com/questions/12570379/opengl-es-2-0-glsl-texture2d-return-value-when-unbound。我無法找到規範中的任何內容,但據我所知它是未定義的。我已經看到它在不同的實現中做了不同的事情! –