レンダリングディスクリプタ

今回はレンダリング処理で使いまわしのできる
ようにするものを書こうかと思います。

レンダリング関係のプログラムは
重複したコードをもっとも生む
ところです。

重複したコードをできるだけ減らす努力をしたいものですね。

早速コードです

// シェーダークラス
class IShader
{
public :
    virtual ~IShader() {}
    
    // パラメータ設定類
};

// レンダリングディスクリプタ
class IRenderDesc
{
public :
    virtual ~IRenderDesc() {}
    
    virtual bool set( IShader& shader ) = 0;
};

// レンダラ
class IRenderer
{
public :
    virtual ~IRenderer() {}
    
    virtual void render( const IRenderDesc& desc ) = 0;
};

// テスト
class TestRenderDesc : public IRenderDesc
{
public :
    // レンダリングに必要なパラメータ
    
    bool set( IShader& shader )
    {
        // シェーダーパラメータ設定
    }
};

// 使用例
void TestCharacter::draw( IRenderer& renderer )
{
    TestRenderDesc  desc;
    desc.model      = _model;
    desc.animation  = _animation;
    desc.frame      = _frame;
    desc.matrix     = _matrix;
    // ほかのいろいろのパラメータ設定
    
    renderer.render( desc );
}

ポイント

1:複雑な(面倒な)シェーダーに送る処理を記述しておく。

2:シェーダーに送る処理を記述したクラス変数にパラメータを設定してレンダラーに送る。

3:描画される


シェーダーの種類が増えるたびに記述するクラス数は増えますが、
ここは汎用的にしないほうが、そのシェーダーにどのパラメータ
が必要なのかをわかりやすくする

汎用や凝り性はやりすぎると混乱を招きます。
複数人でやるとさらにカオスな状態に・・・

シェーダーのことは気が向いたらやろうかと思います。
最終更新:2008年11月09日 19:43
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。