| 365 | } |
| 366 | |
| 367 | void Camera::DrawSafeZone() { |
| 368 | PROFILER_GPU_ZONE(g_profiler_ctx, "DrawSafeZone"); |
| 369 | CHECK_GL_ERROR(); |
| 370 | GLState gl_state; |
| 371 | gl_state.blend = true; |
| 372 | gl_state.cull_face = false; |
| 373 | gl_state.depth_test = false; |
| 374 | gl_state.depth_write = false; |
| 375 | |
| 376 | Graphics::Instance()->setGLState(gl_state); |
| 377 | int shader_id = Shaders::Instance()->returnProgram("simple_2d"); |
| 378 | Shaders::Instance()->setProgram(shader_id); |
| 379 | |
| 380 | float aspect_ratio = GetAspectRatio(); |
| 381 | mat4 perspective_matrix; |
| 382 | perspective_matrix.SetPerspectiveInfinite(VertFOVFromHorz(target_horz_fov, aspect_ratio), aspect_ratio, near_plane, far_plane); |
| 383 | float vert_fov = tanf(TargetVertFovFromHorz(target_horz_fov) * 3.14159266f / 180.0f * 0.45f); |
| 384 | float horz_fov = tanf(target_horz_fov * 3.14159266f / 180.0f * 0.45f); |
| 385 | vec3 safe_pos(horz_fov, vert_fov, 1); |
| 386 | safe_pos = perspective_matrix * safe_pos; |
| 387 | const float safe_pos_extend = 0.8f; |
| 388 | |
| 389 | glm::mat4 proj = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f); |
| 390 | Shaders::Instance()->SetUniformMat4("mvp_mat", (const GLfloat*)&proj); |
| 391 | Shaders::Instance()->SetUniformVec4("color", vec4(1.0f)); |
| 392 | |
| 393 | Graphics::Instance()->SetLineWidth(1); |
| 394 | |
| 395 | float data[] = { |
| 396 | safe_pos[0], safe_pos[1], safe_pos[2], |
| 397 | safe_pos[0] * safe_pos_extend, safe_pos[1], safe_pos[2], |
| 398 | safe_pos[0], safe_pos[1], safe_pos[2], |
| 399 | safe_pos[0], safe_pos[1] * safe_pos_extend, safe_pos[2], |
| 400 | |
| 401 | -safe_pos[0], safe_pos[1], safe_pos[2], |
| 402 | -safe_pos[0] * safe_pos_extend, safe_pos[1], safe_pos[2], |
| 403 | -safe_pos[0], safe_pos[1], safe_pos[2], |
| 404 | -safe_pos[0], safe_pos[1] * safe_pos_extend, safe_pos[2], |
| 405 | |
| 406 | safe_pos[0], -safe_pos[1], safe_pos[2], |
| 407 | safe_pos[0] * safe_pos_extend, -safe_pos[1], safe_pos[2], |
| 408 | safe_pos[0], -safe_pos[1], safe_pos[2], |
| 409 | safe_pos[0], -safe_pos[1] * safe_pos_extend, safe_pos[2], |
| 410 | |
| 411 | -safe_pos[0], -safe_pos[1], safe_pos[2], |
| 412 | -safe_pos[0] * safe_pos_extend, -safe_pos[1], safe_pos[2], |
| 413 | -safe_pos[0], -safe_pos[1], safe_pos[2], |
| 414 | -safe_pos[0], -safe_pos[1] * safe_pos_extend, safe_pos[2], |
| 415 | |
| 416 | -safe_pos[0] * 2.0f, -safe_pos[1] * 0.5f, safe_pos[2], |
| 417 | safe_pos[0] * 2.0f, -safe_pos[1] * 0.5f, safe_pos[2]}; |
| 418 | |
| 419 | static VBOContainer safe_zone_vbo; |
| 420 | safe_zone_vbo.Fill(kVBODynamic | kVBOFloat, sizeof(data), data); |
| 421 | safe_zone_vbo.Bind(); |
| 422 | |
| 423 | int vert_attrib_id = Shaders::Instance()->returnShaderAttrib("vert_coord", shader_id); |
| 424 | Graphics::Instance()->EnableVertexAttribArray(vert_attrib_id); |
no test coverage detected