win,vs
希望能實時顯示一個圖片,由陣列構成,學著learnOpenGL,Show_Init()就是他們的那個主函式,自己加了幾個引數,使用了多執行緒,生成和畫圖分開了,但不清楚這些變數有沒有完全聯系起來,類似這樣,最后結果有動態顯示,但是視窗會閃,就是瞬間出現花屏,目前不清楚是否由生成影像的代碼引起。
第一張是花屏截圖,第二是正常的,二者隨機出現


std::thread th_Disp(Show_Init, std::ref(nData0), std::ref(nData1), std::ref(nData2), std::ref(nData3), std::ref(ppol));
生成影像的執行緒:
while (1) { //此之前生成輸入輸出各兩個緩沖區,由pol區分,這里都是自己寫的,不是OpenGL
if (*pol == 0) {
cap.CaptureImage(rect, pData0, nLen); //程式此處生成pData的資料
RGBaligin(rect, pData0); //對其處理
windowing(rect, disp, pData0, nData1);
*pol = 1;
}
if (*pol == 1) {
cap.CaptureImage(rect, pData1, nLen);
RGBaligin(rect, pData1);
windowing(rect, disp, pData1, nData0);
*pol = 0;
}
}畫圖的執行緒:
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
while (oldpol == *pol) { //從learnOpenGL上學的,從這里自己改的,其他和他們的相同,
Sleep(1); //但是把這個放到一個執行緒里了
}
if (*pol == 0) {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, nData0);
}
if (*pol == 1) {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, nData1);
}
oldpol = *pol; //到這里結束
// bind Texture
glBindTexture(GL_TEXTURE_2D, texture);
// render container
ourShader.use();
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
uj5u.com熱心網友回復:
搜“學OpenGL編3D游戲”,里面有避免閃爍的程式片段。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268069.html
標籤:工具平臺和程序庫
下一篇:《C++輸入輸出運算子的多載》
