hedgewars/uRender.pas
branchwebgl
changeset 9264 21df1a0ec9ed
parent 9127 e350500c4edb
child 9950 2759212a27de
equal deleted inserted replaced
9260:64718974158f 9264:21df1a0ec9ed
   142 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
   142 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
   143 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]);
   143 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]);
   144 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1);
   144 glDrawArrays(GL_TRIANGLE_FAN, 0, High(VertexBuffer) - Low(VertexBuffer) + 1);
   145 end;
   145 end;
   146 
   146 
   147 
       
   148 procedure DrawTextureFromRectDir(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture);
       
   149 var
       
   150     rr: TSDL_Rect;
       
   151     VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
       
   152     //VertexBuffer, TextureBuffer: TVertexRect;
       
   153     _l, _r, _t, _b: GLfloat;
       
   154 begin
       
   155 if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then
       
   156     exit;
       
   157 
       
   158 // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
       
   159 if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then
       
   160     exit;
       
   161 if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then
       
   162     exit;
       
   163 
       
   164 rr.x:= X;
       
   165 rr.y:= Y;
       
   166 rr.w:= W;
       
   167 rr.h:= H;
       
   168 
       
   169 _l:= r^.x / SourceTexture^.w * SourceTexture^.rx;
       
   170 _r:= (r^.x + r^.w) / SourceTexture^.w * SourceTexture^.rx;
       
   171 _t:= r^.y / SourceTexture^.h * SourceTexture^.ry;
       
   172 _b:= (r^.y + r^.h) / SourceTexture^.h * SourceTexture^.ry;
       
   173 
       
   174 glBindTexture(GL_TEXTURE_2D, SourceTexture^.id);
       
   175 
       
   176 VertexBuffer[0].X:= X;
       
   177 VertexBuffer[0].Y:= Y;
       
   178 VertexBuffer[1].X:= rr.w + X;
       
   179 VertexBuffer[1].Y:= Y;
       
   180 VertexBuffer[2].X:= rr.w + X;
       
   181 VertexBuffer[2].Y:= rr.h + Y;
       
   182 VertexBuffer[3].X:= X;
       
   183 VertexBuffer[3].Y:= rr.h + Y;
       
   184 
       
   185 TextureBuffer[0].X:= _l;
       
   186 TextureBuffer[0].Y:= _t;
       
   187 TextureBuffer[1].X:= _r;
       
   188 TextureBuffer[1].Y:= _t;
       
   189 TextureBuffer[2].X:= _r;
       
   190 TextureBuffer[2].Y:= _b;
       
   191 TextureBuffer[3].X:= _l;
       
   192 TextureBuffer[3].Y:= _b;
       
   193 
       
   194 SetVertexPointer(@VertexBuffer[0], Length(VertexBuffer));
       
   195 SetTexCoordPointer(@TextureBuffer[0], Length(VertexBuffer));
       
   196 
       
   197 {$IFDEF GL2}
       
   198 UpdateModelviewProjection;
       
   199 {$ENDIF}
       
   200 
       
   201 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
       
   202 end;
       
   203 
       
   204 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); inline;
   147 procedure DrawTexture(X, Y: LongInt; Texture: PTexture); inline;
   205 begin
   148 begin
   206     DrawTexture(X, Y, Texture, 1.0);
   149     DrawTexture(X, Y, Texture, 1.0);
   207 end;
   150 end;
   208 
   151