//Input: Saturation channel from HSV image void imageToGpu(){ clock_t read_start = clock(); // Pre load pixel data printf("starting pixel data filling\n"); for(int i = 0; i < MAIN_TEXTURE_HEIGHT; i++){ for(int j = 0; j < PIC_WIDTH; j++){ if (j < PIC_WIDTH/2) pixelData[PIC_WIDTH/2*i + j] = image.at<uchar>(i, j); else pixelData2[PIC_WIDTH/2*i + (j - PIC_WIDTH/2)] = image.at<uchar>(i, j); } } printf("after pixel data\n"); pic_data = (void*)pixelData; pic_data2 = (void*)pixelData2; printf("time passed for reading image: %f\n", (float)(clock() - read_start)/CLOCKS_PER_SEC ); //Pass data to texture const uint8_t* data = (const uint8_t*)pic_data; const uint8_t* data2 = (const uint8_t*)pic_data2; ytexture.SetPixels(data); ytexture2.SetPixels(data2); }
void cam_update() { // <------------------------------------------------ Wait for new image to appear ----------------------------------------------> while(!cam->BeginReadFrame(0,frame_data,frame_sz)) {}; digitalWrite(PIN_TCAP, HIGH) ; // <----------------lock the chosen frame buffer, and copy it directly into the corresponding open gl texture ----------------> data = (const uint8_t*)frame_data; ypitch = MAIN_TEXTURE_WIDTH; ysize = ypitch*MAIN_TEXTURE_HEIGHT; uvpitch = MAIN_TEXTURE_WIDTH/2; uvsize = uvpitch*MAIN_TEXTURE_HEIGHT/2; upos = ysize; vpos = upos+uvsize; ytexture.SetPixels(data); utexture.SetPixels(data+upos); vtexture.SetPixels(data+vpos); cam->EndReadFrame(0); }