저는 기본적인 게임 요구를 포함하는 게임 엔진을 만들고 있습니다. glslDevil 사용하여 내 바인딩 VBO 메서드를 InvalidValue 오류가 throw됩니다. glVertexPointer 호출 및 glEnableVertexPointer 호출로 인해 문제가 발생합니다. 정점 속성 색인이 문제의 원인입니다. 색인은 4294967295이고 15를 훨씬 넘습니다. 다른 모든 것이 완벽하게 작동합니다. 나는 OpenTK를 사용하고있다. 다음은 속성에 바인딩 메소드입니다.왜 glEnableVertexPointer와 glVertexPointer를 호출하면 InvalidValue가 발생합니까?
public void BindToAttribute(ShaderProgram prog, string attribute)
{
int location = GL.GetAttribLocation(prog.ProgramID, attribute);
GL.EnableVertexAttribArray(location);
Bind();
GL.VertexAttribPointer(location, Size, PointerType, true, TSize, 0);
}
public void Bind()
{
GL.BindBuffer(Target, ID);
}
여기 내 셰이더가 필요합니다.
버텍스 쉐이더 :
uniform mat4 transform;
uniform mat4 projection;
uniform mat4 camera;
in vec3 vertex;
in vec3 normal;
in vec4 color;
in vec2 uv;
out vec3 rnormal;
out vec4 rcolor;
out vec2 ruv;
void main(void)
{
rcolor = color;
rnormal = normal;
ruv = uv;
gl_Position = camera * projection * transform * vec4(vertex, 1);
}
조각 쉐이더 :
in vec3 rnormal;
in vec4 rcolor;
in vec2 ruv;
uniform sampler2D texture;
void main(void)
{
gl_FragColor = texture2D(texture, ruv) * rcolor;
}
내가 제대로 인덱스를 취득하지 않거나 다른 문제가 있습니까?
쉐이더가 성공적으로 컴파일되고 있습니까? 나는 당신이 최근의 표기법 ('in','out')을 부분적으로 사용하고 있음을 알아 차리지 만, 처음에는 대응하는'# version '이 없다는 것을 알았습니다. –
@RetoKoradi 모든 셰이더가 잘 컴파일됩니다. 셰이더 에러 핸들러와 glError 핸들러가 있습니다. glError 핸들러 만 InvalidValue로 시작하는 것 같습니다. 나는'layout (location = x) '을 사용해야한다고 생각한다. – user3693036
'GetAttribLocation()'도 괜찮을 것입니다. –