作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Android 的 OpenGL ES,但我有点困惑。
在示例中我看到了一个对象的绘制,假设一个正方形是在渲染器中通过以下方式完成的:
public class MainRender implements GLSurfaceView.Renderer {
private Square square; // the square
private Context context;
/** Constructor to set the handed over context */
public MainRender(Context context) {
this.context = context;
// initialise the square
this.square = new Square();
}
@Override
public void onDrawFrame(GL10 gl) {
// clear Screen and Depth Buffer
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
square.draw(gl);
}
这很好,但我这样做的全部目的是将大部分逻辑与渲染过程分开......
所以我不太愿意在渲染器类中实例化 Square 实例。我知道在线程之间进行通信的一种安全方法是使用 queueEvent(),但是我看到的示例仅对渲染器中的现有类进行更改、旋转或转换的队列事件进行排队,我自己无法弄清楚如何绘制在另一个线程中实例化的东西(最终动态地通过散列映射是理想的)但我需要一个示例来说明如何做,或者如果可能的话?
-谢谢
最佳答案
在您的应用程序中的其他线程与您的 GL 线程/渲染器之间进行通信的更好方法是让您的渲染器实例提交您的 Activity :
public class stackoverflowTest extends Activity {
GLSurfaceView glSurface;
MyRenderer myRenderer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
glSurface = (GLSurfaceView)findViewById(R.id.glSurfaceView1);
myRenderer = new MyRenderer();
glSurface.setRenderer(myRenderer);
Square mySquare = new Square();
myRenderer.addSquareToScene(mySquare);
}
}
然后在你的渲染器中
public class MyRenderer implements Renderer {
private Vector<Square> scene;
private Vector<Square> bufferedSquaresToAddToScene
@Override
public void onDrawFrame(GL10 gl) {
while(bufferedSquaresToAddToScene.size()>0){
scene.add(bufferedSquaresToAddToScene.remove(0));
}
for(int i = 0;i<scene.size();i++){
scene.get(i).draw(gl);
}
}
public void addSquareToScene(Square square){
bufferedSquaresToAddToScene.add(square);
}
}
要在另一个方向进行通信,对于非 UI 线程来说有点困难,但是对于 UI/主线程,您可以使用 Handler
是的,做一个 hashmap 而不是一个 vector 应该相当容易,这样你就不会加载重复的方 block
关于java - 有没有人有在渲染器类之外绘制对象的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532408/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!