在写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);
}
}
网友评论