Allegro.cc Forums » Programming Questions » [A5] how to use a bitmap as a pattern to fill a rectangular area?

Credits go to Don Freeman and SiegeLord for helping out!
 This thread is locked; no one can reply to it.
 [A5] how to use a bitmap as a pattern to fill a rectangular area?
 axilmar Member #1,204 April 2001 Hi, I'd like to fill a rectangular area with a bitmap used as a pattern. How do I do that with A5?
 Don Freeman Member #5,110 October 2004 Use the primitives addon. Look at the source code for the primitives example... --"Everyone tells me I should forget about you, you don’t deserve me. They’re right, you don’t deserve me, but I deserve you.""It’s so simple to be wise. Just think of something stupid to say and then don’t say it."
 axilmar Member #1,204 April 2001 Thanks. After lots of experimentation, I came up with this:#SelectExpand 1void al_draw_bitmap_rect(ALLEGRO_BITMAP *bmp, int sx, int sy, int sw, int sh, float dx, float dy, float dw, float dh, int flags) { 2 ALLEGRO_BITMAP *sub = al_create_sub_bitmap(bmp, sx, sy, sw, sh); 3 ALLEGRO_BITMAP *clone = al_clone_bitmap(sub); 4 5 ALLEGRO_COLOR c = al_map_rgb(255, 255, 255); 6 7 ALLEGRO_VERTEX vertices[4]; 8 9 vertices[0].x = dx; 10 vertices[0].y = dy; 11 vertices[0].z = 0; 12 vertices[0].color = c; 13 vertices[0].u = 0; 14 vertices[0].v = 0; 15 16 vertices[1].x = dx + dw; 17 vertices[1].y = dy; 18 vertices[1].z = 0; 19 vertices[1].color = c; 20 vertices[1].u = dw; 21 vertices[1].v = 0; 22 23 vertices[2].x = dx; 24 vertices[2].y = dy + dh; 25 vertices[2].z = 0; 26 vertices[2].color = c; 27 vertices[2].u = 0; 28 vertices[2].v = dh; 29 30 vertices[3].x = dx + dw; 31 vertices[3].y = dy + dh; 32 vertices[3].z = 0; 33 vertices[3].color = c; 34 vertices[3].u = dw; 35 vertices[3].v = dh; 36 37 al_draw_prim(vertices, nullptr, clone, 0, 4, ALLEGRO_PRIM_TRIANGLE_STRIP); 38 39 al_destroy_bitmap(clone); 40 al_destroy_bitmap(sub); 41} Am I doing it correctly? the visual output seems correct.The function obviously creates and destroys bitmaps, so it's not the fastest thing. Other than pre-creating the bitmaps, is there another way to specify a subarea of the bitmap? perhaps using the vertices?
 SiegeLord Member #7,827 October 2006 axilmar said: Other than pre-creating the bitmaps, is there another way to specify a subarea of the bitmap? perhaps using the vertices? Can't be done without shaders, which is why Allegro doesn't support this operation. "For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]
 axilmar Member #1,204 April 2001 SiegeLord said: Can't be done without shaders, which is why Allegro doesn't support this operation. Thanks. So it seems I would have to actually split the bitmap into other bitmaps.
 Go to: Allegro Development Installation, Setup & Configuration Allegro.cc Comments Off-Topic Ordeals The Depot Game Design & Concepts Programming Questions Recent Threads