budnhead/org.nhengine/graphics/GlobalDefaults.cs

111 lines
2.1 KiB
C#

using System;
using OpenTK.Graphics.OpenGL;
namespace org.nhengine.graphics
{
public class GlobalDefaults
{
private static GlobalDefaults _instance = new GlobalDefaults();
public static GlobalDefaults instance(){
return _instance;
}
private Shader defVertexShader,
defFragmentShader;
private ShaderProgram
defShaderProgram;
private GLCamera activeCamera;
private GlobalDefaults(){
Console.WriteLine("GlobalDefaults: Shader Version: {0}", GL.GetString(StringName.ShadingLanguageVersion));
defVertexShader = new Shader(OpenTK.Graphics.OpenGL.ShaderType.VertexShader, defVertexShaderSource);
defFragmentShader = new Shader(OpenTK.Graphics.OpenGL.ShaderType.FragmentShader, defFragmentShaderSource);
defShaderProgram = new ShaderProgram(defVertexShader, defFragmentShader);
activeCamera = new GLCamera();
}
public ShaderProgram DefaultShaderProgram {
get { return this.defShaderProgram;}
}
public Shader DefaultVertexShader
{
get { return defVertexShader; }
}
public Shader DefaultFragmentShader
{
get { return defFragmentShader; }
}
public GLCamera ActiveCamera {
get { return this.activeCamera; }
set { this.activeCamera = value; }
}
private string defVertexShaderSource = @"#version 330
in vec3 iv_position;
in vec4 iv_color;
in vec3 iv_normal;
in vec2 iv_uv;
uniform mat4 mTranslation;
uniform mat4 mRotation;
uniform mat4 mWorld;
uniform mat4 mDistance;
uniform mat4 mCamera;
uniform mat4 mProjection;
uniform mat4 mComplete;
out vec4 color;
out vec3 norm;
out vec2 uv;
void main()
{
gl_Position = mComplete * vec4( iv_position, 1 );
norm = normalize( ( mRotation * vec4( iv_normal, 1 ) ).xyz );
vec3 camray = normalize( -gl_Position.xyz );
float cosTheta = dot( norm , camray );
float visibility = 1.0;
if (cosTheta < 0){
visibility = 1.0;
}
color = vec4( iv_color.xyz * (0.5 + (0.5 * cosTheta * cosTheta)), 0.5f );
}
";
private string defFragmentShaderSource = @"#version 330
in vec4 color;
in vec3 norm;
in vec2 uv;
out vec4 _color;
void main()
{
_color = color;
gl_FragDepth = gl_FragCoord.z;
}
";
}
}