1

シェーダーをインポートして有効にしたり無効にしたりする LWJGL を使用して Java でクラスを作成したので、有効にするとクールな効果が得られます。問題は、クラスを初期化するたびにクラッシュし、明らかに「glCreateProgram」関数が原因であることです。

public class Shader {
private int Shader;
private int VShader;
private int FShader;

public void InitShader() throws IOException, Exception
{
    Shader = glCreateProgram(); //This is where the exception is thrown.
    VShader = glCreateShader(GL_VERTEX_SHADER);
    FShader = glCreateShader(GL_FRAGMENT_SHADER);
    StringBuilder VSHADER_SOURCE = new StringBuilder();
    StringBuilder FSHADER_SOURCE = new StringBuilder();
        BufferedReader reader1 = new BufferedReader(new FileReader("shader.vert"));
        String text1;
        while ((text1 = reader1.readLine()) != null)
        {
            VSHADER_SOURCE.append(text1).append("\n");
        }
        reader1.close();
        BufferedReader reader2 = new BufferedReader(new FileReader("shader.frag"));
        String text2;
        while ((text2 = reader2.readLine()) != null)
        {
            FSHADER_SOURCE.append(text2).append("\n");
        }
        reader2.close();
    glShaderSource(VShader, VSHADER_SOURCE);
    glCompileShader(VShader);
    if (glGetShader(VShader, GL_COMPILE_STATUS) == GL_FALSE)
        throw new Exception();
    glShaderSource(FShader, FSHADER_SOURCE);
    glCompileShader(FShader);
    if (glGetShader(FShader, GL_COMPILE_STATUS) == GL_FALSE)
        throw new Exception();
    glLinkProgram(Shader);
    glValidateProgram(Shader);

}

public void EnableShader()
{
    glUseProgram(Shader);
}

public void DisableShader()
{
    glUseProgram(0);
}
}

それはうまくいき、彼らはランダムに私に立ち寄った. 何が起こっているのか理解できますか?

4

1 に答える 1

0

このメソッドを含むクラスを任意の場所に作成します。

public static final void check(String errorMessage) {
int errorValue = GL11.glGetError();

if (errorValue != GL11.GL_NO_ERROR) {
String errorString = GLU.gluErrorString(errorValue);
System.err.println("ERROR - " + errorMessage + ": " + errorString);

if (Display.isCreated()) Display.destroy();
System.exit(-1);
}
}

そしてYourClassName.check("things that just happened few lines above - just to know where you should seek for errors")、すべてのセットアップ方法の最後に、またはそれ以上の頻度で配置します。

表示されるエラーは、シェーダー プログラムで何かが壊れており、適切にコンパイルできないことを意味するため、Java コードは問題ないはずです。シェーダーのコードを投稿していただければ、もっとお役に立てるかもしれません。

于 2013-01-18T19:55:30.670 に答える