处理过多次调用popMatrix

时间:2016-12-11 09:52:09

标签: java opengl processing

我正在开发一个Processing视图(v2.2.1仍然扩展了Applet)。 我使用一些pushMatrix()/ popMatrix()进行转换并表示复合对象(我知道32深度矩阵堆栈限制,相对确定我没有在组合和/或连续转换中达到那个深度或者没有配对推送和弹出正确)。

到目前为止,我没有任何意外的问题,但在引入了另一个组件(根本不是第一个启用文本的组件)之后,我偶尔会遇到这样的错误:

字体太大,无法使用OpenGL正确显示

  

线程“动画线程”中的异常java.lang.RuntimeException:   使用此图形时,图像宽度和高度不能大于0   卡。在processing.opengl.Texture.setSize(Texture.java:1148)at   processing.opengl.Texture.init(Texture.java:213)at   processing.opengl.Texture。(Texture.java:160)at   processing.opengl.FontTexture.addTexture(FontTexture.java:134)at at   processing.opengl.FontTexture.initTexture(FontTexture.java:103)at at   processing.opengl.FontTexture。(FontTexture.java:71)at   processing.opengl.PGraphicsOpenGL.textLineImpl(PGraphicsOpenGL.java:3602)     at processing.core.PGraphics.textLineAlignImpl(PGraphics.java:4659)     at processing.core.PGraphics.text(PGraphics.java:4356)at   processing.core.PGraphics.text(PGraphics.java:4307)at   processing.core.PApplet.text(PApplet.java:13183)at   ygg.desktop.vm.extVM.MetadataProcessingVM.render(MetadataProcessingVM.java:81)     在   ygg.desktop.vm.extVM.MetadataProcessingVM.render(MetadataProcessingVM.java:88)     在ygg.desktop.vm.groups.TreeLayout.render(TreeLayout.java:43)at   ygg.desktop.vm.groups.RenderArea.render(RenderArea.java:167)at   ygg.desktop.view.MainView.draw(MainView.java:179)at   processing.core.PApplet.handleDraw(PApplet.java:2386)at   processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240)     在processing.core.PApplet.run(PApplet.java:2256)at   java.lang.Thread.run(Thread.java:745)

指的是(注意我在不同的运行中的第一个和第二个文本都得到它)*父亲是PApplet实例

          father.pushMatrix();
          father.translate(posX, posY+8);

          father.rotate(-father.HALF_PI);

          father.fill(father.color(30,30,30));
          father.textAlign(father.CENTER);
          father.textSize(16);
          **father.text(md.getId()!=null?md.getId():"NONE",-(finalY-posY)/2,width/2);**
          father.fill(father.color(220,220,50));
          father.textSize(12);
          **father.text(md.getId()!=null?md.getId():"NONE",-(finalY-posY)/2,width/2);**

          father.popMatrix();

  

线程“动画线程”中的异常java.lang.RuntimeException:Too   许多人调用popMatrix(),而不是pushMatrix()。在   processing.opengl.PGraphicsOpenGL.popMatrix(PGraphicsOpenGL.java:3811)     在processing.core.PApplet.popMatrix(PApplet.java:13322)at   ygg.desktop.vm.extVM.MetadataProcessingVM.render(MetadataProcessingVM.java:72)     在ygg.desktop.vm.groups.TreeLayout.render(TreeLayout.java:43)at   ygg.desktop.vm.groups.TreeLayout.render(TreeLayout.java:46)at   ygg.desktop.vm.groups.TreeLayout.render(TreeLayout.java:46)at   ygg.desktop.vm.groups.RenderArea.render(RenderArea.java:167)at   ygg.desktop.view.MainView.draw(MainView.java:180)at   processing.core.PApplet.handleDraw(PApplet.java:2386)at   processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240)     在processing.core.PApplet.run(PApplet.java:2256)at   java.lang.Thread.run(Thread.java:745)

on

          father.pushMatrix();
          father.translate(posX, posY+8);
          father.rotate(-father.HALF_PI);
          father.fill(father.color(30,30,30));
          father.textAlign(father.CENTER);
          father.textSize(16);

          father.text(md.getId()!=null?md.getId():"NONE",-(finalY-posY)/2,width/2);
          father.fill(father.color(220,220,50));
          father.textSize(12);
          father.text(md.getId()!=null?md.getId():"NONE",-(finalY-posY)/2,width/2);      
          **father.popMatrix();**
    }

我根本不是OpenGl和/或Processing的专家,所以我想知道如何在我的代码中没有任何随机元素的情况下连续执行(之前没有jvm打开)会导致不同的结果(显然如果应用程序没有崩溃)无论我创建了多少个对象,它都会立即继续工作),我也不明白如果所有调用都在绘制周期中,我怎么能在popMatrix上获得异常,当然没有线程(我是'我知道那里。

在继续之前,我想知道我错了什么(如果它已经发生了)以及我可以做些什么来实现每次运行的稳定性,我也想知道PApplet客户端的多个实例是否必然会受到影响彼此。

1 个答案:

答案 0 :(得分:1)

如果没有完整的代码列表,很难确定所有错误。

根据您发布的内容,您看起来有未配对的pushMatrix()/ popMatrix()调用。对于每个pushMatrix()操作,当您完成本地坐标系转换时,您将需要一个popMatrix()。

请务必阅读2D Transformations Processing tutorial了解详情。