2014-04-25 3 views
0

glCreateShader()를 호출하면 현재 스레드에서 OpenGL 컨텍스트를 찾을 수 없습니다.쉐이더 생성시 LWJGL OpenGL 문맥이 없습니다.

public void init() { 
    //glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // commented because I get the same error .. 
    try { 
     shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader"); 
     glUseProgram(shaderProgramID); 
     bunny = OBJLoader.parseOBJ(new File("src/com/dryadengine/assets/bunny.obj")); 
     FloatBuffer vbo = BufferUtils.createFloatBuffer(bunny.getVertices().length); 
     vbo.put(bunny.getVertices()); 
     vbo.flip(); 
     vboID = glGenBuffers(); 
     glBindBuffer(GL_ARRAY_BUFFER, vboID); 
     glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW); 
     vPositionID = glGetAttribLocation(shaderProgramID, "vPosition"); 
     glEnableVertexAttribArray(vPositionID); 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

I : 여기

public void create() { 
    try { 
     Display.setDisplayMode(new DisplayMode(1920, 1080)); 
     Display.setTitle("Dryad Engine 1.0.0"); 
     Display.setFullscreen(false); 
     Display.setResizable(true); 
    } catch (LWJGLException ex) { 
     Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex); 
     System.exit(-1); 
    } 
} 

가 초기화 FUNC의 :

여기
public static void main(String[] args) { 
    MainDisplay md = new MainDisplay(); 
    md.create(); 
    md.init(); 
    md.run(); 
} 

가 생성 FUNC의 : 런타임 예외 여기 내 주요 FUNC의 을 그 일을하기 전에 디스플레이를 초기화했습니다 init 함수에서이 호출의 예외를 얻습니다.

shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader"); 

여기 createShaderProgram의 FUNC의 지금

public static int compileShader(int shaderType, String shaderCode) { 
    int shaderID = glCreateShader(shaderType); 
    glShaderSource(shaderID, shaderCode); 
    glCompileShader(shaderID); 
    int status = glGetShaderi(shaderID, GL_COMPILE_STATUS); 
    if (status == GL_FALSE) { 
     glDeleteShader(shaderID); 
     throw new RuntimeException(glGetShaderInfoLog(shaderID, glGetShaderi(shaderID, GL_INFO_LOG_LENGTH))); 
    } 
    return shaderID; 
} 

예외가이 호출에서오고 더 정확하게하기 위해 지금

public static int createShaderProgram(String vertexShaderName, String fragmentShaderName) throws FileNotFoundException, IOException { 
    ArrayList<Integer> shaders = new ArrayList(); 
    shaders.add(ShaderFactory.compileShader(GL_VERTEX_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + vertexShaderName + SHADER_EXTENSION))); 
    shaders.add(ShaderFactory.compileShader(GL_FRAGMENT_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + fragmentShaderName + SHADER_EXTENSION))); 
    return ShaderFactory.linkProgram(shaders); 
} 

예외가 compileShader의 FUNC에서오고, 여기에 FUNC입니다 컴파일 쉐이더 함수 :

int shaderID = glCreateShader(shaderType); 

openGL이 새로운 쉐이더 프로그램을 생성 할 수없는 것처럼 보입니다. 이유는 무엇입니까? 그거야? 나는 그것을 불러 내기 전에 디스플레이를 초기화했는데 무엇이 될 수 있 었는가?

답변

0

OpenGLGL 컨텍스트를 만들려면 Display.create()으로 전화해야합니다. 이것을 create() 메소드의 try 블록 끝에 추가 할 수 있습니다.

+0

나는 그것을 바보로 몰아 넣은 그런 바보입니다 ._. 감사 – user3573780