void RenderBatchTriangle::draw_glyph_subpixel(Canvas &canvas, const Rectf &src, const Rectf &dest, const Colorf &color, const Texture2D &texture) { int texindex = set_batcher_active(canvas, texture, true, color); vertices[position+0].position = to_position(dest.left, dest.top); vertices[position+1].position = to_position(dest.right, dest.top); vertices[position+2].position = to_position(dest.left, dest.bottom); vertices[position+3].position = to_position(dest.right, dest.top); vertices[position+4].position = to_position(dest.right, dest.bottom); vertices[position+5].position = to_position(dest.left, dest.bottom); float src_left = (src.left)/tex_sizes[texindex].width; float src_top = (src.top) / tex_sizes[texindex].height; float src_right = (src.right)/tex_sizes[texindex].width; float src_bottom = (src.bottom) / tex_sizes[texindex].height; vertices[position+0].texcoord = Vec2f(src_left, src_top); vertices[position+1].texcoord = Vec2f(src_right, src_top); vertices[position+2].texcoord = Vec2f(src_left, src_bottom); vertices[position+3].texcoord = Vec2f(src_right, src_top); vertices[position+4].texcoord = Vec2f(src_right, src_bottom); vertices[position+5].texcoord = Vec2f(src_left, src_bottom); for (int i=0; i<6; i++) { vertices[position+i].color = Vec4f(1.0f, 1.0f, 1.0f, 1.0f); vertices[position+i].texindex = texindex; } position += 6; }
void CL_RenderBatch3D::draw_image(CL_GraphicContext &gc, const CL_Rectf &src, const CL_Rectf &dest, const CL_Colorf &color, const CL_Texture &texture) { int texindex = set_batcher_active(gc, texture); vertices[position+0].position = to_position(dest.left, dest.top); vertices[position+1].position = to_position(dest.right, dest.top); vertices[position+2].position = to_position(dest.left, dest.bottom); vertices[position+3].position = to_position(dest.right, dest.top); vertices[position+4].position = to_position(dest.right, dest.bottom); vertices[position+5].position = to_position(dest.left, dest.bottom); float src_left = (src.left)/tex_sizes[texindex].width; float src_top = (src.top) / tex_sizes[texindex].height; float src_right = (src.right)/tex_sizes[texindex].width; float src_bottom = (src.bottom) / tex_sizes[texindex].height; vertices[position+0].texcoord = CL_Vec2f(src_left, src_top); vertices[position+1].texcoord = CL_Vec2f(src_right, src_top); vertices[position+2].texcoord = CL_Vec2f(src_left, src_bottom); vertices[position+3].texcoord = CL_Vec2f(src_right, src_top); vertices[position+4].texcoord = CL_Vec2f(src_right, src_bottom); vertices[position+5].texcoord = CL_Vec2f(src_left, src_bottom); for (int i=0; i<6; i++) { vertices[position+i].color = CL_Vec4f(color.r, color.g, color.b, color.a); vertices[position+i].texindex.x = (float)texindex; } position += 6; }
void RenderBatchTriangle::draw_image(Canvas &canvas, const Rectf &src, const Quadf &dest, const Colorf &color, const Texture2D &texture) { int texindex = set_batcher_active(canvas, texture); vertices[position+0].position = to_position(dest.p.x, dest.p.y); vertices[position+1].position = to_position(dest.q.x, dest.q.y); vertices[position+2].position = to_position(dest.s.x, dest.s.y); vertices[position+3].position = to_position(dest.q.x, dest.q.y); vertices[position+4].position = to_position(dest.r.x, dest.r.y); vertices[position+5].position = to_position(dest.s.x, dest.s.y); float src_left = (src.left)/tex_sizes[texindex].width; float src_top = (src.top) / tex_sizes[texindex].height; float src_right = (src.right)/tex_sizes[texindex].width; float src_bottom = (src.bottom) / tex_sizes[texindex].height; vertices[position+0].texcoord = Vec2f(src_left, src_top); vertices[position+1].texcoord = Vec2f(src_right, src_top); vertices[position+2].texcoord = Vec2f(src_left, src_bottom); vertices[position+3].texcoord = Vec2f(src_right, src_top); vertices[position+4].texcoord = Vec2f(src_right, src_bottom); vertices[position+5].texcoord = Vec2f(src_left, src_bottom); for (int i=0; i<6; i++) { vertices[position+i].color = Vec4f(color.r, color.g, color.b, color.a); vertices[position+i].texindex = texindex; } position += 6; }
void RenderBatchLine::draw_line_strip(Canvas &canvas, const Vec2f *line_positions, const Vec4f &line_color, int num_vertices) { if (num_vertices < 2) { return; // Invalid line strip, we ignore this. It could be null call to this function } // We convert a line strip to a line num_vertices -=1; set_batcher_active(canvas, num_vertices * 2); Vec4f next_start_position = to_position(line_positions->x, line_positions->y); for (; num_vertices > 0; num_vertices--) { vertices[position].color = line_color; vertices[position].position = next_start_position; line_positions++; position++; vertices[position].color = line_color; next_start_position = to_position(line_positions->x, line_positions->y); vertices[position].position = next_start_position; position++; } }
void CL_RenderBatch3D::draw_sprite(CL_GraphicContext &gc, const CL_Surface_DrawParams1 *params, const CL_Texture &texture) { int texindex = set_batcher_active(gc, texture); to_sprite_vertex(params, 0, vertices[position++], texindex); to_sprite_vertex(params, 1, vertices[position++], texindex); to_sprite_vertex(params, 2, vertices[position++], texindex); to_sprite_vertex(params, 1, vertices[position++], texindex); to_sprite_vertex(params, 3, vertices[position++], texindex); to_sprite_vertex(params, 2, vertices[position++], texindex); }
void RenderBatchTriangle::draw_sprite(Canvas &canvas, const Pointf texture_position[4], const Pointf dest_position[4], const Texture2D &texture, const Colorf &color) { int texindex = set_batcher_active(canvas, texture); to_sprite_vertex(texture_position[0], dest_position[0], vertices[position++], texindex, color); to_sprite_vertex(texture_position[1], dest_position[1], vertices[position++], texindex, color); to_sprite_vertex(texture_position[2], dest_position[2], vertices[position++], texindex, color); to_sprite_vertex(texture_position[1], dest_position[1], vertices[position++], texindex, color); to_sprite_vertex(texture_position[3], dest_position[3], vertices[position++], texindex, color); to_sprite_vertex(texture_position[2], dest_position[2], vertices[position++], texindex, color); }
void RenderBatchPoint::draw_point(Canvas &canvas, Vec2f *line_positions, const Vec4f &point_color, int num_vertices) { set_batcher_active(canvas, num_vertices); for (; num_vertices > 0; num_vertices--) { vertices[position].color = point_color; vertices[position].position = to_position(line_positions->x, line_positions->y); line_positions++; position++; } }
void RenderBatchTriangle::fill_triangles(Canvas &canvas, const Vec2f *positions, const Vec2f *texture_positions, int num_vertices, const Texture2D &texture, const Colorf *colors) { int texindex = set_batcher_active(canvas, texture); for (; num_vertices > 0; num_vertices--) { vertices[position].color = *(colors++); vertices[position].position = to_position(positions->x, positions->y); positions++; vertices[position].texcoord = *(texture_positions++); vertices[position].texindex = texindex; position++; } }
void RenderBatchTriangle::fill_triangle(Canvas &canvas, const Vec2f *triangle_positions, const Colorf &color, int num_vertices) { int texindex = set_batcher_active(canvas, num_vertices); for (; num_vertices > 0; num_vertices--) { vertices[position].color = color; vertices[position].position = to_position(triangle_positions->x, triangle_positions->y); triangle_positions++; vertices[position].texcoord = Vec2f(0.0f, 0.0f); vertices[position].texindex = texindex; position++; } }
void CL_RenderBatch3D::fill(CL_GraphicContext &gc, float x1, float y1, float x2, float y2, const CL_Colorf &color) { int texindex = set_batcher_active(gc); vertices[position+0].position = to_position(x1, y1); vertices[position+1].position = to_position(x2, y1); vertices[position+2].position = to_position(x1, y2); vertices[position+3].position = to_position(x2, y1); vertices[position+4].position = to_position(x2, y2); vertices[position+5].position = to_position(x1, y2); for (int i=0; i<6; i++) { vertices[position+i].color = CL_Vec4f(color.r, color.g, color.b, color.a); vertices[position+i].texcoord = CL_Vec2f(0.0f, 0.0f); vertices[position+i].texindex.x = (float)texindex; } position += 6; }
void RenderBatchTriangle::fill(Canvas &canvas, float x1, float y1, float x2, float y2, const Colorf &color) { int texindex = set_batcher_active(canvas); vertices[position+0].position = to_position(x1, y1); vertices[position+1].position = to_position(x2, y1); vertices[position+2].position = to_position(x1, y2); vertices[position+3].position = to_position(x2, y1); vertices[position+4].position = to_position(x2, y2); vertices[position+5].position = to_position(x1, y2); for (int i=0; i<6; i++) { vertices[position+i].color = Vec4f(color.r, color.g, color.b, color.a); vertices[position+i].texcoord = Vec2f(0.0f, 0.0f); vertices[position+i].texindex = texindex; } position += 6; }