Name

SDL_SetRowStretchCode, SDL_PutRowStretchCode, SDL_RunRowStretchCode, SDL_StretchRow1, SDL_StretchRow2, SDL_StretchRow3, SDL_StretchRow4 — (src/SDL_stretchcode.h)

Synopsis

 #include <SDL_stretch.h>
unsigned char* SDL_SetRowStretchCode(,  
 ,  
 ); 
int src_w;
int dst_w;
int bpp;
 
unsigned char* SDL_PutRowStretchCode(,  
 ,  
 ,  
 ,  
 ); 
unsigned char* buffer;
int buflen;
int src_w;
int dst_w;
int bpp;
 
void SDL_RunRowStretchCode(,  
 ,  
 ); 
unsigned char* buffer;
unsigned char* src;
unsigned char* dst;
 
void SDL_StretchRow1(,  
 ,  
 ,  
 ); 
Uint8 *src;
int src_w;
Uint8 *dst;
int dst_w;
 
void SDL_StretchRow2(,  
 ,  
 ,  
 ); 
Uint16 *src;
int src_w;
Uint16 *dst;
int dst_w;
 
void SDL_StretchRow3(,  
 ,  
 ,  
 ); 
Uint8 *src;
int src_w;
Uint8 *dst;
int dst_w;
 
void SDL_StretchRow4(,  
 ,  
 ,  
 ); 
Uint32 *src;
int src_w;
Uint32 *dst;
int dst_w;
 

Description

The SetRowStretchCode is a wrapper around PutRowStretchCode that uses the Adress and Size of the shared SDL_TheRowStretchCode buffer. The PutRowStretchCode will fill the given buffer with an assembler stream that should be called with SDL_RunRowStretchCode. The assembler stream is usually faster as all the scale decisions are done in advance of the execution. This helps when a RunCode is done multiple times with the same src_w/dst_w/bpp pair. All the pixel-get and pixel-set calls are unrolled in that buffer. Therefore, the buffer should be big enough - as a rule of thumb use a buffer of size (src_w+dst_w)*5

If PutCode or SetCode fails, a NULL is returned and SDL_SetError. Otherwise, the start adress of the machine code buffer is returned, which is also the input argument of PutCode and RunCode.

If SDL_SetRowStretchCode fails, the SDL_StretchRow1 function must be used instead. The SDL_StretchRow1 function and its cousins are singular routines that work in a tight loop to scale a single row. The number specifies the byte-width of each pixel (it is not a bit-width!).