Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » Draw, Display, Images, Bitmaps, Icons » BufferPainter::Fill(Image,...) optimization question
Re: BufferPainter::Fill(Image,...) optimization question [message #54161 is a reply to message #54159] Thu, 04 June 2020 18:49 Go to previous messageGo to previous message
mirek is currently offline  mirek
Messages: 14255
Registered: November 2005
Ultimate Member
So this is (likely) the correct code:

void SpanFiller::Render(int val, int len)
{
	if(val == 0) {
		t += len;
		s += len;
		return;
	}
	if(alpha != 256)
		val = alpha * val >> 8;
	if(val == 256 && ss->opaque) {
		const RGBA *e = s + len;
		const RGBA *s0 = s;
		while(s < e && s->a == 0)
			s++;
		t += s - s0;
		s0 = s;
		while(s < e && s->a != 255)
			s++;
		AlphaBlend(t, s0, val, s - s0);
		t += s - s0;
		s0 = s;
		while(s < e && s->a == 255)
			s++;
		memcpy32(t, s0, s - s0);
		t += s - s0;
		s0 = s;
		while(s < e && s->a)
			s++;
		AlphaBlend(t, s0, val, s - s0);
	}
	else
		AlphaBlend(t, s, val, len);
	t += len;
	s += len;
}



Unfortunately it is then slower than new SSE2 AlphaBlend path, so...

Mirek
 
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Another BufferPainter optimization
Next Topic: Paint problems when using transparency
Goto Forum:
  


Current Time: Mon Apr 28 23:34:42 CEST 2025

Total time taken to generate the page: 0.03966 seconds