예제 #1
0
        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;
            }
        }
예제 #2
0
        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));
        }