我在尝试为我的第一个游戏运行DesktopLauncher时遇到此错误:
Fragment shader failed to compile with the following errors:
ERROR: error(#272) Implicit version number 110 not supported by GL3 forward compatible context
ERROR: error(#273) 1 compilation errors. No code generated
at com.badlogic.gdx.graphics.g2d.SpriteBatch.createDefaultShader(SpriteBatch.java:157)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:120)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:73)
at com.cosmicluck.mygame.GameScreen.<init>(GameScreen.java:22)
at com.cosmicluck.mygame.MyGame.create(MyGame.java:12)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
现在,当我环顾四周试图找出我做错了什么时,我遇到了一个解决方案,说明使用以下方式指定GLSL的版本:
#version 150
但我的问题是我不知道该把它放在哪里,我被告知要用我的着色器把它放在那里,但据我所知,我没有着色器。无论哪种方式都是我的代码:
DesktopLauncher:
package com.cosmicluck.mygame.desktop;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.cosmicluck.mygame.MyGame;
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new MyGame(), config);
config.title = "Test";
config.resizable = true;
}
}
MyGame课程(创建游戏画面):
package com.cosmicluck.mygame;
import com.badlogic.gdx.Game;
public class MyGame extends Game {
public GameScreen game_screen;
@Override
public void create() {
Assets.load();
game_screen = new GameScreen(this);
setScreen(game_screen);
}
}
GameScreen类:
package com.cosmicluck.mygame;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL30;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
public class GameScreen implements Screen{
MyGame game;
OrthographicCamera camera;
SpriteBatch batch;
public GameScreen(MyGame game){
this.game = game;
camera = new OrthographicCamera();
camera.setToOrtho(true, 1920, 1080);
batch = new SpriteBatch();
}
@Override
public void show() {
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.95F, 0.95F, 0.95F, 0.95F);
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(Assets.sprite_background, 0, 0);
batch.end();
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
}
@Override
public void resize(int width, int height) {
}
}
再一次,任何可以用来帮助我的信息都会很棒!感谢您抽出宝贵时间来看看这个!
答案 0 :(得分:1)
据我所知,我没有着色器。
你可能没有直接。但无论库com.badlogic.gdx.g2d.SpriteBatch
来自哪个,它都会创建一个着色器。该着色器使用GLSL 1.10。
就个人而言,我会抛弃任何在其GLSL着色器中甚至不使用#version
声明的库。这将表明开发商的无知和/或无能。有很多游戏框架可供使用,所以不需要使用糟糕的。
但是,如果您坚持使用此工具,则无法创建核心配置文件OpenGL上下文。因此,您的LWJGL初始化代码需要删除这些属性位(并且您不能使用任何高于2.1的GL版本,除非您不希望您的代码在MacOSX上运行)。你没有显示初始化代码,所以你必须自己解决。