2016-04-12 26 views
0

LWJGL kullanarak Java'da bir oyun motoru yazmayı öğretici olarak takip ediyordum. GLSL bir shader parçası yazmış ve o basicFragment.fs seslendi: OpenGL Fragman Shader Derleme Sayı

#version 330 

out vec4 fragColor; 

void main() 
{ 
    fragColor = vec4(0,0, 1.0, 1.0, 1.0); 
} 

Şimdi shaderı derlemek için bir yol yazmak için öğretici izledi ve bir hata alıyorum olduğunu burada. İlk önce, benim Shader sınıfım.

package com.base.engine; 

import static org.lwjgl.opengl.GL20.*; 
import static org.lwjgl.opengl.GL21.*; 
import static org.lwjgl.opengl.GL32.*; 

public class Shader 
{ 
    private int program; 

    public Shader() 
    { 
     program = glCreateProgram(); 

     if(program == 0) 
     { 
      System.err.println("Shader creation failed: Could not find valid memory location in constructor"); 
      System.exit(1); 
     } 
    } 

    public void bind() 
    { 
     glUseProgram(program); 
    } 

    public void addVertexShader(String text) 
    { 
     addProgram(text, GL_VERTEX_SHADER); 
    } 

    public void addGeometryShader(String text) 
    { 
     addProgram(text, GL_GEOMETRY_SHADER); 
    } 

    public void addFragmentShader(String text) 
    { 
     addProgram(text, GL_FRAGMENT_SHADER); 
    } 

    public void compileShader() 
    { 
     glLinkProgram(program); 

     if(glGetProgrami(program, GL_LINK_STATUS) == 0) 
     { 
      System.err.println(glGetShaderInfoLog(program, 1024)); 
      System.exit(1); 
     } 

     glValidateProgram(program); 

     if(glGetProgrami(program, GL_VALIDATE_STATUS) == 0) 
     { 
      System.err.println(glGetShaderInfoLog(program, 1024)); 
      System.exit(1); 
     } 
    } 

    private void addProgram(String text, int type) 
    { 
     int shader = glCreateShader(type); 

     if(shader == 0) 
     { 
      System.err.println("Shader creation failed: Could not find valid memory location when adding shader"); 
      System.exit(1); 
     } 

     glShaderSource(shader,text); 
     glCompileShader(shader); 

     if(glGetShaderi(shader, GL_COMPILE_STATUS) == 0) 
     { 
      System.err.println(glGetShaderInfoLog(shader, 1024)); 
      System.exit(1); 
     } 

     glAttachShader(program, shader); 
    } 
} 

Sonra, oyun sınıfımda aşağıdakileri yaparım. (Umarım kod açıklayıcı kendini her yerde anlamış değilim bana bildirin.):

public class Game 
{ 
    private Mesh mesh; 
    private Shader shader; 

    public Game() 
    { 
     mesh = new Mesh(); 
     shader = new Shader(); 

     Vertex[] data = new Vertex[] {new Vertex(new Vector3f(-1,-1,0)), 
             new Vertex(new Vector3f(-1,1,0)), 
             new Vertex(new Vector3f(0,1,0))}; 

     mesh.addVertices(data); 

     shader.addVertexShader(ResourceLoader.loadShader("basicVertex.vs")); 
     shader.addFragmentShader(ResourceLoader.loadShader("basicFragment.fs")); 
     shader.compileShader(); 
    } 

    public void render() 
    { 
     shader.bind(); 
     mesh.draw(); 

    } 

Yani temelde, ben işlevini çağırdığınızda,

shader.addFragmentShader(ResourceLoader.loadShader("basicFragment.fs")); 

fonksiyonu bana bu hata veriyor:

3.3.0 - Build 8.15.10.2712 
ERROR: 0:7: 'constructor' : too many arguments 

Sadece vertex gölgelendiriciyi uygularken herhangi bir hata alamıyorum, bu yüzden parçanın gölgelendiricisi olduğu sonucuna vardım.

O hata

Shader sınıfının bu bölümünde atılan oluyor: Sorun bazı yapıcı çok fazla argüman olduğundan gölgelendirici derleme olmadığını olduğuna beni inandıramaz

if(glGetShaderi(shader, GL_COMPILE_STATUS) == 0) 
{ 
    System.err.println(glGetShaderInfoLog(shader, 1024)); 
    System.exit(1); 
} 

. Tam olarak hangi kurucuya başvurduğunu bilmiyorum.

Herhangi bir yardım için teşekkür ederiz.

cevap

0

I don't know exactly what constructor it is referring to.

sizin gölgelendirici kodunda bir:

fragColor = vec4(0,0, 1.0, 1.0, 1.0); 

bir vec4 yapıcı bu. Ve sen 5 parametre verdin. "0,0" iki tanesidir. Virgül yerine bir dönem kullanmak istediğinden şüpheleniyorum.

+0

Teşekkür ederiz. Sorumu gönderdikten sonra biraz anladım, ama cevabı takdir ediyorum. Umarım başkalarına yardım eder. –