2017-08-18 81 views
0

我正在閱讀有關samplemask的gles spec。我如何理解OpenGL ES規範中的樣本掩碼?

有一個關於samplemask我無法理解的段落。以下是該規範的片段。

當狀態指定對於給定的片段的多個片段着色器 調用,對於任何單個片段 着色器調用樣本掩碼可以指定用於該片段覆蓋採樣的子集。在 這種情況下,與每個覆蓋樣本對應的位將被精確設置爲一個 片段着色器調用。

有人可以幫給我一個例子,或者幫助我明白了嗎?我與部分

感謝「碎片的覆蓋樣本的一個子集」相當混亂。

回答

0

樣品掩模(也被稱爲覆蓋掩碼)定義了在像素樣本內的原語被光柵化,並且其已存活任何早ZS測試。如果每個像素只有一個樣本(不論是否渲染碎片),這並沒有多大意義,但是如果您使用多重採樣,則每個像素會有多個樣本點。在三角形的邊緣,光柵化可能僅擊中4個樣本中的3個,並具有覆蓋掩碼b0111,其指示將哪些樣本寫入幀緩衝區。

對於多樣本反鋸齒,您只執行一個片段着色器每個像素的調用,而不考慮覆蓋掩碼,以便片段將具有(在我們的示例中)覆蓋掩碼b0111

如果您使用的採樣率在陰影的OpenGL ES 3.x中,你將執行3個片段着色器調用,每個樣品的打擊,所以也要覆蓋掩碼b0001b0010b0100,每寫一個子具有唯一片段顏色的像素中的像素樣本。

+0

感謝您的答案,因爲「當國家指定一個給定的片段多個片段着色器調用」,這是否意味着當sampleshading啓用,並對於給定的片段,如果3 4的樣品光柵化後擊中的一部分,「多個片段着色器調用「意味着每個樣本需要3次調用?如果我在片段着色器中有以下定義。 'fs_out_color = vec4(1.0,0.0,0.0,1.0);'。這將爲每個樣本寫入1.0? – james

+0

每個樣本最多隻能有一次調用,但使用MSAA時,每個像素會有多個樣本,因此如果您啓用了採樣率陰影和多采樣幀緩衝,則每個像素可能會有多個調用。 – solidpixel