MonoGame/クラスライブラリ/SurfaceFormat列挙体

提供: MonoBook
ナビゲーションに移動 検索に移動

SurfaceFormat列挙体は、サーフェイス(Texture2DRenderTarget2D)のデータ形式を指定するための列挙体である。

名前空間[編集 | ソースを編集]

Microsoft.Xna.Framework.Graphics名前空間

構文[編集 | ソースを編集]

public enum SurfaceFormat

フィールド[編集 | ソースを編集]

概要
Alpha8 8ビットアルファのみ
Bgr32 WPF D3DImageが採用している形式。詳しくは知らん。
Bgr32SRgb 青緑赤それぞれ8ビットと未使用8ビットの計32ビットのsRGB形式。
Bgr565 青5ビット、緑6ビット、赤5ビットの計16ビット
Bgra32 WPF D3DImageが採用している形式。詳しくは知らん。
Bgra32SRgb 青緑赤が各8ビットとアルファ8ビットの計32ビットのsRGB形式。
Bgra4444 青緑赤アルファが各4ビットの計16ビット形式
Bgra5551 青緑赤が各5ビットとアルファが1ビットの計16ビット形式
Color 定番の32ビットABGR形式。古いXNAはARGB並びだったが末期のXNAとMonoGameはABGR。SurfaceFormatを指定しないTexture2DRenderTarget2Dはこれになる。最重要形式。
ColorSRgb 32ビットRGBA形式。sRGB
Dxt1 DXT1圧縮形式。
Dxt1SRgb DXT1圧縮形式。
Dxt1a DXT1圧縮形式。
Dxt3 DXT3圧縮形式。
Dxt3SRgb DXT3圧縮形式。
Dxt5 DXT5圧縮形式。
Dxt5SRgb DXT5圧縮形式。
HalfSingle 16ビットR浮動小数点数形式。
HalfVector2 32ビットRG浮動小数点数形式。
HalfVector4 64ビットARGB浮動小数点数形式。
HdrBlendable HDR浮動小数点数形式
NormalizedByte2 U8ビット、V8ビットの計16ビットのバンプマップ形式。符号付き整数な点に注意。
NormalizedByte4 U16ビット、V16ビットの計32ビットのバンプマップ形式。符号付き整数な点に注意。
Rg32 32ビットRG形式
RgbEtc1 エリクソンのテクスチャ圧縮形式(Android)。
RgbPvrtc2Bpp PowerVRテクスチャ圧縮形式(iOSとAndroid)。
RgbPvrtc4Bpp PowerVRテクスチャ圧縮形式(iOSとAndroid)。
Rgba1010102 32ビットRGBA形式、赤緑青が各10ビット、アルファチャンネルが2ビット。Radeon系が推していたディープカラー形式。
Rgba64 64ビットRGBA形式、赤緑青アルファが各16ビット。GeForce系が推していたディープカラー形式。
RgbaAtcExplicitAlpha ATC/ATITC圧縮形式(Android)
RgbaAtcInterpolatedAlpha ATC/ATITC圧縮形式(Android)
RgbaPvrtc2Bpp PowerVRテクスチャ圧縮形式(iOSAndroid)。
RgbaPvrtc4Bpp PowerVRテクスチャ圧縮形式(iOSAndroid)。
Single IEEE32ビットR浮動小数点数フォーマット。 各チャンネルは32ビット浮動小数点数(float)。
Vector2 IEEE64ビットRG浮動小数点数フォーマット。 各チャンネルは32ビット浮動小数点数(float)。
Vector4 IEEE128ビットRGBA浮動小数点数フォーマット。 各チャンネルは32ビット浮動小数点数(float)。

使用例[編集 | ソースを編集]

SurfaceFormat.Color形式のデータを動的に作る。 データの並びは「ABGR」なので注意。

TitleContainerクラスあたりでJPEGPNGなどの画像ファイルを開き、自前でデコードしてビットマップからテクスチャを作る場合などはこの方法を使う。たとえばスマホゲームでよくある初回起動時に画像などを別途ダウンロードさせる方式は、アプリに素材を埋め込むコンテンツパイプライン方式では対応できないため、面倒でもこの方法を使う必要がある。

using System;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace CreateDataSample
{
    public class Game1 : Game
    {
        GraphicsDeviceManager _graphics;
        SpriteBatch _spriteBatch;
        Texture2D _texture;

        public Game1()
        {
            _graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        protected override void Initialize()
        {
			// マウスカーソルを表示する
			this.IsMouseVisible = true;

			// ウインドウサイズを変更する
			_graphics.PreferredBackBufferWidth = 640;
			_graphics.PreferredBackBufferHeight = 480;
			_graphics.ApplyChanges();

            base.Initialize();
        }

        protected override void LoadContent()
        {
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            // テクスチャのサイズは「2の倍数」でなくても怒られない
            int w = _graphics.PreferredBackBufferWidth;
            int h = _graphics.PreferredBackBufferHeight;

            // テクスチャを生成する
            _texture = new Texture2D(GraphicsDevice, w, h);

            // ビットマップを生成
            // ここではint配列を使っているが、実際にはColor構造体配列を使った方がいい。
            var data = new int[w * h];
            for (int y = 0, k = 0; y < h; y++)
            {
                for (int x = 0; x < w; x++, k++)
                {
                    // MonoGameのSurfaceFormat.Colorは「ABGR並び」
                    byte a = 0xFF;
                    byte r = (byte)(0xFF * ((float)x / w));
                    byte g = (byte)(0xFF * ((float)y / h));
                    byte b = 0;
                    data[k] = (a << 24) | (b << 16) | (g << 8) | (r << 0);
                }
            }

            // テクスチャにぶち込む
            _texture.SetData(data);
        }

        protected override void Update(GameTime gameTime)
        {
#if !__IOS__ && !__TVOS__
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();
#endif
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            _graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

            _spriteBatch.Begin();
            _spriteBatch.Draw(_texture, new Vector2(0, 0), Color.White);
            _spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}

関連項目[編集 | ソースを編集]