2017-08-08 340 views
0

我想顯示使用兩個簡單GLSL着色器在全窗口圖像:如何找出glEnable(GL_MULTISAMPLE)是否適用於我的紋理?

頂點着色器:

#version 330 

layout (location = 0) in vec3 aPos; 
layout (location = 1) in vec2 aTexCoord; 

out vec3 ourColor; 
out vec2 TexCoord; 

void main() 
{ 
    TexCoord = aTexCoord; 
    gl_Position = vec4(aPos, 1.0); 
} 

和片段着色器:

#version 330 

uniform sampler2D tex0; // loading the texture here 

in vec3 TexCoord; // texture coordinates 
out vec4 fColor; // fragment shader output 

void main(){ 
    fColor = texture2D(tex0,TexCoord); 
} 

在OpenGL的代碼,OpenGL的期間屬性設置,我執行

glEnable(GL_MULTISAMPLE); 

我在線閱讀,如果驅動程序支持,OpenGL將只執行多重採樣。

反正在OpenGL中我們可以確認上面的調用是否有效? 或者有無論如何,我們可以找出我的機器顯卡是否支持此調用?

+0

我不知道這取決於驅動程序的功能。這絕對取決於渲染目標是否支持多重採樣,但這與驅動程序沒有直接關係。 – BDL

+0

我被檢查一些示例性代碼來執行這一點,我跨越這個文件傳來: [例如碼(https://learnopengl.com/code_viewer.php?code=advanced/anti_aliasing_multisampling) 在該搜索** glEnable(GL_MULTISAMPLE)**。 有一個評論提及其驅動程序的基礎。 有沒有辦法確認渲染目標是否支持多重採樣? –

+0

從第一個角度來看,我沒有看到任何與你的鏈接中的粗體文本相似的東西。我看到的唯一說明是關於是否默認啓用多重採樣。如果你的窗口系統可以給你一個多采樣窗口/ backbuffer和一個OpenGL上下文> 1.3,那麼multisampling必須工作。 – BDL

回答

1

在一般情況下,看看您的實現是否支持多重採樣很容易。

您可以通過兩種方式獲得多重採樣:多重採樣默認幀緩衝器或多重採樣FBO。後者只能由您明確爲您的FBO創建多重採樣圖像。我想你可以告訴你什麼時候撥打glRenderbufferStorageMultisampleglTexStorage2DMultisample,但這並不重要,因爲如果有多個採樣,你可以詢問任何幀緩衝器(FBO或默認)。

爲此,您可以將幀緩衝區綁定到GL_DRAW_FRAMEBUFFER,並使用GL_SAMPLE_BUFFERS調用glGetIntegerv。如果該值爲1,則緩衝區被多采樣。您可以通過查詢GL_SAMPLES來獲取樣本數量。

請注意,GL 4.5及以上版本允許您使用glGet(Named)FramebufferParameteriv查詢這些參數,以便您不必綁定FBO。


所有這些都說了,你有一個大問題。您在渲染中所做的任何事都不會被多重採樣。多重採樣不能抗混疊紋理四。它只在三角形的邊緣執行反走樣。除非你打開每個樣本的陰影(除非你不喜歡性能,否則你不應該這樣做),從紋理中提取的數據不會受到影響。

所以即使多重採樣正在進行,您的特定的渲染操作也不會看到它的效果。

相關問題