Bool renderText(GPU_Target* renderTarget, GC gc, int x, int y, const char* string) { LOG("Rendering text: '%s'\n", string); if (string == NULL || string[0] == '\0') { return True; } GraphicContext* gContext = GET_GC(gc); SDL_Color color = { GET_RED_FROM_COLOR(gContext->foreground), GET_GREEN_FROM_COLOR(gContext->foreground), GET_BLUE_FROM_COLOR(gContext->foreground), GET_ALPHA_FROM_COLOR(gContext->foreground), }; SDL_Surface* fontSurface = TTF_RenderUTF8_Blended(GET_FONT(gContext->font), string, color); if (fontSurface == NULL) { return False; } GPU_Image* fontImage = GPU_CopyImageFromSurface(fontSurface); SDL_FreeSurface(fontSurface); if (fontImage == NULL) { return False; } y -= TTF_FontAscent(GET_FONT(gContext->font)); GPU_Blit(fontImage, NULL, renderTarget, x + fontImage->w / 2, y + fontImage->h / 2); GPU_FreeImage(fontImage); GPU_Flip(renderTarget); return True; }
Group create_first_group() { Group g; SDL_Surface* surface; g.target = GPU_GetCurrentRenderer()->current_context_target; surface = SDL_LoadBMP("data/test.bmp"); g.sprite.image = GPU_CopyImageFromSurface(surface); g.sprite.x = rand()%screen_w; g.sprite.y = rand()%screen_h; g.sprite.velx = 10 + rand()%screen_w/10; g.sprite.vely = 10 + rand()%screen_h/10; SDL_FreeSurface(surface); return g; }
Group create_group() { Group g; SDL_Surface* surface; SDL_Window* window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, screen_w, screen_h, SDL_WINDOW_OPENGL); Uint32 windowID = SDL_GetWindowID(window); g.target = GPU_CreateTargetFromWindow(windowID); surface = SDL_LoadBMP("data/test.bmp"); g.sprite.image = GPU_CopyImageFromSurface(surface); g.sprite.x = rand()%screen_w; g.sprite.y = rand()%screen_h; g.sprite.velx = 10 + rand()%screen_w/10; g.sprite.vely = 10 + rand()%screen_h/10; SDL_FreeSurface(surface); return g; }
int main(int argc, char* argv[]) { GPU_Target* screen; printRenderers(); screen = GPU_Init(800, 600, GPU_DEFAULT_INIT_FLAGS); if(screen == NULL) return -1; printCurrentRenderer(); { Uint32 startTime; long frameCount; Uint8 done; SDL_Event event; const Uint8* keystates; GPU_Camera camera; float dt; SDL_Surface* surface; GPU_Image* image; GPU_Image* image1; GPU_Image* image2; GPU_Image* image3; GPU_Image* image4; image = GPU_LoadImage("data/test.bmp"); //image = GPU_LoadImage("data/big_test.png"); if(image == NULL) return -1; // Copying the annoying way image1 = GPU_CreateImage(image->w, image->h, GPU_FORMAT_RGBA); GPU_LoadTarget(image1); GPU_Blit(image, NULL, image1->target, image1->target->w/2, image1->target->h/2); GPU_FreeTarget(image1->target); // Copying the normal way image2 = GPU_CopyImage(image); // Copying from a surface dump surface = GPU_CopySurfaceFromImage(image); //GPU_SaveSurface(surface, "save_surf1.bmp", GPU_FILE_AUTO); image3 = GPU_CopyImageFromSurface(surface); SDL_FreeSurface(surface); // A buffer for window capture image4 = NULL; keystates = SDL_GetKeyState(NULL); camera = GPU_GetDefaultCamera(); startTime = SDL_GetTicks(); frameCount = 0; dt = 0.010f; done = 0; while(!done) { while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) done = 1; else if(event.type == SDL_KEYDOWN) { if(event.key.keysym.sym == SDLK_ESCAPE) done = 1; else if(event.key.keysym.sym == SDLK_SPACE) { // Take a window capture GPU_FreeImage(image4); image4 = GPU_CopyImageFromTarget(screen); } } } if(keystates[KEY_UP]) { camera.y -= 200*dt; } else if(keystates[KEY_DOWN]) { camera.y += 200*dt; } if(keystates[KEY_LEFT]) { camera.x -= 200*dt; } else if(keystates[KEY_RIGHT]) { camera.x += 200*dt; } if(keystates[KEY_MINUS]) { camera.zoom -= 1.0f*dt; } else if(keystates[KEY_EQUALS]) { camera.zoom += 1.0f*dt; } GPU_ClearRGBA(screen, 100, 100, 100, 255); GPU_SetCamera(screen, &camera); GPU_Blit(image, NULL, screen, 128, 128); GPU_Blit(image1, NULL, screen, 128 + 256, 128); GPU_Blit(image2, NULL, screen, 128 + 512, 128); GPU_Blit(image3, NULL, screen, 128, 128 + 256); if(image4 != NULL) GPU_BlitScale(image4, NULL, screen, 3*screen->w/4, 3*screen->h/4, 0.25f, 0.25f); GPU_Flip(screen); frameCount++; if(frameCount%500 == 0) GPU_LogError("Average FPS: %.2f\n", 1000.0f*frameCount/(SDL_GetTicks() - startTime)); } GPU_LogError("Average FPS: %.2f\n", 1000.0f*frameCount/(SDL_GetTicks() - startTime)); GPU_FreeImage(image); GPU_FreeImage(image1); GPU_FreeImage(image2); GPU_FreeImage(image3); GPU_FreeImage(image4); } GPU_Quit(); return 0; }