when trying to create a shader using sharpgl I'm getting the following exception
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
the code I'm currently using is
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() );
}
The exception is on the shaderProgram.Create
line. When removing or shrinking the shader source string the error does not occur but then the shader won't compile and I get the Failed to compile shader with ID 2.
error. I also found the place in the sourcecode where the exception comes from but have no idea on how to fix this or what the actual cause is.
I've fixed the problem. Going over the shader character by character their revealed to be a strange character after the in_Color
. viewing the source using notepad++ with ANSI encoding showed some characters which should not have been their.
For future reference view the source in an different encoding and check if there are any characters who should not be there.