2012-08-01 2 views
1

우리는 게임에서 많은 것들을 바둑판 식으로 배열하기 위해 SamplerState.LinearWrap을 사용합니다. 우리의 게임은 하나의 SpriteBatch 객체를 공유하고,이 같은 Begin()를 호출이 iOS에서 MonoGame뿐만 아니라 Windows에서 XNA 위대한 작품MonoGame - 안드로이드 SamplerState.LinearWrap

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

.

문제는 안드로이드에서 LinearWrap이 켜져 있으면 랩핑 할 필요가없는 방식으로 그려지더라도 크기가 두 개인 크기가 아닌 텍스쳐가 검은 색 사각형으로 렌더링된다는 것입니다. SamplerState.LinearClamp (기본값)으로 전환하면 Android에서 이러한 질감이 더 이상 검은 색으로 렌더링되지 않습니다. 일반적으로 2 개의 텍스처가없는 경우, (다른 플랫폼에서) 타일링을 시도하면 다음으로 큰 2의 제곱까지 빈 공간이 남습니다.

Android에서 OpenGL의 제한 사항입니까, 아니면 MonoGame의 문제입니까? 모든 텍스처의 크기를 2의 제곱으로 크기를 조정하는 것은 싫지만, 유일한 옵션 인 경우 (또는 매우 좋은 이유가있는 경우) 수행 할 것입니다. MonoGame 통해 파고

답변

2

, 난 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)))); 
       } 

I는 filterwrap의 변경에서 주석 및 이들의 전원으로 크기를 조정.

이 문제는 해결되었지만 MonoGame에 대한 유효한 수정 사항이 있는지 확실하지 않습니다. SamplerState.LinearClamp을 사용하면 어떤 효과가 있는지 알 수 없습니다.

2

나는 이것이 develop3d 브랜치에서 수정되었다고 생각한다.

+0

감사합니다. 도미니크, 조만간 develop3d로 전환 할 예정입니다. – jonathanpeppers