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; GPU_Image* image; Uint32 v, f, p; GPU_ShaderBlock block; int uloc; int timeloc; float dt; #define MAX_SPRITES 50 int numSprites; float x[MAX_SPRITES]; float y[MAX_SPRITES]; float velx[MAX_SPRITES]; float vely[MAX_SPRITES]; int i; image = GPU_LoadImage("data/test.bmp"); if(image == NULL) return -1; block = load_shaders(&v, &f, &p); uloc = GPU_GetUniformLocation(p, "tex"); GPU_SetUniformi(uloc, 0); timeloc = GPU_GetUniformLocation(p, "time"); dt = 0.010f; startTime = SDL_GetTicks(); frameCount = 0; numSprites = 1; for(i = 0; i < MAX_SPRITES; i++) { x[i] = rand()%screen->w; y[i] = rand()%screen->h; velx[i] = 10 + rand()%screen->w/10; vely[i] = 10 + rand()%screen->h/10; } 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_EQUALS || event.key.keysym.sym == SDLK_PLUS) { if(numSprites < MAX_SPRITES) numSprites++; } else if(event.key.keysym.sym == SDLK_MINUS) { if(numSprites > 0) numSprites--; } else if(event.key.keysym.sym == SDLK_SPACE) { if(GPU_IsDefaultShaderProgram(GPU_GetCurrentShaderProgram())) { GPU_ActivateShaderProgram(p, &block); uloc = GPU_GetUniformLocation(p, "tex"); GPU_SetUniformi(uloc, 0); timeloc = GPU_GetUniformLocation(p, "time"); } else GPU_ActivateShaderProgram(0, NULL); } } } for(i = 0; i < numSprites; i++) { x[i] += velx[i]*dt; y[i] += vely[i]*dt; if(x[i] < 0) { x[i] = 0; velx[i] = -velx[i]; } else if(x[i]> screen->w) { x[i] = screen->w; velx[i] = -velx[i]; } if(y[i] < 0) { y[i] = 0; vely[i] = -vely[i]; } else if(y[i]> screen->h) { y[i] = screen->h; vely[i] = -vely[i]; } } GPU_SetUniformf(timeloc, SDL_GetTicks()/1000.0f); GPU_Clear(screen); for(i = 0; i < numSprites; i++) { GPU_Blit(image, NULL, screen, x[i], y[i]); } GPU_Flip(screen); frameCount++; if(frameCount%500 == 0) printf("Average FPS: %.2f\n", 1000.0f*frameCount/(SDL_GetTicks() - startTime)); } printf("Average FPS: %.2f\n", 1000.0f*frameCount/(SDL_GetTicks() - startTime)); GPU_FreeImage(image); free_shaders(v, f, p); } GPU_Quit(); return 0; }
void shader_program::deactivate() { if (GPU_GetCurrentShaderProgram() == program_object_) { GPU_DeactivateShaderProgram(); } }