Показать сообщение отдельно
Старый 09.12.2009, 13:00   #13
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: Software Rasterizer

Обдумал класс драйвера,щас пишу софтварный драйвер,а сам растеризатор,пардон,GAPI,да да оно самое будет уже юзать класс драйвера

class BAPI Driver
{
public:

  enum{
    FMT_R = 1 << 0,
    FMT_RF = 1 << 1,
    FMT_RGB = 1 << 2,
    FMT_RGBF = 1 << 3,
    FMT_RGBA = 1 << 4,
    FMT_RGBAF = 1 << 5,
  };

  enum{
    FLOAT = 1 << 0,
    FLOAT2 = 1 << 1,
    FLOAT3 = 1 << 2,
    FLOAT4 = 1 << 3,
  };

  enum{
    PT_TRIANGLE_LIST = 1 << 0,
    PT_LINE_LIST = 1 << 1,
    PT_POINT_LIST = 1 << 2,
  };


  enum{
    FILL_SOLID = 1 << 0,
    FILL_POINT = 1 << 1,
    FILL_WIREFRAME = 1 << 2,
  };
  
  enum{
    CMP_NEVER = 1 << 0,
    CMP_EQUAL = 1 << 1,
    CMP_NOTEQUAL = 1 << 2,
    CMP_LESS = 1 << 3,
    CMP_LESSEQUAL = 1 << 4,
    CMP_GREATEREQUAL = 1 << 5,
    CMP_GREATER = 1 << 6,
    CMP_ALWAYS = 1 << 7,
  };

  /* Sample vertex format
    int vertexFormat[3];
    vertexFormat[0] = FLOAT3; //POSITION
    vertexFormat[1] = FLOAT3; //NORMAL
    vertexFormat[2] = FLOAT2; //TEXCOORD
  */

  Driver(){}
  virtual ~Driver(){}

  virtual const char* getLastError()const = 0;

  virtual const char* getDriverCodename()const{ return "Unknown-Driver"; }

  virtual void createBuffer( DriverPtr index , unsigned int length ) = 0;
  virtual void createTexture1D( DriverPtr index , unsigned int size , int format ) = 0;
  virtual void createTexture2D( DriverPtr index , unsigned int width , unsigned int height , unsigned int num_levels , int format ) = 0;
  virtual void createTextureCUBE( DriverPtr index , unsigned int width , unsigned int height , unsigned int num_levels , int format ) = 0;    
  virtual void createVertexFormat( DriverPtr index , int* format , int count ) = 0;
  virtual void createVertexShader( DriverPtr index , const char* source ) = 0;
  virtual void createPixelShader( DriverPtr index , const char* source ) = 0;


  virtual void texImage1D( DriverPtr index , const void* data ) = 0;
  virtual void texImage2D( DriverPtr index , const void* data , unsigned int level ) = 0;
    virtual void texImageCUBE( DriverPtr index , const void* data , unsigned int face , unsigned int level ) = 0;

  virtual void texParameterF( DriverPtr index , int pram , const float value ) = 0;
  virtual void texParameterI( DriverPtr index , int pram , const int value ) = 0;
  virtual void texParameterB( DriverPtr index , int pram , const bool value ) = 0;


  virtual void setVertexShader( DriverPtr index ) = 0;
  virtual void setPixelShader( DriverPtr index ) = 0;
  virtual void setVertexFormat( DriverPtr index ) = 0;
  virtual void setVertexBuffer( DriverPtr index , unsigned int stride ) = 0;
  virtual void setIndexBuffer( DriverPtr index , bool index32 ) = 0;
  
  virtual void setPrimitiveTopology( int topology ) = 0;
  virtual void getPrimitiveTopology( int* topology ) = 0;

  virtual void setScissor( int x , int y , int width , int height ) = 0;
  virtual void getScissort( int *x , int *x , int *width , int *height ) = 0;

  virtual void setViewport( int x , int y , int width , int height ) = 0;
  virtual void getViewport( int *x , int *y , int *width , int *height ) = 0;

  virtual void setVertexElementLocation( int element_index , const char* name );

  virtual void getUniformLocation( int *index ,  const char* name );
  virtual void setUniformF( int index , const float value ) = 0;
  virtual void setUniformB( int index , const bool value ) = 0;
  virtual void setUniformI( int index , const int value ) = 0;
  virtual void setUniformV2( int index , const float2& vector2 ) = 0;
  virtual void setUniformV3( int index , const float3& vector2 ) = 0;
  virtual void setUniformV4( int index , const float4& vector2 ) = 0;
  virtual void setUniformM( int index , const float4x4& matrix ) = 0;
  virtual void setUniformS( int index , DriverPtr index ) = 0;
  virtual void getUniformF( int index , float* value ) = 0;
  virtual void getUniformB( int index , bool* value ) = 0;
  virtual void getUniformI( int index , int* value ) = 0;
  virtual void getUniformV2( int index , float2* vector2 ) = 0;
  virtual void getUniformV3( int index , float3* vector2 ) = 0;
  virtual void getUniformV4( int index , float4* vector2 ) = 0;
  virtual void getUniformM( int index , float4x4* matrix ) = 0;
  virtual void getUniformS( int index , DriverPtr index ) = 0;

  virtual void setColorBuffer( int index , DriverPtr texture_ptr );
  virtual void setDepthBuffer( DriverPtr surface_index );

  virtual void drawPrimitive( unsigned int start , unsigned int primitiveCount ) = 0;
   virtual void drawIndexedPrimitive( unsigned int start , unsigned int primitiveCount ) = 0;
       

  virtual void setDepthTest( bool enable , bool early ) = 0;
  virtual void getDepthTest( bool* enable , bool* early ) = 0;

  virtual void setDepthWrite( bool enable ) = 0;
  virtual void getDepthWrite( bool* enable ) = 0;

  virtual void setDepthFunc( int func ) = 0;
  virtual void getDepthFunc( int* func )  = 0;

  virtual void setColorWrite( bool enable ) = 0;
  virtual void getColorWrite( bool enable ) = 0;

  virtual void setFillMode( int mode ) =  0;
  virtual void getFillMode( int* mode ) = 0;

  virtual void setAlphaTest( bool enable ) = 0;
  virtual void getAlphaTest( bool* enable ) = 0;

  /* Биндинг элементов вершины с шейдером

  driver->setVertexElementLocation( 0 , "position" );
  driver->setVertexElementLocation( 1 , "normal" );
  driver->setVertexElementLocation( 2 , "texcoord" );

    */
};
Ничего не говорите,суровый моё второе имя xD
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (09.12.2009)