ПроЭктировщик
Регистрация: 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
|