X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Fgl_renderer.cpp;h=1d062c44ba6a0574dcf3af44332b4082fc6bb783;hb=c13404a6b6a97ad0d5e1c9f905d7a7e37b797c13;hp=5700b710d4da1dbc2df6a39cf8fb04c6cd29281c;hpb=5fc3d7e7f2aadfd93d51421de3a02dda449035b1;p=supertux.git diff --git a/src/video/gl_renderer.cpp b/src/video/gl_renderer.cpp index 5700b710d..1d062c44b 100644 --- a/src/video/gl_renderer.cpp +++ b/src/video/gl_renderer.cpp @@ -103,11 +103,11 @@ inline void intern_draw(float left, float top, float right, float bottom, bottom -= center_y; float vertices[] = { - left*ca - top*sa + center_x, left*sa + top*ca + center_y, - right*ca - top*sa + center_x, right*sa + top*ca + center_y, - right*ca - bottom*sa + center_x, right*sa + bottom*ca + center_y, - left*ca - bottom*sa + center_x, left*sa + bottom*ca + center_y - }; + left*ca - top*sa + center_x, left*sa + top*ca + center_y, + right*ca - top*sa + center_x, right*sa + top*ca + center_y, + right*ca - bottom*sa + center_x, right*sa + bottom*ca + center_y, + left*ca - bottom*sa + center_x, left*sa + bottom*ca + center_y + }; glVertexPointer(2, GL_FLOAT, 0, vertices); float uvs[] = { @@ -151,10 +151,12 @@ Renderer::Renderer() if(texture_manager != 0) texture_manager->save_textures(); +#ifdef SDL_GL_SWAP_CONTROL if(config->try_vsync) { /* we want vsync for smooth scrolling */ SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); } +#endif SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); @@ -195,8 +197,8 @@ Renderer::Renderer() glDisable(GL_CULL_FACE); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); - glEnable(GL_VERTEX_ARRAY); - glEnable(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Init the projection matrix, viewport and stuff @@ -261,7 +263,7 @@ Renderer::draw_surface_part(const DrawingRequest& request) uv_bottom, 0.0, request.alpha, - Color(1.0, 1.0, 1.0), + request.color, Blend(), request.drawing_effect); } @@ -275,8 +277,8 @@ Renderer::draw_gradient(const DrawingRequest& request) const Color& bottom = gradientrequest->bottom; glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_COORD_ARRAY); - glEnable(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); float vertices[] = { 0, 0, @@ -296,8 +298,8 @@ Renderer::draw_gradient(const DrawingRequest& request) glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - glDisable(GL_COLOR_ARRAY); - glEnable(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); glColor4f(1, 1, 1, 1); @@ -309,6 +311,11 @@ Renderer::draw_filled_rect(const DrawingRequest& request) const FillRectRequest* fillrectrequest = (FillRectRequest*) request.request_data; + glDisable(GL_TEXTURE_2D); + glColor4f(fillrectrequest->color.red, fillrectrequest->color.green, + fillrectrequest->color.blue, fillrectrequest->color.alpha); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + if (fillrectrequest->radius != 0.0f) { // draw round rect @@ -324,32 +331,37 @@ Renderer::draw_filled_rect(const DrawingRequest& request) request.pos.x + fillrectrequest->size.x - radius, request.pos.y + fillrectrequest->size.y - radius); - glDisable(GL_TEXTURE_2D); - glColor4f(fillrectrequest->color.red, fillrectrequest->color.green, - fillrectrequest->color.blue, fillrectrequest->color.alpha); - int n = 8; - glBegin(GL_QUAD_STRIP); + int p = 0; + float vertices[(n+1) * 4 * 2]; + for(int i = 0; i <= n; ++i) { float x = sinf(i * (M_PI/2) / n) * radius; float y = cosf(i * (M_PI/2) / n) * radius; - glVertex2f(irect.get_left() - x, irect.get_top() - y); - glVertex2f(irect.get_right() + x, irect.get_top() - y); + vertices[p++] = irect.get_left() - x; + vertices[p++] = irect.get_top() - y; + + vertices[p++] = irect.get_right() + x; + vertices[p++] = irect.get_top() - y; } + for(int i = 0; i <= n; ++i) { float x = cosf(i * (M_PI/2) / n) * radius; float y = sinf(i * (M_PI/2) / n) * radius; - glVertex2f(irect.get_left() - x, irect.get_bottom() + y); - glVertex2f(irect.get_right() + x, irect.get_bottom() + y); + vertices[p++] = irect.get_left() - x; + vertices[p++] = irect.get_bottom() + y; + + vertices[p++] = irect.get_right() + x; + vertices[p++] = irect.get_bottom() + y; } - glEnd(); - glEnable(GL_TEXTURE_2D); - glColor4f(1, 1, 1, 1); + + glVertexPointer(2, GL_FLOAT, 0, vertices); + glDrawArrays(GL_TRIANGLE_STRIP, 0, sizeof(vertices)/sizeof(float)/2); } else { @@ -358,11 +370,6 @@ Renderer::draw_filled_rect(const DrawingRequest& request) float w = fillrectrequest->size.x; float h = fillrectrequest->size.y; - glDisable(GL_TEXTURE_2D); - glColor4f(fillrectrequest->color.red, fillrectrequest->color.green, - fillrectrequest->color.blue, fillrectrequest->color.alpha); - glDisable(GL_TEXTURE_COORD_ARRAY); - float vertices[] = { x, y, x+w, y, @@ -372,11 +379,11 @@ Renderer::draw_filled_rect(const DrawingRequest& request) glVertexPointer(2, GL_FLOAT, 0, vertices); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glEnable(GL_TEXTURE_COORD_ARRAY); - glEnable(GL_TEXTURE_2D); - glColor4f(1, 1, 1, 1); } + + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnable(GL_TEXTURE_2D); + glColor4f(1, 1, 1, 1); } void @@ -448,12 +455,12 @@ Renderer::draw_inverse_ellipse(const DrawingRequest& request) vertices[p++] = x - ex2; vertices[p++] = y + ey2; } - glDisable(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vertices); glDrawArrays(GL_TRIANGLES, 0, points); - glEnable(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); glColor4f(1, 1, 1, 1);