버텍스 쉐이더를 사용하여 투영을 구현하려고합니다.같은 프로그램에서 여러 버텍스 쉐이더 사용하기
처리 할 별도의 버텍스 쉐이더를 사용하여 gl_Position을 설정하고 프래그먼트 쉐이더에 필요한 값을 설정하는 다른 버텍스 쉐이더가있는 방법이 있습니까?
문제점 첫 번째 버텍스 쉐이더의 main() 함수 만 호출된다는 문제가 있습니다.
편집 : 여러 독립 셰이더를 사용하는 대신 셰이더 소스를 결합하여 작동하도록하는 방법을 찾았습니다. 이 방법이 최선의 방법인지 확실하지 않지만 잘 작동하는 것 같습니다.
main_shader.vsh
attribute vec4 src_color;
varying vec4 dst_color; // forward declaration
void transform(void);
void main(void)
{
dst_color = src_color;
transform();
}
transform_2d.vsh
attribute vec4 position;
void transform(void)
{
gl_Position = position;
}
는 다음과 같은 사용 :
char merged[2048];
strcat(merged, main_shader_src);
strcat(merged, transform_shader_src);
// create and compile shader with merged as source
컨텍스트에 따라 다른 셰이더를 사용한다고 생각할 수있는 유일한 방법은 자주 사용하는 셰이더 프로그램을 전환하는 것입니다 ([glUseProgram'] (http://www.opengl.org/sdk/docs/man3/). xhtml/glUseProgram.xml)). – darvids0n
셰이더를 수동으로 연결하지 않아도됩니다. 'glShaderSource'가 대신 해 주므로,'count' 인수로 2를, 문자열 인수 ('char **')를'string' 인수로, array length ('int *')는'length' 인자로 사용됩니다. – Triang3l