2017-07-30 9 views
0

J'écris un shader en métal.Shader à fragmentation en métal, couleur courante du framebuffer d'accès

Tout ce que je veux, c'est accéder à la couleur actuelle du fragment.

Par exemple.

A la fin de mon shader fragment, quand je mets retour currentColor + 0,1, par exemple

Le résultat sera écran allant du noir au blanc au FPS. Il s'agit d'un programme de base qui dessine une bande triangulaire qui remplit l'écran. Le but ultime est d'écrire un traceur dans le shader, je l'ai fait avec opengl + glsl. J'ai des problèmes avec les tampons. Je pensais qu'une solution facile est de simplement renvoyer la couleur de sortie actuelle au shader et de la calculer en moyenne.

Ce sont les shaders:

#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); 
} 

Répondre

0

Pas de soucis, la réponse me regardait en face tout le temps.

passe dans la couleur courante dans le fragment shader avec float4 color0 [[color (0)]]

Avec ces 2 options définies renderPassDescriptor.colorAttachments [0] = .storeAction MTLStoreActionStore; renderPassDescriptor.colorAttachments [0] .loadAction = MTLLoadActionLoad;

Mon problème n'était pas la couleur, c'était dans le calcul de la moyenne. Dans mon cas, je ne pouvais pas faire la moyenne régulière, comme dans l'addition de toutes les couleurs jusqu'à présent et diviser par le nombre d'échantillons.

Ce que je devais réellement faire était de calculer une moyenne mobile.

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