更改GLSL版本以与GL3兼容

时间:2016-02-15 03:36:23

标签: java glsl

我在尝试为我的第一个游戏运行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) {
}
}

再一次,任何可以用来帮助我的信息都会很棒!感谢您抽出宝贵时间来看看这个!

1 个答案:

答案 0 :(得分:1)

  

据我所知,我没有着色器。

你可能没有直接。但无论库com.badlogic.gdx.g2d.SpriteBatch来自哪个,都会创建一个着色器。该着色器使用GLSL 1.10。

就个人而言,我会抛弃任何在其GLSL着色器中甚至不使用#version声明的库。这将表明开发商的无知和/或无能。有很多游戏框架可供使用,所以不需要使用糟糕的

但是,如果您坚持使用此工具,则无法创建核心配置文件OpenGL上下文。因此,您的LWJGL初始化代码需要删除这些属性位(并且您不能使用任何高于2.1的GL版本,除非您不希望您的代码在MacOSX上运行)。你没有显示初始化代码,所以你必须自己解决。