private void Bind(ShaderStage Stage) { if (Stage.Type == GalShaderType.Geometry) { //Enhanced layouts are required for Geometry shaders //skip this stage if current driver has no ARB_enhanced_layouts if (!OGLExtension.HasEnhancedLayouts()) { return; } } switch (Stage.Type) { case GalShaderType.Vertex: Current.Vertex = Stage; break; case GalShaderType.TessControl: Current.TessControl = Stage; break; case GalShaderType.TessEvaluation: Current.TessEvaluation = Stage; break; case GalShaderType.Geometry: Current.Geometry = Stage; break; case GalShaderType.Fragment: Current.Fragment = Stage; break; } }
public static TextureWrapMode GetTextureWrapMode(GalTextureWrap Wrap) { switch (Wrap) { case GalTextureWrap.Repeat: return(TextureWrapMode.Repeat); case GalTextureWrap.MirroredRepeat: return(TextureWrapMode.MirroredRepeat); case GalTextureWrap.ClampToEdge: return(TextureWrapMode.ClampToEdge); case GalTextureWrap.ClampToBorder: return(TextureWrapMode.ClampToBorder); case GalTextureWrap.Clamp: return(TextureWrapMode.Clamp); } if (OGLExtension.HasTextureMirrorClamp()) { switch (Wrap) { case GalTextureWrap.MirrorClampToEdge: return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt); case GalTextureWrap.MirrorClampToBorder: return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt); case GalTextureWrap.MirrorClamp: return((TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt); } } else { //Fallback to non-mirrored clamps switch (Wrap) { case GalTextureWrap.MirrorClampToEdge: return(TextureWrapMode.ClampToEdge); case GalTextureWrap.MirrorClampToBorder: return(TextureWrapMode.ClampToBorder); case GalTextureWrap.MirrorClamp: return(TextureWrapMode.Clamp); } } throw new ArgumentException(nameof(Wrap)); }