Dark Bit Factory & Gravity

PROGRAMMING => Freebasic => Topic started by: Shockwave on March 14, 2011

Title: Snippet - Fast Clip Image To Screen
Post by: Shockwave on March 14, 2011
Here's an untidy little snippet to clip images.

You'll need to potch with it to make it work in your own stuff but it's a nice thing if you're going to be drawing lots of big bobs.

Code: [Select]
SUB DRAWTEDDY(BYVAL TX AS INTEGER, BYVAL TY AS INTEGER)

' Draw The Teddy Buffer To The Screen, X Clipped Before Draw Loops For Speed
' Y Clip Is Inside Draw Loop As It Doesn't Matter!


    DIM AS INTEGER XX,YY,DX
    DIM PP1 AS UINTEGER PTR
    DIM PP2 AS UINTEGER PTR

    DIM AS INTEGER CLIPL,CLIPR
       
            ' X Clipping
            ' Check the left-hand side first.
           
            IF TX<0 THEN               
                CLIPL=(-TX)
                CLIPR=TEDX
                TX=0               
            ELSE               
                CLIPL=0               
                CLIPR=TEDX
            END IF           
            ' Check The Right-Hand Side           
            IF (TEDX+TX)>XRES THEN
                CLIPR=(TEDX-((TEDX+TX)-XRES))
            END IF           
            ' Out Of Bounds!           
            IF CLIPL>TEDX THEN
            CLIPL=0
            CLIPR=0
            END IF
            IF CLIPR<0 THEN
                CLIPR=0
            END IF

    FOR YY=0 TO TEDY-1
       
       
            IF TY>0 AND TY<YRES THEN

                PP1=@TEDDYBUFFER1(CLIPL+(YY*TEDX))       
                DX=TX
                PP2=@BUFFER(DX+(TY*XRES))

            FOR XX=CLIPL TO CLIPR-1                                 
               
                *PP2=*PP1                                         
                PP1+=1
                PP2+=1
               
            NEXT           
            END IF
            TY+=1
    NEXT

END SUB