从GL10 / 11移植到GL20

时间:2014-10-24 00:23:41

标签: java opengl libgdx

所以我一直在做一个项目,但是一段时间以来,我一直在使用libGDX 0.98。

想要使用着色器进行操作,我已更新到libGDX 1.41。然而,现在,在GL10中绘制的纹理,字体,图像不会在GL20中绘制。有些事情有些吸引人,有些事情没有。有些字体呈现,有些字体不呈现。我的整个项目在更新之前工作正常,现在遇到了重大问题。

此外,还有一些非常糟糕的屏幕撕裂正在发生。随着事情在游戏中开始发生,屏幕将像1/4白色一样闪烁,向中间屏幕倾斜一些角度,就像切出的披萨片一样。

我可以在舞台上添加元素,然后告诉舞台画画。有些人会画,有些人不会。它们扩展了相同的类并使用相同的方法绘制,但其中一些只是拒绝绘制。

这里有来自我的渲染线程的一些代码,以防万一有人知道可能会发生什么。我真的不知道该怎么做。代码中有很多注释,因为我正在尝试进行一些调试。

    public void render(float delta)
   {
      super.render(delta);
      Gdx.gl.glClearColor(0, 0, 0, 0);
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

      //get debug output info
      float x = getShip().getBody().getPosition().x;
      float y = getShip().getBody().getPosition().y;
      float speed = (float)Math.sqrt(Math.pow(getShip().getBody().getLinearVelocity().x, 2) 
                           + Math.pow(getShip().getBody().getLinearVelocity().y, 2));
      //float angle = Math.abs(ship.getAngleInDegrees()) % 360;
      float angle = ship.getAngleInDegrees();

      /*if(!isPaused)
      {


         if(this.game.getSoundController().getPlayingMusic() == null)
         {
            playRandomTrack();
         }
         if(this.ship.playerIsDead() || this.levelCompleted)
         {
            this.time += Gdx.graphics.getDeltaTime();
            if(this.time > 10)
            {
               this.dispose();
               if(this.ship.playerIsDead())
                  this.game.goToMainMenu();
               else
                  this.game.setScreen(this.game.getNextScreen());
            }
         }
      }*/

      this.world.step(BOX2D_STEP, 6, 2);
      handleInput();
      handleAsteroids();
      handleShip();
      handleShot();
      handleEffects();


      //debugRenderer.render(this.world, this.debugCamera.combined);

      //draws the score text (will draw other UI Text too later)
      this.spriteBatch.begin();
      this.gameStage.act();
      this.gameStage.draw();
      this.game.getWindowStage().act();
      this.game.getWindowStage().draw();
      //handleEffects(this.spriteBatch); //this method must be called between spritebatch begin and end
      this.font.setColor(Color.RED);
      //this.font.draw(spriteBatch, "TESTTESTTEST", 300, 300);
      if(this.debugOutputOn)
      {
         printDebugOutput(x, y, speed, angle, this.spriteBatch);
      }
      this.spriteBatch.end();

   }

编辑:新信息,虽然我仍然遇到问题:当我尝试强制绘制某些内容但创建它并手动将其添加到舞台时,右上角会出现一个大的白色矩形。这些是我知道可以绘制的项目,因为它们已经在屏幕上绘制,但是试图强制它们在这里绘制似乎会导致一些问题。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我的舞台中有一个对象调用Gl ShapeRenderer。它在GL10 / 11中运行良好,但是当我移植时,它导致了在这个对象之后添加的libGDX阶段中的所有内容,而不是被绘制。当然,它造成了大部分问题。

我不确定这是否是一个libGDX错误,或者它是否与GL20一起出现问题并且在我使用时调用ShapeRenderer。