Java 从GL10/11移植到GL20
所以我一直在做一个项目,但有一段时间,我一直在使用libgdx0.98 想要使用着色器,我已经更新到libgdx1.41。然而,现在,纹理、字体、图像将在GL10中绘制,而不是在GL20中绘制。有些东西吸引人,有些则不然。有些字体渲染,有些不渲染。我的整个项目在更新之前运行良好,现在出现了重大问题 此外,还有一些非常可怕的屏幕撕裂正在发生。当游戏开始时,屏幕将闪烁1/4的白色,朝着中间屏幕的某个角度向下移动,就像切下一块比萨饼 我可以在舞台上添加元素,并让舞台画画。有些人会画画,有些人不会。他们扩展了相同的类并使用相同的方法进行绘制,但其中一些人干脆拒绝绘制 下面是我的渲染线程中的一些代码,以防有人知道可能发生了什么。我真不知道该怎么办。代码中有很多注释,因为我正在尝试进行一些调试Java 从GL10/11移植到GL20,java,opengl,libgdx,Java,Opengl,Libgdx,所以我一直在做一个项目,但有一段时间,我一直在使用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中绘制东西的最简单方法。因为这是一个游戏,我有物品,库存,敌人等等,所有的物品都有物理身体和其他的装束,所以我试图排除可能的问题。