【问题标题】:Changing GLSL version to be compatible with GL3更改 GLSL 版本以兼容 GL3
【发布时间】:2016-02-15 23:40:24
【问题描述】:

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

但我的问题是我不知道把它放在哪里,有人告诉我把它放在我的着色器中,但据我所知我没有着色器。无论哪种方式,这是我的代码:

桌面启动器:

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) {
}
}

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

【问题讨论】:

    标签: java glsl


    【解决方案1】:

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

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

    就个人而言,我会放弃任何在其 GLSL 着色器中甚至不使用 #version 声明的库。这将表明开发人员的严重无知和/或无能。有很多游戏框架可供使用,所以没有必要使用一个蹩脚的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多