在iOS上使用OpenGL,是否可以更新小纹理(通过单独设置每个像素),然后将其放大以填充屏幕(每秒60帧)?
答案 0 :(得分:1)
一般来说答案是肯定的,这是可能的。但这可能取决于你需要绘制什么。
由于您未提供更多详细信息,我将介绍一般方法:
将纹理绑定到帧缓冲区(Here是一个很好的解释,其中包含有关如何执行此操作的代码。请参阅“示例6.10。初始化()以进行超级采样”代码示例)
现在以与在屏幕上相同的方式绘制您需要的内容(转换,模型视图矩阵等)。如果您需要像素精度(修改每个像素),您可以考虑使用正交投影。如果这是可能的,取决于你需要绘制什么。所有这些绘图都将在您的纹理上执行,实现“更新纹理”部分。
绑定您使用的普通帧缓冲区,在屏幕上绘制。使用上一步中的纹理绘制一个矩形(可能再次使用正交投影)。您可以缩放此矩形以填充屏幕。
如果上述方法能够达到60 fps,则取决于您的目标设备和需要渲染的场景。
希望有所帮助
答案 1 :(得分: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.