hedgewars/uRender.pas
changeset 6580 6155187bf599
parent 6394 f0a9042e7387
child 6688 b2084a00a4cf
equal deleted inserted replaced
6579:fc52f7c22c9b 6580:6155187bf599
    64 procedure DrawFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    64 procedure DrawFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
    65 var rr: TSDL_Rect;
    65 var rr: TSDL_Rect;
    66     _l, _r, _t, _b: real;
    66     _l, _r, _t, _b: real;
    67     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
    67     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
    68 begin
    68 begin
    69 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then exit;
    69 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then
       
    70     exit;
    70 
    71 
    71 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
    72 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
    72 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then
    73 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then
    73     exit;
    74     exit;
    74 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then
    75 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then
   204 begin
   205 begin
   205 glPushMatrix;
   206 glPushMatrix;
   206 glTranslatef(X, Y, 0);
   207 glTranslatef(X, Y, 0);
   207 
   208 
   208 if Dir < 0 then
   209 if Dir < 0 then
   209    glRotatef(Angle, 0, 0, -1)
   210     glRotatef(Angle, 0, 0, -1)
   210 else
   211 else
   211    glRotatef(Angle, 0, 0,  1);
   212     glRotatef(Angle, 0, 0,  1);
   212 if Dir < 0 then glScalef(-1.0, 1.0, 1.0);
   213 if Dir < 0 then
       
   214     glScalef(-1.0, 1.0, 1.0);
   213 
   215 
   214 DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame);
   216 DrawSprite(Sprite, -SpritesData[Sprite].Width div 2, -SpritesData[Sprite].Height div 2, Frame);
   215 
   217 
   216 glPopMatrix
   218 glPopMatrix
   217 end;
   219 end;
   227 
   229 
   228 glPushMatrix;
   230 glPushMatrix;
   229 glTranslatef(X, Y, 0);
   231 glTranslatef(X, Y, 0);
   230 
   232 
   231 if Dir < 0 then
   233 if Dir < 0 then
   232    begin
   234     begin
   233    hw:= - hw;
   235     hw:= - hw;
   234    glRotatef(Angle, 0, 0, -1);
   236     glRotatef(Angle, 0, 0, -1);
   235    end else
   237     end
   236    glRotatef(Angle, 0, 0,  1);
   238 else
       
   239     glRotatef(Angle, 0, 0,  1);
   237 
   240 
   238 
   241 
   239 glBindTexture(GL_TEXTURE_2D, Tex^.id);
   242 glBindTexture(GL_TEXTURE_2D, Tex^.id);
   240 
   243 
   241 VertexBuffer[0].X:= -hw;
   244 VertexBuffer[0].X:= -hw;
   255 end;
   258 end;
   256 
   259 
   257 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: LongInt);
   260 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: LongInt);
   258 var row, col, numFramesFirstCol: LongInt;
   261 var row, col, numFramesFirstCol: LongInt;
   259 begin
   262 begin
   260 if SpritesData[Sprite].imageHeight = 0 then exit;
   263 if SpritesData[Sprite].imageHeight = 0 then
       
   264     exit;
   261 numFramesFirstCol:= SpritesData[Sprite].imageHeight div SpritesData[Sprite].Height;
   265 numFramesFirstCol:= SpritesData[Sprite].imageHeight div SpritesData[Sprite].Height;
   262 row:= Frame mod numFramesFirstCol;
   266 row:= Frame mod numFramesFirstCol;
   263 col:= Frame div numFramesFirstCol;
   267 col:= Frame div numFramesFirstCol;
   264 DrawSprite2 (Sprite, X, Y, col, row);
   268 DrawSprite2 (Sprite, X, Y, col, row);
   265 end;
   269 end;
   408 
   412 
   409     t:= Pos * 32 / HHTexture^.h;
   413     t:= Pos * 32 / HHTexture^.h;
   410     b:= (Pos + 1) * 32 / HHTexture^.h;
   414     b:= (Pos + 1) * 32 / HHTexture^.h;
   411 
   415 
   412     if Dir = -1 then
   416     if Dir = -1 then
   413     begin
   417         begin
   414     l:= (Step + 1) * 32 / HHTexture^.w;
   418         l:= (Step + 1) * 32 / HHTexture^.w;
   415     r:= Step * 32 / HHTexture^.w
   419         r:= Step * 32 / HHTexture^.w
   416     end else
   420         end
   417     begin
   421     else
   418     l:= Step * 32 / HHTexture^.w;
   422         begin
   419     r:= (Step + 1) * 32 / HHTexture^.w
   423         l:= Step * 32 / HHTexture^.w;
       
   424         r:= (Step + 1) * 32 / HHTexture^.w
   420     end;
   425     end;
   421 
   426 
   422 
   427 
   423     glPushMatrix();
   428     glPushMatrix();
   424     glTranslatef(X, Y, 0);
   429     glTranslatef(X, Y, 0);
   455     exit;
   460     exit;
   456 
   461 
   457 if cGrayScale then
   462 if cGrayScale then
   458     begin
   463     begin
   459     tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE);
   464     tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE);
   460     if tw > 255 then tw:= 255;
   465     if tw > 255 then
       
   466         tw:= 255;
   461     r:= tw;
   467     r:= tw;
   462     g:= tw;
   468     g:= tw;
   463     b:= tw
   469     b:= tw
   464     end;
   470     end;
   465 
   471