| 3038 | } |
| 3039 | |
| 3040 | void Engine::DrawLoadScreen(bool loading_in_progress) { |
| 3041 | #ifndef GLDEBUG |
| 3042 | // don't draw loading screen on gl debug |
| 3043 | // makes traces more useful |
| 3044 | |
| 3045 | Graphics* graphics = Graphics::Instance(); |
| 3046 | Textures* textures = Textures::Instance(); |
| 3047 | CHECK_GL_ERROR(); |
| 3048 | graphics->setViewport(0, 0, graphics->window_dims[0], graphics->window_dims[1]); |
| 3049 | |
| 3050 | glClearColor(0.0f, 0.0f, 0.0f, 0.0f); |
| 3051 | graphics->Clear(true); |
| 3052 | |
| 3053 | vec3 base_color = vec3(min(1.0f, (SDL_TS_GetTicks() - started_loading_time) / 1000.0f)); |
| 3054 | |
| 3055 | if (!level_has_screenshot && load_screen_tip[0] == '\0') { |
| 3056 | textures->drawTexture(loading_screen_logo->GetTextureRef(), |
| 3057 | vec3((float)graphics->window_dims[0] / 2.0f, (float)graphics->window_dims[1] / 2.0f + sinf(game_timer.game_time) * 20.0f, 0), |
| 3058 | 512.0f + (sinf(game_timer.game_time * 2.0f) - 1.0f) * 20); |
| 3059 | CHECK_GL_ERROR(); |
| 3060 | } else { |
| 3061 | if (level_has_screenshot) { |
| 3062 | CHECK_GL_ERROR(); |
| 3063 | |
| 3064 | // no coloring |
| 3065 | Graphics* graphics = Graphics::Instance(); |
| 3066 | Shaders* shaders = Shaders::Instance(); |
| 3067 | |
| 3068 | int shader_id = shaders->returnProgram("simple_2d #TEXTURE #FLIPPED #LEVEL_SCREENSHOT"); |
| 3069 | shaders->createProgram(shader_id); |
| 3070 | int shader_attrib_vert_coord = shaders->returnShaderAttrib("vert_coord", shader_id); |
| 3071 | int shader_attrib_tex_coord = shaders->returnShaderAttrib("tex_coord", shader_id); |
| 3072 | int uniform_mvp_mat = shaders->returnShaderVariable("mvp_mat", shader_id); |
| 3073 | int uniform_color = shaders->returnShaderVariable("color", shader_id); |
| 3074 | shaders->setProgram(shader_id); |
| 3075 | CHECK_GL_ERROR(); |
| 3076 | |
| 3077 | GLState gl_state; |
| 3078 | gl_state.blend = true; |
| 3079 | gl_state.cull_face = false; |
| 3080 | gl_state.depth_write = false; |
| 3081 | gl_state.depth_test = false; |
| 3082 | graphics->setGLState(gl_state); |
| 3083 | CHECK_GL_ERROR(); |
| 3084 | |
| 3085 | glm::mat4 proj_mat; |
| 3086 | proj_mat = glm::ortho(0.0f, (float)graphics->window_dims[0], 0.0f, (float)graphics->window_dims[1]); |
| 3087 | glm::mat4 modelview_mat(1.0f); |
| 3088 | vec2 where; |
| 3089 | vec2 size(Textures::Instance()->getWidth(level_screenshot->GetTextureRef()), |
| 3090 | Textures::Instance()->getHeight(level_screenshot->GetTextureRef())); |
| 3091 | size /= size[1]; |
| 3092 | size *= (float)graphics->window_dims[1]; |
| 3093 | where = vec2(graphics->window_dims[0] * 0.5f, graphics->window_dims[1] * 0.5f); |
| 3094 | modelview_mat = glm::translate(modelview_mat, glm::vec3(where[0] - size[0] * 0.5f, where[1] - size[1] * 0.5f, 0)); |
| 3095 | modelview_mat = glm::scale(modelview_mat, glm::vec3(size[0], size[1], 1.0f)); |
| 3096 | modelview_mat = glm::translate(modelview_mat, glm::vec3(0.5f, 0.5f, 0.5f)); |
| 3097 | modelview_mat = glm::translate(modelview_mat, glm::vec3(-0.5f, -0.5f, -0.5f)); |
nothing calls this directly
no test coverage detected