int screen_drawRects(SDL_Renderer* renderer, SDL_Rect* rects, int count) { if( SDL_RenderDrawRects(renderer, rects, count) != 0 ) { LOG("draw rects fail: %s", SDL_GetError()); return 1; } return 0; }
CAMLprim value caml_SDL_RenderDrawRects(value renderer, value ml_rects) { unsigned int i; unsigned int count = Wosize_val(ml_rects); SDL_Rect * rects = malloc(count * sizeof(SDL_Rect)); for (i = 0; i < count; i++) { value _rect = Field(ml_rects, i); SDL_Rect_val(&(rects[i]), _rect); } int r = SDL_RenderDrawRects( SDL_Renderer_val(renderer), rects, count); free(rects); if (r) caml_failwith("Sdlrender.draw_rects"); return Val_unit; }
//Draws an array of rectangles //param:rectangles->The rectangles to draw //param:numberOfRectangles->The number of rectangles in the array //param:color->The color to draw the rectangles //returns 0 for success, -1 for errors int SpriteBatch::DrawRects(SDL_Rect* rectangles, int numberOfRectangles, SDL_Color color) { //Check if spritebatch.begin has been called if(!begun) { std::cout<<"Begin must be called before attempting to draw"<<std::endl; return -1; } //Make sure number of rectangles is valid if(numberOfRectangles <= 0) { std::cout<<"Draw Rects error: Size must be greater than 0"<<std::endl; return -1; } int result = 0; //Set the draw color result = SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); //Check for color setting problems if(result != 0) { std::cout<<"DrawRects error: Problem setting rectangle color" << std::endl; return result; } //Draw the rectangles result = SDL_RenderDrawRects(renderer, rectangles, numberOfRectangles); //Check for draw problems if(result !=0) { std::cout<<"DrawRects error: Problem drawing rectangles"<<std::endl; return result; } //Return success return result; }