gpt4 book ai didi

android - 如何在 OnDrawFrame() 之外绘制图元?

转载 作者:行者123 更新时间:2023-11-29 17:16:16 25 4
gpt4 key购买 nike

在android-opengles中,我们知道任何图元都可以通过OnDrawFrame(GL10 gl){.......}这是不断呈现的。就好像我们想画一个在 triangle 类中定义的三角形我们用

triangle tri=new triangle();
OnDrawFrame(GL10 gl)
{
.
.
.
tri.draw(gl);
.
.
.

}

所以,我需要的是,每当用户触摸筛选通过

OnTouchEvent(MotionEvent e)
{
.
.
.

tri.draw(gl);

.
.
.

}

这可能吗?或者有什么替代方法吗?

最佳答案

如前所述,您不能直接这样做。无论线程如何,您都不应该只是在应用程序中的某个随机点插入绘图,因为您不知道渲染实际处于什么状态。

始终尝试将逻辑与绘图分开。在您的情况下,这似乎意味着您将需要一组对象(三角形)。每当用户触摸时,您都可以向该数组添加一个三角形对象,并在绘制时绘制三角形。

现在三角形有两种情况。首先,如果你在每次绘制时清除缓冲区,那么数组应该在触摸事件上继续增长,并且每一帧都会绘制所有三角形。其次,如果您不清除缓冲区而只是继续在另一个对象上绘制一个对象,那么您应该在绘制对象时简单地从数组中删除所有对象。

在这两种情况下,还有一个选项可以只在更改完成后调用 draw 方法。在这种情况下,最常见的是使用诸如 needsRedraw 之类的 bool 值,如果为 true,则应触发渲染、刷新 View 并将 needsRedraw 设置为 false。当执行某些操作(例如添加另一个三角形)时,值 needsRedraw 将再次设置为 true。

还有一些其他方法,例如您可以在触摸事件将报告到的另一个线程上创建共享上下文。在此上下文中,您可以创建一个带有附加纹理的 FBO。主上下文然后将此纹理重新绘制为全屏,结果将是相同的......但这仍然是一个更难的过程,没有理由实现它。更不用说您需要确保这两个线程不相同或不断更改线程上的当前上下文;在这种情况下,双缓冲也可能是强制性的,因此我们正在研究 FBO 上的 2 个纹理,锁定系统和附加/分离系统。

关于android - 如何在 OnDrawFrame() 之外绘制图元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38748721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com