static GPU_Camera SetCamera(GPU_Renderer* renderer, GPU_Target* target, GPU_Camera* cam) { GPU_Camera new_camera; GPU_Camera old_camera; GPU_Log(" %s (dummy)\n", __func__); if(target == NULL) { GPU_PushErrorCode("GPU_SetCamera", GPU_ERROR_NULL_ARGUMENT, "target"); return GPU_GetDefaultCamera(); } if(cam == NULL) new_camera = GPU_GetDefaultCamera(); else new_camera = *cam; old_camera = target->camera; target->camera = new_camera; return old_camera; }
static GPU_Target* LoadTarget(GPU_Renderer* renderer, GPU_Image* image) { GPU_Target* result; GPU_Log(" %s (dummy)\n", __func__); if(image == NULL) return NULL; if(image->target != NULL) { image->target->refcount++; return image->target; } if(!(renderer->enabled_features & GPU_FEATURE_RENDER_TARGETS)) return NULL; result = (GPU_Target*)malloc(sizeof(GPU_Target)); memset(result, 0, sizeof(GPU_Target)); result->refcount = 1; result->data = NULL; // Allocate a data structure as needed for other render target data result->renderer = renderer; result->context = NULL; result->image = image; result->w = image->w; result->h = image->h; result->base_w = image->texture_w; result->base_h = image->texture_h; result->viewport = GPU_MakeRect(0, 0, result->w, result->h); result->camera = GPU_GetDefaultCamera(); result->use_clip_rect = 0; result->clip_rect.x = 0; result->clip_rect.y = 0; result->clip_rect.w = result->w; result->clip_rect.h = result->h; result->use_color = 0; image->target = result; return result; }
int main(int argc, char* argv[]) { printRenderers(); GPU_Target* screen = GPU_Init(800, 600, GPU_DEFAULT_INIT_FLAGS); if(screen == NULL) return -1; printCurrentRenderer(); int numImages = 0; GPU_Image* images[argc-1]; int i; for(i = 1; i < argc; i++) { images[numImages] = GPU_LoadImage(argv[i]); if(images[numImages] != NULL) numImages++; } Uint8* keystates = SDL_GetKeyState(NULL); GPU_Camera camera = GPU_GetDefaultCamera(); float dt = 0.010f; Uint8 done = 0; SDL_Event event; 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; } } 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, 255, 255, 255, 255); GPU_SetCamera(screen, &camera); float x = 100; float y = 100; for(i = 0; i < numImages; i++) { float x_scale = 150.0f/images[i]->w; float y_scale = 150.0f/images[i]->h; GPU_BlitScale(images[i], NULL, screen, x, y, x_scale, y_scale); x += 200; if((i+1)%4 == 0) { x = 100; y += 200; } } GPU_Flip(screen); SDL_Delay(10); } for(i = 0; i < numImages; i++) { GPU_FreeImage(images[i]); } GPU_Quit(); return 0; }
static GPU_Target* CreateTargetFromWindow(GPU_Renderer* renderer, Uint32 windowID, GPU_Target* target) { GPU_Log(" %s (dummy)\n", __func__); if(target == NULL) { target = (GPU_Target*)malloc(sizeof(GPU_Target)); memset(target, 0, sizeof(GPU_Target)); target->refcount = 1; target->is_alias = 0; target->data = NULL; // Allocate a data structure as needed for other render target data target->image = NULL; target->context = (GPU_Context*)malloc(sizeof(GPU_Context)); memset(target->context, 0, sizeof(GPU_Context)); target->context->windowID = windowID; target->context->data = NULL; // Allocate a data structure as needed for other context data target->context->context = NULL; } else { GPU_RemoveWindowMapping(target->context->windowID); } // This is used for restoring window after fullscreen switches SDL_GetWindowSize(SDL_GetWindowFromID(target->context->windowID), &target->context->window_w, &target->context->window_h); target->context->stored_window_w = target->context->window_w; target->context->stored_window_h = target->context->window_h; GPU_AddWindowMapping(target); target->renderer = renderer; target->w = target->context->window_w; target->h = target->context->window_h; target->base_w = target->context->window_w; target->base_h = target->context->window_h; target->use_clip_rect = 0; target->clip_rect.x = 0; target->clip_rect.y = 0; target->clip_rect.w = target->w; target->clip_rect.h = target->h; target->use_color = 0; target->viewport = GPU_MakeRect(0, 0, target->context->window_w, target->context->window_h); target->camera = GPU_GetDefaultCamera(); target->context->line_thickness = 1.0f; target->context->use_texturing = 1; target->context->shapes_use_blending = 1; target->context->shapes_blend_mode = GPU_GetBlendModeFromPreset(GPU_BLEND_NORMAL); target->context->projection_matrix.size = 1; GPU_MatrixIdentity(target->context->projection_matrix.matrix[0]); target->context->modelview_matrix.size = 1; GPU_MatrixIdentity(target->context->modelview_matrix.matrix[0]); target->context->matrix_mode = GPU_MODELVIEW; renderer->impl->SetLineThickness(renderer, 1.0f); target->context->default_textured_shader_program = 0; target->context->default_untextured_shader_program = 0; target->context->current_shader_program = 0; return target; }
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(); { int numImages; GPU_Image** images; int i; const Uint8* keystates; GPU_Camera camera; float dt; Uint8 done; SDL_Event event; float x, y; images = (GPU_Image**)malloc(sizeof(GPU_Image*)*(argc - 1)); numImages = 0; for (i = 1; i < argc; i++) { images[numImages] = GPU_LoadImage(argv[i]); if (images[numImages] != NULL) numImages++; } keystates = SDL_GetKeyState(NULL); camera = GPU_GetDefaultCamera(); 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_r) { camera.x = 0.0f; camera.y = 0.0f; camera.z = -10.0f; camera.zoom = 1.0f; camera.angle = 0.0f; } } else if (event.type == SDL_MOUSEBUTTONDOWN) { float x, y; GPU_GetVirtualCoords(screen, &x, &y, event.button.x, event.button.y); printScreenToWorld(x, y); } } 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, 255, 255, 255, 255); GPU_SetCamera(screen, &camera); x = 0; y = 0; for (i = 0; i < numImages; i++) { x += images[i]->w / 2.0f; y += images[i]->h / 2.0f; GPU_Blit(images[i], NULL, screen, x, y); x += images[i]->w / 2.0f; y += images[i]->h / 2.0f; } GPU_Flip(screen); SDL_Delay(10); } for (i = 0; i < numImages; i++) { GPU_FreeImage(images[i]); } free(images); } GPU_Quit(); return 0; }
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; }