formats: bitmap greyscale RGB BGR RGBA YUV? CYMK other non-framebuffer formats (PS, PDF, ...). row stride (scan line) = ? pixel size = ? matrix format: (column, row) or (row, column) memory starting address? which memory? Graphics adapter or main RAM or something else? width height likewise for textures, just with extra flags (mipmaps for smaller areas etc) abstractions: pen (style, thickness, color) brush (style, greyscale, color) flip buffers(?) [depending on graphics adapter, just set starting address] end-inclusive or end-exclusive? Graphics Context abstraction? operations: line(P1, P2, pen) rectangle(P1, P2, filled?) ellipse(C, A, B, filled?) [ellipse(P1, P2) for bounding rectangle] bezier_path?? (strokes) triangle (P vertex[3], pen, filled?) convex/concav polygon (P[]) flood fill blit(source_framebuffer, [area], destination_framebuffer, [area], [stretch to], [filtering algo]) (operation = COPY|XOR|OR|???) 3D operations: ooz perspective correction