2015-01-04 6 views
0

를 호출 할 수 없습니다sharpgl이 확장 기능 glShaderSource

System.Exception: Cannot invoke extension function glShaderSource ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Cannot marshal: Encountered unmappable character. 
    at System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToNative(IntPtr pMarshalState, Object& pManagedHome, IntPtr pNativeHome) 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
    at System.Delegate.DynamicInvokeImpl(Object[] args) 
    at System.Delegate.DynamicInvoke(Object[] args) 
    at SharpGL.OpenGL.InvokeExtensionFunction[T](Object[] args) in c:\Repositories\GitHub\sharpgl\source\SharpGL\Core\SharpGL\OpenGLExtensions.cs:line 66 
    --- End of inner exception stack trace --- 
    at SharpGL.OpenGL.InvokeExtensionFunction[T](Object[] args) in c:\Repositories\GitHub\sharpgl\source\SharpGL\Core\SharpGL\OpenGLExtensions.cs:line 70 
    at SharpGL.OpenGL.ShaderSource(UInt32 shader, String source) in c:\Repositories\GitHub\sharpgl\source\SharpGL\Core\SharpGL\OpenGLExtensions.cs:line 1296 
    at SharpGL.Shaders.Shader.Create(OpenGL gl, UInt32 shaderType, String source) in c:\Repositories\GitHub\sharpgl\source\SharpGL\Core\SharpGL\Shaders\Shader.cs:line 20 
    at SharpGL.Shaders.ShaderProgram.Create(OpenGL gl, String vertexShaderSource, String fragmentShaderSource, Dictionary`2 attributeLocations) in c:\Repositories\GitHub\sharpgl\source\SharpGL\Core\SharpGL\Shaders\ShaderProgram.cs:line 26 

내가 현재 사용하고 코드는

try 
{ 
    // Create the shader program. 
    var vertexShaderSource = @"#version 150 core 
in vec3 in_Position; 
in vec3 in_Color; 
out vec3 pass_Color; 
uniform mat4 projectionMatrix; 
uniform mat4 viewMatrix; 
uniform mat4 modelMatrix; 
void main(){gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);pass_Color = in_Color;}"; 

    var fragmentShaderSource = @"#version 150 core 
in vec3 pass_Color; 
out vec4 out_Color; 
void main(void){ out_Color = vec4(pass_Color, 1.0); }"; 

    shaderProgram = new ShaderProgram(); 
    shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); // <- exception 
    shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); 
    shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); 
    shaderProgram.AssertValid(gl); 
} 
catch (Exception e) 
{ 
    System.Diagnostics.Debug.Write(e.ToString()); 
} 

는 예외가된다 shaderProgram.Create 행 셰이더 소스 문자열을 제거하거나 축소 할 때 오류가 발생하지 않지만 셰이더가 컴파일되지 않고 Failed to compile shader with ID 2. 오류가 발생합니다. 나는 또한 예외가 어디 from 오는 소스 코드에서 장소를 찾았지만,이 문제를 해결하는 방법이나 실제 원인이 뭔지에 대한 아이디어가 없습니다.

+0

이것이 증상을 설명 할 지 모르지만 셰이더가 제대로 컴파일되지 않습니다. 'in_Position'을 선언하고,'in_Potision'을 사용하십시오. –

+0

좋은 캐치지만 셰이더의 컴파일에 도달하지 않기 때문에 문제가 해결되지 않았습니다. – ColmanJ

답변

0

문제가 해결되었습니다. 캐릭터에 의한 쉐이더 캐릭터의 이동은 in_Color 이후의 이상한 캐릭터로 밝혀졌습니다. 메모장 + +를 사용하여 ANSI 인코딩을 사용하여 소스를 보았을 때 일부 문자는 보이지 않아야했습니다.

나중에 참조 할 때 다른 인코딩으로 소스를보고 거기에 없어야하는 문자가 있는지 확인하십시오.