ImageRenderer::~ImageRenderer()
{
+ // Note - GL cleanup is done from render-thread in OnRemove()
+}
+
+void ImageRenderer::OnRemove()
+{
if ( mTextureId > 0 )
{
mTextureCacheDELETEME->RemoveObserver(mTextureId, this);
}
GlCleanup();
+
+ // Set back to defaults
+ mDataProvider = NULL;
+ mShader = NULL;
+ mTexture = NULL;
+ mBorder = Vector4( 0.45, 0.45, 0.1, 0.1 );
+ mPixelArea = PixelArea();
+ mGeometrySize = Vector2();
+ mTextureId = 0;
+ mBlendingOptions.SetBlendFunc( DEFAULT_BLENDING_SRC_FACTOR_RGB, DEFAULT_BLENDING_DEST_FACTOR_RGB, DEFAULT_BLENDING_SRC_FACTOR_ALPHA, DEFAULT_BLENDING_DEST_FACTOR_ALPHA );
+ mBlendingOptions.SetBlendEquation( DEFAULT_BLENDING_EQUATION_RGB, DEFAULT_BLENDING_EQUATION_ALPHA );
+ mBlendingOptions.SetBlendColor( Vector4::ZERO );
+ mMeshType = ImageRenderer::QUAD;
+ mIsMeshGenerated = false;
+ mBorderInPixels = false;
+ mUseBlend = false;
+ mUsePixelArea = false;
}
void ImageRenderer::SetTextureId( ResourceId textureId )
mIsMeshGenerated = false;
}
+void ImageRenderer::SetUseBlend( bool useBlend )
+{
+ mUseBlend = useBlend;
+}
+
+void ImageRenderer::SetBlendingOptions( unsigned int options )
+{
+ mBlendingOptions.SetBitmask( options );
+}
+
+void ImageRenderer::SetBlendColor( const Vector4& color )
+{
+ mBlendingOptions.SetBlendColor( color );
+}
+
void ImageRenderer::CalculateMeshData( MeshType type, const Vector2& targetSize, bool usePixelArea )
{
mMeshType = type;
bool ImageRenderer::CheckResources()
{
+ if( mDataProvider == NULL )
+ {
+ return false;
+ }
+
if( mTexture == NULL )
{
if ( mTextureCacheDELETEME )
}
}
+void ImageRenderer::DoSetBlending(Context& context, BufferIndex bufferIndex )
+{
+ // Enables/disables blending mode.
+ context.SetBlend( mUseBlend );
+
+ // Set the blend color
+ const Vector4* const customColor = mBlendingOptions.GetBlendColor();
+ if( customColor )
+ {
+ context.SetCustomBlendColor( *customColor );
+ }
+ else
+ {
+ context.SetDefaultBlendColor();
+ }
+
+ // Set blend source & destination factors
+ context.BlendFuncSeparate( mBlendingOptions.GetBlendSrcFactorRgb(),
+ mBlendingOptions.GetBlendDestFactorRgb(),
+ mBlendingOptions.GetBlendSrcFactorAlpha(),
+ mBlendingOptions.GetBlendDestFactorAlpha() );
+
+ // Set blend equations
+ context.BlendEquationSeparate( mBlendingOptions.GetBlendEquationRgb(),
+ mBlendingOptions.GetBlendEquationAlpha() );
+
+}
+
void ImageRenderer::UpdateVertexBuffer( Context& context, GLsizeiptr size, const GLvoid *data )
{
// create/destroy if needed/not needed.
mMeshType( ImageRenderer::QUAD ),
mIsMeshGenerated( false ),
mBorderInPixels( false ),
+ mUseBlend( false ),
mUsePixelArea( false )
{
}