Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.

Renamed SDL_RenderPoint() and SDL_RenderLine() to SDL_RenderDrawPoint() and SDL_RenderDrawLine().
Added API for rectangle drawing (as opposed to filling)
Added placeholder API functions for circles and ellipses ... I'm not sure whether these will stay.
Optimized software line drawing quite a bit.
Added support for Wu's anti-aliased line drawing, currently disabled by default.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404346
This commit is contained in:
Sam Lantinga 2009-12-23 01:55:00 +00:00
parent d45158ea85
commit 6da163ab81
24 changed files with 1685 additions and 549 deletions

View file

@ -96,12 +96,15 @@ static int GL_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
static void GL_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
static void GL_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
int numrects, const SDL_Rect * rects);
static int GL_RenderPoints(SDL_Renderer * renderer, const SDL_Point * points,
int count);
static int GL_RenderLines(SDL_Renderer * renderer, const SDL_Point * points,
int count);
static int GL_RenderRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
int count);
static int GL_RenderClear(SDL_Renderer * renderer);
static int GL_RenderDrawPoints(SDL_Renderer * renderer,
const SDL_Point * points, int count);
static int GL_RenderDrawLines(SDL_Renderer * renderer,
const SDL_Point * points, int count);
static int GL_RenderDrawRects(SDL_Renderer * renderer,
const SDL_Rect ** rects, int count);
static int GL_RenderFillRects(SDL_Renderer * renderer,
const SDL_Rect ** rects, int count);
static int GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
const SDL_Rect * srcrect, const SDL_Rect * dstrect);
static int GL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
@ -306,9 +309,11 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->LockTexture = GL_LockTexture;
renderer->UnlockTexture = GL_UnlockTexture;
renderer->DirtyTexture = GL_DirtyTexture;
renderer->RenderPoints = GL_RenderPoints;
renderer->RenderLines = GL_RenderLines;
renderer->RenderRects = GL_RenderRects;
renderer->RenderClear = GL_RenderClear;
renderer->RenderDrawPoints = GL_RenderDrawPoints;
renderer->RenderDrawLines = GL_RenderDrawLines;
renderer->RenderDrawRects = GL_RenderDrawRects;
renderer->RenderFillRects = GL_RenderFillRects;
renderer->RenderCopy = GL_RenderCopy;
renderer->RenderReadPixels = GL_RenderReadPixels;
renderer->RenderWritePixels = GL_RenderWritePixels;
@ -1114,7 +1119,23 @@ GL_SetBlendMode(GL_RenderData * data, int blendMode, int isprimitive)
}
static int
GL_RenderPoints(SDL_Renderer * renderer, const SDL_Point * points, int count)
GL_RenderClear(SDL_Renderer * renderer)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
data->glClearColor((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
(GLfloat) renderer->b * inv255f,
(GLfloat) renderer->a * inv255f);
data->glClear(GL_COLOR_BUFFER_BIT);
return 0;
}
static int
GL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points,
int count)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
int i;
@ -1136,7 +1157,8 @@ GL_RenderPoints(SDL_Renderer * renderer, const SDL_Point * points, int count)
}
static int
GL_RenderLines(SDL_Renderer * renderer, const SDL_Point * points, int count)
GL_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points,
int count)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
int i;
@ -1199,7 +1221,46 @@ GL_RenderLines(SDL_Renderer * renderer, const SDL_Point * points, int count)
}
static int
GL_RenderRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
GL_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
int i, x, y;
SDL_Point points[4];
GL_SetBlendMode(data, renderer->blendMode, 1);
data->glColor4f((GLfloat) renderer->r * inv255f,
(GLfloat) renderer->g * inv255f,
(GLfloat) renderer->b * inv255f,
(GLfloat) renderer->a * inv255f);
data->glBegin(GL_LINE_LOOP);
for (i = 0; i < count; ++i) {
const SDL_Rect *rect = rects[i];
x = rect->x;
y = rect->y;
data->glVertex2f(0.5f + x, 0.5f + y);
x = rect->x+rect->w-1;
y = rect->y;
data->glVertex2f(0.5f + x, 0.5f + y);
x = rect->x+rect->w-1;
y = rect->y+rect->h-1;
data->glVertex2f(0.5f + x, 0.5f + y);
x = rect->x;
y = rect->y+rect->h-1;
data->glVertex2f(0.5f + x, 0.5f + y);
}
data->glEnd();
return 0;
}
static int
GL_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
{
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
int i;