美文网首页
获取shader中某个变量的值

获取shader中某个变量的值

作者: 七维树 | 来源:发表于2018-12-11 16:59 被阅读50次

在写shader时,经常想要看看某个变量在运行时的值是多少,通过两步实现:
1.在shader中添加一个方法,把某个值变为一个颜色,其中R存储存储mod(对255取模)的值,g通道存储余数(除以255)的值,然后把该颜色设置为gl_FragColor输出。

//非精确,把一个值输出为颜色,r通道存储mod(对255取模)的值,g通道存储余数(除以255)
 vec4 transferValueToColor(float value) {
     float modV = mod(value,255.);
     float yu = floor(value / 255.);
     float valueR = modV /255.;
     float valueG = yu / 255.;
     vec4 color = vec4(valueR,valueG,1.0,1.0);
     return color;
 }

2.在shader外面获取经过该shader渲染后的CVPixelbuffer,在获取第一个像素的颜色,从而计算出shader中传输出来的值

//获取CVPixelBufferd第一个像素颜色值,代表的数值
- (void)getGPUVauleWith:(CVPixelBufferRef)pixelBuffer {
    if (pixelBuffer != NULL) {
        NSLog(@"render pixelBuffer = %@",pixelBuffer);
        CVPixelBufferLockBaseAddress(pixelBuffer, 0);
        unsigned char* bytes = CVPixelBufferGetBaseAddress(pixelBuffer);
        int modV = bytes[2]; //模放在G通道
        int yuV = bytes[1]; //余数放在R通道
        int value = yuV * 255 + modV;
        NSLog(@"value = %d",value);
        CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
    }
}

相关文章

网友评论

      本文标题:获取shader中某个变量的值

      本文链接:https://www.haomeiwen.com/subject/cbsehqtx.html