#version 330
layout (location = 0) in vec3 pos;
void main() {
gl_Position = vec4(pos, 1);
}
#version 330
in vec4 color;
out vec4 outColor;
void main() {
gl_FragColor= vec4(1,0,1,1);
}
위 세이더 코드를 보면 알 수 있듯, 큐브를 렌더링하면 평면으로만 보인다.
int vertexShaderIndex = compileShader(gl, vertexShader, GL2.GL_VERTEX_SHADER);
int pixelShaderIndex = compileShader(gl, pixelShader, GL2.GL_FRAGMENT_SHADER)
그러면 결과적으로 각각의 쉐이더 코드를 이렇게 컴파일해서 핸들을 담아주고, 이 두 개의 쉐이더를 묶어서 처리할 쉐이더 프로그램을 생성한다.
int shaderProgramIndex = gl.glCreateProgram();
이렇게 쉐이더 프로그램이 생성됐으면, 이 쉐이더 프로그램에 각각 버텍스 쉐이더 핸들과 픽셀 쉐이더 핸들을 붙여준다.
gl.glAttachShader(shaderProgramIndex, vertexShaderIndex);
gl.glAttachShader(shaderProgramIndex, pixelShaderIndex);
gl.glLinkProgram(shaderProgramIndex); //두 쉐이더 링킹
그러면 이제 최종적으로 이 shaderProgramIndex Handle 을 사용해서 원하는 영역에서 useProgram 해주면 된다.
gl.glUseProgram(shader);
gl.glBegin(GL2.GL_QUADS);
gl.glTexCoord2f(0.0f, 0.0f);gl.glVertex2f(-0.5f, 0.5f);
gl.glTexCoord2f(3.5f, 0.0f); gl.glVertex2f(0.5f, 0.5f);
gl.glTexCoord2f(3.5f, 1.0f); gl.glVertex2f(0.5f, -0.5f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex2f(-0.5f, -0.5f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);
gl.glUseProgram(0);