第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Processing 在單獨(dú)的線程中讀取 OpenGL 像素?

如何使用 Processing 在單獨(dú)的線程中讀取 OpenGL 像素?

波斯汪 2023-02-23 16:57:42
我正在嘗試在單獨(dú)的線程中渲染來自處理草圖的幀。Processing 有一個loadPixels()函數(shù)。問題在于 OpenGL 渲染器(P2D或P3D在處理中。):PGraphicsOpenGL loadPixels()這是我的示例草圖:void setup(){  size(300,300,P2D);  noFill();  background(255);  rectMode(CENTER);  stroke(0,32);  smooth(8);  // instantiate and start rendering thread  new PNGRenderer(this);}void draw(){  // draw moving shapes  translate(width * 0.5, height * 0.5);  rotate(sin(frameCount * 0.075));  scale(sin(frameCount * 0.01));  translate(cos(frameCount * 0.01) * width * 0.1,sin(frameCount * 0.01) * height * 0.1);  rect(0,0,width * .9,height * .9);}public class PNGRenderer implements Runnable{  PApplet parent;  PImage  frame;  boolean shouldSave = false;  int savedFrameCount;  boolean isRunning = true;  PNGRenderer(PApplet parent){    this.parent = parent;    this.parent.registerMethod("draw",this);    frame = createImage(parent.width,parent.height,ARGB);    frame.loadPixels();    Thread renderThread = new Thread(this);    renderThread.setName("Renderer-Thread");    renderThread.start();  }  public void draw(){    // all is well if I sample pixels in the same OpenGL thread    //parent.loadPixels();    shouldSave = true;  }   synchronized void sampleAndSavePixels(){    if(shouldSave){      // program crashes if I try to save in a separate thread      parent.loadPixels();      arrayCopy(parent.pixels,frame.pixels);      frame.updatePixels();      frame.save(dataPath("frames/frame_"+nf(savedFrameCount++,4)+".png"));      println("saved frame",savedFrameCount);      shouldSave = false;    }  }  public void run(){    while(isRunning){      sampleAndSavePixels();    }  }}據(jù)我所知(到目前為止我還不是 OpenGL 向?qū)В┳x取像素需要在同一個 OpenGL 線程中完成。這是我試圖避免的放緩。
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個贊

OpenGL 上下文是線程本地的。上下文必須在線程中成為“當(dāng)前”。不同的線程可以使用相同的上下文,但是一個上下文不能同時在多個線程中是當(dāng)前的。

您必須確保線程不會同時使用相同的上下文。當(dāng)然,您可以為不同的線程創(chuàng)建不同的上下文,并將一個上下文共享給另一個。
請參見OPENGL 多上下文

但請注意,GPU 已經(jīng)并行運(yùn)行。在不同線程中使用 1 個 GPU 沒有任何好處。GPU一次只能處理1個線程的指令。當(dāng)然,渲染管道的每個階段都會并行處理頂點(diǎn)、片段等


查看完整回答
反對 回復(fù) 2023-02-23
  • 1 回答
  • 0 關(guān)注
  • 105 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號