cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Tibor Goldschwendt | 13aead39 | 2017-07-14 03:02:43 | [diff] [blame] | 5 | #ifndef CHROME_BROWSER_VR_VR_GL_UTIL_H_ |
| 6 | #define CHROME_BROWSER_VR_VR_GL_UTIL_H_ |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 7 | |
mthiesse | f5a56e09 | 2016-10-06 15:27:13 | [diff] [blame] | 8 | #include <array> |
cjgrant | 962dfbc | 2017-02-13 18:50:48 | [diff] [blame] | 9 | #include <string> |
mthiesse | f5a56e09 | 2016-10-06 15:27:13 | [diff] [blame] | 10 | |
Christopher Grant | 7e73a4f | 2018-05-30 21:13:14 | [diff] [blame] | 11 | #include "chrome/browser/vr/vr_export.h" |
Ian Vollick | 826f56b0 | 2017-11-13 19:53:57 | [diff] [blame] | 12 | #include "third_party/skia/include/core/SkColor.h" |
Ian Vollick | 909b294 | 2017-06-15 15:11:02 | [diff] [blame] | 13 | #include "ui/gfx/geometry/rect.h" |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 14 | #include "ui/gl/gl_bindings.h" |
| 15 | |
Ian Vollick | 826f56b0 | 2017-11-13 19:53:57 | [diff] [blame] | 16 | #define SHADER(Src) "#version 100\n" #Src |
| 17 | #define OEIE_SHADER(Src) \ |
| 18 | "#version 100\n#extension GL_OES_EGL_image_external : require\n" #Src |
| 19 | #define VOID_OFFSET(x) reinterpret_cast<void*>(x) |
| 20 | |
Ian Vollick | 909b294 | 2017-06-15 15:11:02 | [diff] [blame] | 21 | namespace gfx { |
| 22 | class RectF; |
| 23 | class Size; |
Tibor Goldschwendt | dd659e9 | 2017-08-16 22:14:11 | [diff] [blame] | 24 | class SizeF; |
Ian Vollick | 909b294 | 2017-06-15 15:11:02 | [diff] [blame] | 25 | class Transform; |
| 26 | } // namespace gfx |
| 27 | |
Tibor Goldschwendt | 13aead39 | 2017-07-14 03:02:43 | [diff] [blame] | 28 | namespace vr { |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 29 | |
Ian Vollick | 909b294 | 2017-06-15 15:11:02 | [diff] [blame] | 30 | std::array<float, 16> MatrixToGLArray(const gfx::Transform& matrix); |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 31 | |
Christopher Grant | 7e73a4f | 2018-05-30 21:13:14 | [diff] [blame] | 32 | VR_EXPORT gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size, |
| 33 | const gfx::RectF& texture_rect); |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 34 | |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 35 | // Compile a shader. |
| 36 | GLuint CompileShader(GLenum shader_type, |
| 37 | const GLchar* shader_source, |
| 38 | std::string& error); |
| 39 | |
| 40 | // Compile and link a program. |
| 41 | GLuint CreateAndLinkProgram(GLuint vertex_shader_handle, |
| 42 | GLuint fragment_shader_handle, |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 43 | std::string& error); |
| 44 | |
Tibor Goldschwendt | dd659e9 | 2017-08-16 22:14:11 | [diff] [blame] | 45 | // Returns the normalized size of the element projected into screen space. |
| 46 | // If (1, 1) the element fills the entire buffer. |
Christopher Grant | 7e73a4f | 2018-05-30 21:13:14 | [diff] [blame] | 47 | VR_EXPORT gfx::SizeF CalculateScreenSize(const gfx::Transform& proj_matrix, |
| 48 | float distance, |
| 49 | const gfx::SizeF& size); |
Tibor Goldschwendt | dd659e9 | 2017-08-16 22:14:11 | [diff] [blame] | 50 | |
Ian Vollick | 826f56b0 | 2017-11-13 19:53:57 | [diff] [blame] | 51 | // Sets default texture parameters given a texture type. |
| 52 | void SetTexParameters(GLenum texture_type); |
| 53 | |
| 54 | // Sets color uniforms given an SkColor. |
| 55 | void SetColorUniform(GLuint handle, SkColor c); |
| 56 | |
Ian Vollick | 8e4a824f | 2018-01-06 05:15:12 | [diff] [blame] | 57 | // Sets color uniforms (but not alpha) given an SkColor. The alpha is assumed to |
| 58 | // be 1.0 in this case. |
| 59 | void SetOpaqueColorUniform(GLuint handle, SkColor c); |
| 60 | |
Tibor Goldschwendt | 13aead39 | 2017-07-14 03:02:43 | [diff] [blame] | 61 | } // namespace vr |
cjgrant | 1ce4ff3 | 2016-09-19 14:03:36 | [diff] [blame] | 62 | |
Tibor Goldschwendt | 13aead39 | 2017-07-14 03:02:43 | [diff] [blame] | 63 | #endif // CHROME_BROWSER_VR_VR_GL_UTIL_H_ |