2014-03-27 42 views
0

對於標準OpenGL紋理,濾波狀態是紋理的一部分,並且在創建紋理時必須被定義。這導致代碼如:創建多重採樣紋理正確

glGenTextures(1,&_texture_id); 
glBindTexture(GL_TEXTURE_2D,_texture_id); 
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
glTexImage2D(...); 

這很好用。我正在嘗試製作多重採樣紋理(用於FBO)。代碼非常相似:

glGenTextures(1,&_texture_id); 
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE,_texture_id); 
glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
glTexImage2DMultisample(...); 

我使用的是調試上下文,以及與此代碼的第一glTexParameterf(...)呼叫的原因:產生

GL_INVALID_ENUM錯誤。多重採樣紋理目標不支持採樣器狀態

我不知道這是什麼意思。請注意,多重採樣紋理僅支持最近的過濾。我正在指定這一點。我注意到,對於一些電話(尤其是glTexParameterf(...))時,GL_TEXTURE_2D_MULTISAMPLE不是文檔中上市的輸入(如果他們確實無效,不只是忘了確實會解釋無效枚舉錯誤)。但是,如果它不被接受,那麼我應該如何設置最近的過濾?

+1

我沒有使用過多重採樣紋理,但我的理解是,因爲只有最近的過濾支持,你不需要進行設置。你的代碼在沒有調用'glTexParameterf'的情況下工作嗎? – GuyRT

+0

它的確如此。如果你可以找到一個來源,發佈回答,我會接受。 – imallett

回答

2

你並不需要設置過濾最近因爲多重採樣紋理根本過濾。該specification(第8.10節)確實列表GL_TEXTURE_2D_MULTISAMPLEglTexParameteri一個有效的目標(你應該使用它,而不是glTexParameterf整數參數),但可能出現的錯誤中列出:

產生

的INVALID_ENUM錯誤,如果目標是要麼TEXTURE_2D_MULTISAMPLE 或TEXTURE_2D_MULTISAMPLE_ARRAY,並且PNAME是從表23.18任何採樣 狀態。