2017-07-30 7 views
0

メタルシェイダーを書いています。メタルフラグメントシェーダ、アクセス現在のフレームバッファカラー

私が欲しいのは、フラグメントの現在の色にアクセスすることです。

たとえば、私は例

のために結果画面がFPSで黒から白に行くことになる、 リターンcurrentColor + 0.1を入れて、私のフラグメントシェーダの終わりに

、。 これは、画面に表示される三角形の線を描画する基本的なプログラムです。 究極の目標は、シェイダーの内部にパストレーサーを書き込むことです。私はこれをopengl + glslで行っています。 バッファーに問題があります。私は簡単な解決策は、現在の出力色をシェーダーに戻し、そこで平均化することだと思いました。

これら

はシェーダです:

#include <metal_stdlib> 
using namespace metal; 
#import "AAPLShaderTypes.h" 

vertex float4 vertexShader(uint vertexID [[vertex_id]], constant AAPLVertex *vertices [[buffer(AAPLVertexInputIndexVertices)]], constant vector_uint2 *viewportSizePointer [[buffer(AAPLVertexInputIndexViewportSize)]], constant vector_float4 * seeds) { 

    float4 clipSpacePosition = vector_float4(0.0, 0.0, 0.0, 1.0); 

    float2 pixelSpacePosition = vertices[vertexID].position.xy; 
    vector_float2 viewportSize = vector_float2(*viewportSizePointer); 
    clipSpacePosition.xy = pixelSpacePosition/(viewportSize/2.0); 

    return clipSpacePosition; 
} 

fragment float4 fragmentShader() 
{ 
    // I want to do this 
    // return currentColor + 0.1; 

    return float4(1.0, 1.0, 1.0, 1.0); 
} 

答えて

0

心配はありません、答えはずっと顔で私を見つめていました。 float4 COLOR0 [[カラー(0)]

とフラグメントシェーダに

現在の色のパスにこれらの2つのオプションが[0] .storeAction = MTLStoreActionStore renderPassDescriptor.colorAttachmentsを設定して、 renderPassDescriptor.colorAttachments [0] .loadAction = MTLLoadActionLoad;

私の問題は色ではなく、平均を計算することでした。 私の場合、これまでのところすべての色を合計してサンプル数で割るように、通常の平均を行うことはできませんでした。

私が実際にする必要があったのは、移動平均を計算することでした。

https://en.wikipedia.org/wiki/Moving_average#Cumulative_moving_average

関連する問題