Java 从GL10/11移植到GL20

Java 从GL10/11移植到GL20,java,opengl,libgdx,Java,Opengl,Libgdx,所以我一直在做一个项目,但有一段时间,我一直在使用libgdx0.98 想要使用着色器,我已经更新到libgdx1.41。然而,现在,纹理、字体、图像将在GL10中绘制,而不是在GL20中绘制。有些东西吸引人,有些则不然。有些字体渲染,有些不渲染。我的整个项目在更新之前运行良好,现在出现了重大问题 此外,还有一些非常可怕的屏幕撕裂正在发生。当游戏开始时,屏幕将闪烁1/4的白色,朝着中间屏幕的某个角度向下移动,就像切下一块比萨饼 我可以在舞台上添加元素,并让舞台画画。有些人会画画,有些人不会。他们

所以我一直在做一个项目,但有一段时间,我一直在使用libgdx0.98

想要使用着色器,我已经更新到libgdx1.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();

   }

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

我已经解决了这个问题。在我的阶段中有一个调用Gl ShaperEnder的对象。它在GL10/11中工作得很好,但当我移植时,它导致libGDX阶段中在该对象之后添加的所有内容都无法绘制。自然,它造成了大部分问题


我不确定这是不是一个libGDX错误,或者这是GL20和调用ShaperEnder的问题。

我不知道
libGDX
,但OpenGL 2与OpenGL 1/1.1向后兼容,所以我怀疑仅仅改变这一点就是问题所在。你还改变了什么吗?没有其他改变。LibGDX是LWJGL之上的一个层,所以您需要知道它才能提供帮助。@ColonelThirtyTwo但LibGDX使用OpenGL的ES版本,其中OpenGL ES 2.0不向后兼容。Scuba Steve,我在上面的代码中没有看到任何问题,所以可能与您的资产或演员子类有关。你所说的“强制绘制”是什么意思?所有这些类都扩展了libGDX类映像。我将尝试让他们扩展纹理,看看是否可以得到不同的行为。通过“强制”绘制,我的意思是从TextureAtlas抓取一个纹理并给它坐标,然后直接将其添加到舞台上。这是在libGDX中绘制东西的最简单方法。因为这是一个游戏,我有物品,库存,敌人等等,所有的物品都有物理身体和其他的装束,所以我试图排除可能的问题。