111 lines
2.1 KiB
C#
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;
|
|
}
|
|
|
|
";
|
|
|
|
|
|
}
|
|
|
|
}
|