c# - MonoGame - Android SamplerState.LinearWrap

标签 c# android .net xamarin.android monogame

我们使用 SamplerState.LinearWrap 来平铺我们游戏中的很多东西。我们的游戏共享一个 SpriteBatch 对象,并像这样调用 Begin():

_spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap, DepthStencilState.None, _rasterState);

这对 Windows 上的 XNA 和 iOS 上的 MonoGame 都非常有效。

问题是,在 Android 上,如果启用 LinearWrap,任何非两倍大小的纹理渲染为黑色矩形,即使它是以不需要包裹的方式绘制的。如果我们切换到 SamplerState.LinearClamp(默认设置),这些纹理将不再在 Android 上呈现黑色。如果您尝试平铺它们(在其他平台上),通常非两个纹理的幂会留下空白空间,直到下一个最大的两个纹理的幂。

这是 Android 上 OpenGL 的限制,还是 MonoGame 中的问题?我不想将每个纹理的大小调整为 2 的幂,但如果这是唯一的选择(或者有充分的理由这样做),我们会这样做。

最佳答案

通过 MonoGame 挖掘,我在 ESTexture2D.cs 中找到了这个:

                _width = imageSource.Width;
                _height = imageSource.Height;

                // There are rules for npot textures that we must abide by (wrap = ClampToEdge and filter = Nearest or Linear)
                if (!MathHelper.IsPowerOfTwo(_width) || !MathHelper.IsPowerOfTwo(_height))
                {
                    //filter = ALL11.Linear;
                    //wrap = ALL11.ClampToEdge;
                    _width = (int)Math.Pow(2, Math.Min(10, Math.Ceiling(Math.Log10(imageSource.Width) / Math.Log10(2))));
                    _height = (int)Math.Pow(2, Math.Min(10, Math.Ceiling(Math.Log10(imageSource.Height) / Math.Log10(2))));
                }

我注释掉了对 filterwrap 的更改,并将大小调整为 2 的幂。

这解决了我的问题,但我不确定是否对 MonoGame 有效。我不知道如果您使用 SamplerState.LinearClamp 会有什么影响。

关于c# - MonoGame - Android SamplerState.LinearWrap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763826/

相关文章:

c# - Xamarin Android 渲染器中的长触手势

android - 通过 Android 中的 asset 文件夹中的 Intent 播放视频

java - 如何制作这个特殊的 View - com.android.colorpicker.ColorPickerPalette?

Linux 上的 Java SSL 连接重置,Windows 工作正常

c# - 在 .NET 中操作 Excel xls 和 xlsx

c# - 将 C# .Net 加密/解密算法迁移到 Ruby

c# - "The operation is not valid for the state of the transaction"错误和交易范围

c# - 如何自定义日期格式

android - java.lang.IndexOutOfBoundsException:无效的索引2,大小为2

c# - 模型绑定(bind)是否通过 asp.net mvc 中的查询字符串工作