내 게임 엔진을 PC에서 Android로 이식하려고합니다. 도움이되는 문서가 아닌 동일한 방식으로 작동하지 않는 몇 가지 OpenGL 기능에 문제가 있습니다. 이유를 이해하십시오.GLES 2.0에서 활성 유니폼 및 버텍스 속성 조회하기
문제는 PC에서 셰이더 프로그램과 함께 제공됩니다. OpenGL을 통해 특성 및 유니폼을 쿼리하여 키 생성 된 콜렉션을 구성하므로 일반적인 매개 변수를 쉽게 전달할 수 있습니다.
void LoadUniforms()
{
int activeUniforms;
GL.GetProgram(m_ID, ProgramParameter.ActiveUniforms, out activeUniforms);
for (int i = 0; i < activeUniforms; i++)
{
int size;
ActiveUniformType type;
string name = GL.GetActiveUniform(m_ID, i, out size, out type);
ShaderUniform uniform = null;
uniform = new ShaderUniform(this, name, size, type);
if (uniform != null)
m_uniformParameters.Add(uniform);
}
}
난 항상 최대 길이와 activeUniforms 0을 얻는다 다음으로 OpenTK의 GLES 2.0로 변환을 시도 : 나는 키가있는 콜렉션을 구성하기 위해 다음과 같은 기능을 사용하여 PC에
.
void LoadUniforms()
{
int length = 0;
int maxLength = 0;
GL.GetProgram(m_ID, All.ActiveUniformMaxLength, ref maxLength);
int activeUniforms = 0;
GL.GetProgram(m_ID, All.ActiveUniforms, ref activeUniforms);
for (int i = 0; i < activeUniforms; i++)
{
All type = All.None;
int size = 0;
string name = string.Empty;
GL.GetActiveUniform(m_ID, i, maxLength, ref length, ref size, ref type, name);
ShaderUniform uniform = new ShaderUniform(this, name, size, (ShaderUniformType)type);
if (uniform != null)
m_uniformParameters.Add(uniform);
}
}
그래서 나는 어쩌면 OpenTK의 GLES 2.0 인터페이스가 완료되지 것을 의심 Android.Opengl 시도로 이동하지만 여전히 같은 문제.
이제 질문이 남았습니다. 셰이더 프로그램을 컴파일하고 링크하는 것과 활성 유니폼을 쿼리 할 수있는 것 사이에 어떤 단계가 빠졌습니까? 또한 활성 속성을 쿼리 할 때 정확히 동일한 문제가 발생합니다 (항상 최대 길이 및 개수에 대해 0을 얻음).
테스트에 사용한 버텍스 셰이더는 다음과 같습니다.
uniform mat4 World;
uniform mat4 View;
uniform mat4 Projection;
attribute vec3 Posiiton;
attribute vec2 TexCoord;
varying vec2 TexCoord0;
void main()
{
mat4 worldViewProject = Projection * View * World;
vec4 pos = vec4(Position, 1);
pos *= World;
pos *= View;
pos *= Project;
gl_Position = pos;
TexCoord0 = TexCoord;
}
는 정말 게임이 사용하는 모든 단일 쉐이더를 통해 이동하고 수동 I가 익숙해 성장했습니다 더 자동 방법으로 버릇 후 매개 변수를 매핑해야 싫어한다. 그래서 나는 그것이 정말로 내가 놓친 뭔가이기를 바란다.