2013-07-18 59 views

回答

1

你應該能夠更新使用glTexImage2D紋理的內容。

未經測試的例子:

GLubyte data[1024]; // 32x32 (power of two) 
for (int i=0; i<1024; i+=4) { 
    // write a red pixel (RGBA)  
    data[i] = 255; 
    data[i+1] = 0; 
    data[i+2] = 0; 
    data[i+3] = 255; 
} 

glBindTexture(GL_TEXTURE_2D, my_texture); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 

// then simply render a quad with this texture. 
+0

一旦我把它變成兩個冪的作品。謝謝。 – aoakenfo

+0

噢,對不起,我會編輯答案。 – sharvey

1

一般來說,答案是肯定的,這是可能的。但這可能取決於你需要畫什麼。

既然你沒有提供更多的細節,我將描述的一般方法:

  • 綁定一個紋理到幀緩衝(Here是如何做到這一點的代碼很好的解釋請參見「的例子。 6.10。初始化()用於超採樣「代碼示例)

  • 現在畫出你需要的東西,就像你在屏幕上(變換,模型視圖矩陣等)一樣。如果您需要像素精度(修改每個像素),您可以考慮使用正交投影。如果這是可能的,取決於你需要畫什麼。所有這些繪圖都將在您的紋理上執行,以實現「更新紋理」部分。

  • 綁定您使用的正常幀緩衝區以在屏幕上繪製。繪製一個使用上一步紋理的矩形(可能再次使用正交投影)。您可以縮放此矩形以填充屏幕。

如果上述方法能達到60 fps,取決於你的目標設備和你需要渲染的場景。

希望幫助

+0

我在渲染當前場景到紋理不太感興趣。爲了澄清,我想在(offscreen?)紋理中明確設置每個像素,然後將其全屏顯示(放大,模糊確定)。紋理四分之一組合聽起來像是該部分的合理解決方案。我不清楚的是,是否可以直接在紋理中設置單個像素?像數組訪問。或者,我是否會將場景渲染爲正視圖中的一系列GL_POINTS以實現相同的效果? – aoakenfo

+0

據我所知,像訪問數組一樣設置像素是不可能的。如果您可以設置整個紋理的值以便一次修改,則可以使用「GL_POINTS」。或者,您可以繪製任何2D幾何圖形,例如如果渲染一個四元組(假設屏幕的下半部分),則可以一次修改大量像素。如果你描述你需要在這個紋理上畫什麼,或許我可以提供更多的幫助 –