1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef SHADER_PROJECTED_TEX_H 18 #define SHADER_PROJECTED_TEX_H 19 20 // This shader is used to project a sensors image onto wold space geometry 21 // as if it were projected from the original sensor's point of view in the world. 22 23 const char vtxShader_projectedTexture[] = "" 24 "#version 300 es \n" 25 "layout(location = 0) in vec4 pos; \n" 26 "uniform mat4 cameraMat; \n" 27 "uniform mat4 projectionMat; \n" 28 "out vec4 projectionSpace; \n" 29 "void main() \n" 30 "{ \n" 31 " gl_Position = cameraMat * pos; \n" 32 " projectionSpace = projectionMat * pos; \n" 33 "} \n"; 34 35 const char pixShader_projectedTexture[] = 36 "#version 300 es \n" 37 "precision mediump float; \n" 38 "uniform sampler2D tex; \n" 39 "in vec4 projectionSpace; \n" 40 "out vec4 color; \n" 41 "void main() \n" 42 "{ \n" 43 " const vec2 zero = vec2(0.0f, 0.0f); \n" 44 " const vec2 one = vec2(1.0f, 1.0f); \n" 45 " \n" 46 " // Compute perspective correct texture coordinates \n" 47 " // in the sensor map \n" 48 " vec2 cs = projectionSpace.xy / projectionSpace.w; \n" 49 " \n" 50 " // flip the texture! \n" 51 " cs.y = -cs.y; \n" 52 " \n" 53 " // scale from -1/1 clip space to 0/1 uv space \n" 54 " vec2 uv = (cs + 1.0f) * 0.5f; \n" 55 " \n" 56 " // Bail if we don't have a valid projection \n" 57 " if ((projectionSpace.w <= 0.0f) || \n" 58 " any(greaterThan(uv, one)) || \n" 59 " any(lessThan(uv, zero))) { \n" 60 " discard; \n" 61 " } \n" 62 " color = texture(tex, uv); \n" 63 "} \n"; 64 65 #endif // SHADER_PROJECTED_TEX_H