例程初步定义了渲染器类,并模拟了Clear操作。

 

Renderer类:

  class SoftRenderer
  {
  public:
    SoftRenderer(HWND hWnd, int w, int h);
    ~SoftRenderer();

  virtual void
    Resize(int width, int height);
  virtual void
    Clear(const Float3 & color = Float3(0, 0, 0), float depth = 1.0f);
  virtual void
    Begin();
  virtual void
    End();
  virtual void
    Present();

  protected:
    SoftRendererContext * mContext;
    int mWidth, mHeight;
    Float3 * mColorBuffer;
    float * mDepthBuffer;
  };

      主要接口:

    Resize     当窗口大小改变时,需要改变渲染器内部Buffer的大小

    Clear      清屏操作

    Begin     渲染开始,(渲染开始时,渲染器可能需要一些初始化操作)

    End      渲染结束

    Present     渲染完成后,需要提交给窗口

 

App类:

  class MyApp : public App
  {
    SoftRenderer * mRenderer;

  public:
    MyApp()
    {
    }

    virtual ~MyApp()
    {
    }

    virtual void OnInit(int w, int h)
    {
      mRenderer = new SoftRenderer(mWnd, w, h);
    }

    virtual void OnUpdate()
    {
      // 开始渲染
      mRenderer->Begin();

      // 清屏
      mRenderer->Clear(Float3(1, 0, 0), 1);

      // 渲染结束
      mRenderer->End();

      // 提交
      mRenderer->Present();
    }

    virtual void OnShutdown()
    {
      delete mRenderer;
    }

    virtual void OnResize(int w, int h)
    {
    }
  };

 

注意: 不用在意Context,它只是一个内部类,用于模拟OpenGL Context的操作。

  

posted on 2017-04-16 23:23  devil86  阅读(55)  评论(0)    收藏  举报